@damusix/ghost-mcp 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +79 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -163,7 +163,10 @@ const postWriteFields = {
|
|
|
163
163
|
feature_image_caption: z.string().optional().describe("Feature image caption (HTML)"),
|
|
164
164
|
custom_template: z.string().optional().describe("Custom template for the post"),
|
|
165
165
|
newsletter: z.object({ id: z.string() }).optional().describe("Newsletter to send the post to"),
|
|
166
|
-
email_subject: z.string().optional().describe("Custom email subject when sending as newsletter")
|
|
166
|
+
email_subject: z.string().optional().describe("Custom email subject when sending as newsletter"),
|
|
167
|
+
slug: z.string().optional().describe("Custom URL slug for the post"),
|
|
168
|
+
email_only: z.boolean().optional().describe("Whether the post is email-only (not published to web)"),
|
|
169
|
+
email_segment: z.string().optional().describe("NQL filter for email recipient segment (e.g. 'status:free', 'status:-free')")
|
|
167
170
|
};
|
|
168
171
|
const addSchema$7 = z.object({
|
|
169
172
|
...postWriteFields,
|
|
@@ -310,7 +313,8 @@ const pageWriteFields = {
|
|
|
310
313
|
feature_image: z.string().optional().describe("Feature image URL"),
|
|
311
314
|
feature_image_alt: z.string().optional().describe("Feature image alt text"),
|
|
312
315
|
feature_image_caption: z.string().optional().describe("Feature image caption (HTML)"),
|
|
313
|
-
custom_template: z.string().optional().describe("Custom template")
|
|
316
|
+
custom_template: z.string().optional().describe("Custom template"),
|
|
317
|
+
slug: z.string().optional().describe("Custom URL slug for the page")
|
|
314
318
|
};
|
|
315
319
|
const addSchema$6 = z.object({
|
|
316
320
|
...pageWriteFields,
|
|
@@ -504,7 +508,8 @@ const tierWriteFields = {
|
|
|
504
508
|
monthly_price: z.number().optional().describe("Monthly price in smallest currency unit (e.g. cents)"),
|
|
505
509
|
yearly_price: z.number().optional().describe("Yearly price in smallest currency unit"),
|
|
506
510
|
currency: z.string().optional().describe("Three-letter ISO currency code (e.g. \"usd\")"),
|
|
507
|
-
benefits: z.array(z.string()).optional().describe("List of benefits for this tier")
|
|
511
|
+
benefits: z.array(z.string()).optional().describe("List of benefits for this tier"),
|
|
512
|
+
trial_days: z.number().optional().describe("Number of free trial days for new subscribers")
|
|
508
513
|
};
|
|
509
514
|
const addSchema$4 = z.object({
|
|
510
515
|
...tierWriteFields,
|
|
@@ -564,7 +569,9 @@ const adminTierActions = [
|
|
|
564
569
|
const browseParams$8 = z.object({
|
|
565
570
|
limit: z.union([z.number(), z.literal("all")]).optional().describe("Number of results per page"),
|
|
566
571
|
page: z.number().optional().describe("Page number"),
|
|
567
|
-
order: z.string().optional().describe("Sort order")
|
|
572
|
+
order: z.string().optional().describe("Sort order"),
|
|
573
|
+
filter: z.string().optional().describe("NQL filter expression"),
|
|
574
|
+
include: z.string().optional().describe("Related data to include (e.g. 'count.posts,count.members,count.active_members')")
|
|
568
575
|
});
|
|
569
576
|
const readParams$9 = z.object({ id: z.string().describe("Newsletter ID") });
|
|
570
577
|
const newsletterWriteFields = {
|
|
@@ -587,7 +594,39 @@ const newsletterWriteFields = {
|
|
|
587
594
|
show_feature_image: z.boolean().optional().describe("Show feature image in emails"),
|
|
588
595
|
body_font_category: z.enum(["serif", "sans_serif"]).optional().describe("Body font category"),
|
|
589
596
|
footer_content: z.string().optional().describe("Footer content (HTML)"),
|
|
590
|
-
show_badge: z.boolean().optional().describe("Show Ghost badge in footer")
|
|
597
|
+
show_badge: z.boolean().optional().describe("Show Ghost badge in footer"),
|
|
598
|
+
feedback_enabled: z.boolean().optional().describe("Enable email feedback/reactions"),
|
|
599
|
+
show_excerpt: z.boolean().optional().describe("Show post excerpt in emails"),
|
|
600
|
+
show_post_title_section: z.boolean().optional().describe("Show post title section"),
|
|
601
|
+
show_comment_cta: z.boolean().optional().describe("Show comment call-to-action"),
|
|
602
|
+
show_subscription_details: z.boolean().optional().describe("Show subscription details"),
|
|
603
|
+
show_latest_posts: z.boolean().optional().describe("Show latest posts section"),
|
|
604
|
+
show_share_button: z.boolean().optional().describe("Show share button"),
|
|
605
|
+
background_color: z.string().optional().describe("Background color (e.g. 'light', 'dark', or hex)"),
|
|
606
|
+
post_title_color: z.string().nullable().optional().describe("Post title color (hex)"),
|
|
607
|
+
button_corners: z.enum([
|
|
608
|
+
"square",
|
|
609
|
+
"rounded",
|
|
610
|
+
"pill"
|
|
611
|
+
]).optional().describe("Button corner style"),
|
|
612
|
+
button_style: z.enum(["fill", "outline"]).optional().describe("Button style"),
|
|
613
|
+
title_font_weight: z.enum([
|
|
614
|
+
"normal",
|
|
615
|
+
"medium",
|
|
616
|
+
"semibold",
|
|
617
|
+
"bold"
|
|
618
|
+
]).optional().describe("Title font weight"),
|
|
619
|
+
link_style: z.enum([
|
|
620
|
+
"underline",
|
|
621
|
+
"regular",
|
|
622
|
+
"bold"
|
|
623
|
+
]).optional().describe("Link style in emails"),
|
|
624
|
+
image_corners: z.enum(["square", "rounded"]).optional().describe("Image corner style"),
|
|
625
|
+
header_background_color: z.string().optional().describe("Header background color (e.g. 'transparent', hex, 'accent')"),
|
|
626
|
+
section_title_color: z.string().nullable().optional().describe("Section title color (hex)"),
|
|
627
|
+
divider_color: z.string().nullable().optional().describe("Divider color (hex)"),
|
|
628
|
+
button_color: z.string().optional().describe("Button color (e.g. 'accent', hex)"),
|
|
629
|
+
link_color: z.string().optional().describe("Link color (e.g. 'accent', hex)")
|
|
591
630
|
};
|
|
592
631
|
const addSchema$3 = z.object({
|
|
593
632
|
...newsletterWriteFields,
|
|
@@ -657,14 +696,12 @@ const addSchema$2 = z.object({
|
|
|
657
696
|
duration_in_months: z.number().optional().describe("Number of months for repeating duration"),
|
|
658
697
|
currency_restriction: z.boolean().optional().describe("Whether the offer is restricted to a specific currency"),
|
|
659
698
|
currency: z.string().optional().describe("Three-letter ISO currency code (required for fixed type)"),
|
|
660
|
-
tier: z.object({ id: z.string().describe("Tier ID") }).describe("Tier this offer applies to (required)")
|
|
699
|
+
tier: z.object({ id: z.string().describe("Tier ID") }).describe("Tier this offer applies to (required)"),
|
|
700
|
+
redemption_type: z.enum(["signup", "retention"]).optional().describe("Whether the offer is for new signups or existing member retention")
|
|
661
701
|
});
|
|
662
702
|
const editSchema$2 = z.object({
|
|
663
703
|
id: z.string().describe("Offer ID (required)"),
|
|
664
|
-
name: z.string().optional().describe("Internal name")
|
|
665
|
-
code: z.string().optional().describe("Unique code for the offer URL"),
|
|
666
|
-
display_title: z.string().optional().describe("Title shown to users"),
|
|
667
|
-
display_description: z.string().optional().describe("Description shown to users")
|
|
704
|
+
name: z.string().optional().describe("Internal name")
|
|
668
705
|
});
|
|
669
706
|
const adminOfferActions = [
|
|
670
707
|
{
|
|
@@ -1174,6 +1211,35 @@ function listActions(api) {
|
|
|
1174
1211
|
if (api) return actions.filter((a) => a.api === api);
|
|
1175
1212
|
return actions;
|
|
1176
1213
|
}
|
|
1214
|
+
function unwrapZodType(field) {
|
|
1215
|
+
if (field instanceof z.ZodOptional || field instanceof z.ZodNullable) return unwrapZodType(field._def.innerType);
|
|
1216
|
+
if (field instanceof z.ZodDefault) return unwrapZodType(field._def.innerType);
|
|
1217
|
+
return field;
|
|
1218
|
+
}
|
|
1219
|
+
function describeZodType(field) {
|
|
1220
|
+
const inner = unwrapZodType(field);
|
|
1221
|
+
if (inner instanceof z.ZodEnum) return `values: ${inner._def.values.map((v) => `\`${v}\``).join(", ")}`;
|
|
1222
|
+
if (inner instanceof z.ZodObject) {
|
|
1223
|
+
const shape = inner.shape;
|
|
1224
|
+
return `object: { ${Object.entries(shape).map(([k, v]) => {
|
|
1225
|
+
const t = describeZodType(v);
|
|
1226
|
+
return t ? `${k}${t.startsWith("values:") ? ` (${t})` : `: ${t}`}` : k;
|
|
1227
|
+
}).join(", ")} }`;
|
|
1228
|
+
}
|
|
1229
|
+
if (inner instanceof z.ZodArray) {
|
|
1230
|
+
const itemType = describeZodType(inner._def.type);
|
|
1231
|
+
return itemType ? `array of [${itemType}]` : "array";
|
|
1232
|
+
}
|
|
1233
|
+
if (inner instanceof z.ZodUnion) {
|
|
1234
|
+
const parts = inner._def.options.map((o) => describeZodType(o)).filter(Boolean);
|
|
1235
|
+
return parts.length > 0 ? parts.join(" | ") : "";
|
|
1236
|
+
}
|
|
1237
|
+
if (inner instanceof z.ZodLiteral) return `\`${String(inner._def.value)}\``;
|
|
1238
|
+
if (inner instanceof z.ZodString) return "string";
|
|
1239
|
+
if (inner instanceof z.ZodNumber) return "number";
|
|
1240
|
+
if (inner instanceof z.ZodBoolean) return "boolean";
|
|
1241
|
+
return "";
|
|
1242
|
+
}
|
|
1177
1243
|
function getActionHelp(name, api) {
|
|
1178
1244
|
const action = getAction(name, api);
|
|
1179
1245
|
if (!action) return;
|
|
@@ -1194,7 +1260,9 @@ function getActionHelp(name, api) {
|
|
|
1194
1260
|
for (const [key, field] of Object.entries(shape)) {
|
|
1195
1261
|
const isOptional = field.isOptional();
|
|
1196
1262
|
const desc = field.description || "";
|
|
1197
|
-
|
|
1263
|
+
const typeInfo = describeZodType(field);
|
|
1264
|
+
const suffix = typeInfo ? ` — ${typeInfo}` : "";
|
|
1265
|
+
lines.push(`- **${key}**${isOptional ? " (optional)" : " (required)"}: ${desc}${suffix}`);
|
|
1198
1266
|
}
|
|
1199
1267
|
lines.push("");
|
|
1200
1268
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["globalFetchConfig","browseParams","readParams","readBySlugParams","addSchema","editSchema","copySchema","deleteSchema","browseParams","readParams","readBySlugParams","addSchema","editSchema","deleteSchema","browseParams","readParams","addSchema","editSchema","deleteSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","uploadSchema","readParams","browseParams","readParams","readBySlugParams","browseParams","readParams","readBySlugParams","browseParams","readParams","readBySlugParams","browseParams","readParams","fetchGet"],"sources":["../src/ghost-client.ts","../src/actions/admin/posts.ts","../src/actions/admin/pages.ts","../src/actions/admin/tags.ts","../src/actions/admin/tiers.ts","../src/actions/admin/newsletters.ts","../src/actions/admin/offers.ts","../src/actions/admin/members.ts","../src/actions/admin/users.ts","../src/actions/admin/images.ts","../src/actions/admin/themes.ts","../src/actions/admin/webhooks.ts","../src/actions/admin/site.ts","../src/actions/content/posts.ts","../src/actions/content/pages.ts","../src/actions/content/tags.ts","../src/actions/content/authors.ts","../src/actions/content/tiers.ts","../src/actions/content/settings.ts","../src/actions/registry.ts","../src/tools/use-ghost-api.ts","../src/tools/ghost-api-help.ts","../src/tools/ghost-docs.ts","../src/index.ts"],"sourcesContent":["import { FetchEngine, config as globalFetchConfig } from '@logosdx/fetch';\nimport type { FetchError } from '@logosdx/fetch';\nimport jwt from 'jsonwebtoken';\n\nconst GHOST_URL = process.env.GHOST_URL || '';\nconst GHOST_ADMIN_API_KEY = process.env.GHOST_ADMIN_API_KEY || '';\nconst GHOST_CONTENT_API_KEY = process.env.GHOST_CONTENT_API_KEY || '';\nconst GHOST_API_VERSION = process.env.GHOST_API_VERSION || 'v6.0';\nconst GHOST_RATE_LIMIT = Number(process.env.GHOST_RATE_LIMIT) || 50;\n\nfunction generateAdminToken(): string {\n const [id, secret] = GHOST_ADMIN_API_KEY.split(':');\n const token = jwt.sign({}, Buffer.from(secret, 'hex'), {\n keyid: id,\n algorithm: 'HS256',\n expiresIn: '5m',\n audience: '/admin/',\n });\n return token;\n}\n\nconst resilience = {\n attemptTimeout: 15000,\n totalTimeout: 45000,\n\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n shouldRetry: (error: FetchError, _attempt: number) => {\n if (error.status === 429) {\n const retryAfter = error.headers?.['retry-after'];\n return retryAfter ? parseInt(retryAfter as string) * 1000 : 5000;\n }\n if (error.status >= 400 && error.status < 500) {\n return false;\n }\n return true;\n },\n },\n\n cachePolicy: {\n enabled: true,\n methods: ['GET'] as const,\n ttl: 3_600_000,\n staleIn: 10_000,\n },\n\n dedupePolicy: true as const,\n\n rateLimitPolicy: {\n maxCalls: GHOST_RATE_LIMIT,\n windowMs: 60_000,\n waitForToken: true,\n },\n};\n\nexport const adminApi = new FetchEngine({\n baseUrl: `${GHOST_URL}/ghost/api/admin`,\n defaultType: 'json',\n headers: {\n 'Accept-Version': GHOST_API_VERSION,\n 'Content-Type': 'application/json',\n Authorization: `Ghost ${generateAdminToken()}`,\n },\n ...resilience,\n});\n\nadminApi.hooks.add('beforeRequest', (url, opts) => {\n opts.headers.Authorization = `Ghost ${generateAdminToken()}`;\n});\n\nexport const contentApi = new FetchEngine({\n baseUrl: `${GHOST_URL}/ghost/api/content`,\n defaultType: 'json',\n headers: {\n 'Accept-Version': GHOST_API_VERSION,\n 'Content-Type': 'application/json',\n },\n params: {\n key: GHOST_CONTENT_API_KEY,\n },\n ...resilience,\n});\n\nexport const docsApi = new FetchEngine({\n baseUrl: 'https://docs.ghost.org',\n defaultType: 'text',\n attemptTimeout: 15000,\n totalTimeout: 45000,\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n },\n cachePolicy: {\n enabled: true,\n methods: ['GET'] as const,\n ttl: 3_600_000,\n staleIn: 10_000,\n },\n dedupePolicy: true as const,\n});\n\n// Configure global fetch instance for raw downloads (image/theme uploads)\n// No auth, no cache — just retry and dedupe\nglobalFetchConfig.set({\n attemptTimeout: 15000,\n totalTimeout: 45000,\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n },\n dedupePolicy: true,\n});\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data to include (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats to return: \"html\", \"lexical\", \"plaintext\" (comma-separated)'),\n filter: z\n .string()\n .optional()\n .describe('NQL filter expression (e.g. \"status:published+tag:news\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Post ID'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Post slug'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst postWriteFields = {\n title: z.string().describe('Post title'),\n lexical: z.string().optional().describe('Post content in Lexical JSON format'),\n status: z.enum(['published', 'draft', 'scheduled']).optional().describe('Post status'),\n tags: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Tags to assign (by id or name)'),\n authors: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Authors to assign (by id)'),\n featured: z.boolean().optional().describe('Whether the post is featured'),\n visibility: z.string().optional().describe('Post visibility (public, members, paid, tiers)'),\n published_at: z.string().optional().describe('Publication date (ISO 8601 format)'),\n custom_excerpt: z.string().optional().describe('Custom excerpt for the post'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for the post head'),\n codeinjection_foot: z.string().optional().describe('Code injection for the post footer'),\n canonical_url: z.string().optional().describe('Canonical URL for the post'),\n feature_image: z.string().optional().describe('Feature image URL'),\n feature_image_alt: z.string().optional().describe('Feature image alt text'),\n feature_image_caption: z.string().optional().describe('Feature image caption (HTML)'),\n custom_template: z.string().optional().describe('Custom template for the post'),\n newsletter: z.object({ id: z.string() }).optional().describe('Newsletter to send the post to'),\n email_subject: z\n .string()\n .optional()\n .describe('Custom email subject when sending as newsletter'),\n};\n\nconst addSchema = z.object({\n ...postWriteFields,\n title: z.string().describe('Post title (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Post ID (required)'),\n updated_at: z\n .string()\n .describe('Last known updated_at value for collision detection (required)'),\n ...postWriteFields,\n title: z.string().optional().describe('Post title'),\n});\n\nconst copySchema = z.object({\n id: z.string().describe('Post ID to copy'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Post ID to delete'),\n});\n\nexport const adminPostActions: ActionDefinition[] = [\n {\n name: 'posts.browse',\n api: 'admin',\n method: 'GET',\n path: '/posts/',\n inputSchema: browseParams,\n description: 'Browse all posts with filtering, pagination, and sorting',\n example: { filter: 'status:published', limit: 10, include: 'authors,tags' },\n },\n {\n name: 'posts.read',\n api: 'admin',\n method: 'GET',\n path: '/posts/{id}/',\n inputSchema: readParams,\n description: 'Read a single post by ID',\n example: {\n id: '5ddc9141c35e7700383b2937',\n include: 'authors,tags',\n formats: 'html,lexical',\n },\n },\n {\n name: 'posts.read_by_slug',\n api: 'admin',\n method: 'GET',\n path: '/posts/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a single post by slug',\n example: { slug: 'my-post', include: 'authors,tags' },\n },\n {\n name: 'posts.add',\n api: 'admin',\n method: 'POST',\n path: '/posts/',\n inputSchema: addSchema,\n description: 'Create a new post',\n example: { title: 'My New Post', status: 'draft', tags: [{ name: 'News' }] },\n },\n {\n name: 'posts.edit',\n api: 'admin',\n method: 'PUT',\n path: '/posts/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing post. Requires updated_at for collision detection.',\n example: {\n id: '5ddc9141c35e7700383b2937',\n updated_at: '2024-01-01T00:00:00.000Z',\n title: 'Updated Title',\n },\n },\n {\n name: 'posts.copy',\n api: 'admin',\n method: 'POST',\n path: '/posts/{id}/copy/',\n inputSchema: copySchema,\n description: 'Copy an existing post',\n example: { id: '5ddc9141c35e7700383b2937' },\n },\n {\n name: 'posts.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/posts/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a post by ID',\n example: { id: '5ddc9141c35e7700383b2937' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data to include (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats to return: \"html\", \"lexical\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Page ID'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Page slug'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst pageWriteFields = {\n title: z.string().describe('Page title'),\n lexical: z.string().optional().describe('Page content in Lexical JSON format'),\n status: z.enum(['published', 'draft', 'scheduled']).optional().describe('Page status'),\n tags: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Tags to assign (by id or name)'),\n authors: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Authors to assign (by id)'),\n featured: z.boolean().optional().describe('Whether the page is featured'),\n visibility: z.string().optional().describe('Page visibility'),\n published_at: z.string().optional().describe('Publication date (ISO 8601)'),\n custom_excerpt: z.string().optional().describe('Custom excerpt'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for head'),\n codeinjection_foot: z.string().optional().describe('Code injection for footer'),\n canonical_url: z.string().optional().describe('Canonical URL'),\n feature_image: z.string().optional().describe('Feature image URL'),\n feature_image_alt: z.string().optional().describe('Feature image alt text'),\n feature_image_caption: z.string().optional().describe('Feature image caption (HTML)'),\n custom_template: z.string().optional().describe('Custom template'),\n};\n\nconst addSchema = z.object({\n ...pageWriteFields,\n title: z.string().describe('Page title (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Page ID (required)'),\n updated_at: z.string().describe('Last known updated_at for collision detection (required)'),\n ...pageWriteFields,\n title: z.string().optional().describe('Page title'),\n});\n\nconst copySchema = z.object({ id: z.string().describe('Page ID to copy') });\nconst deleteSchema = z.object({ id: z.string().describe('Page ID to delete') });\n\nexport const adminPageActions: ActionDefinition[] = [\n {\n name: 'pages.browse',\n api: 'admin',\n method: 'GET',\n path: '/pages/',\n inputSchema: browseParams,\n description: 'Browse all pages with filtering, pagination, and sorting',\n example: { filter: 'status:published', limit: 10 },\n },\n {\n name: 'pages.read',\n api: 'admin',\n method: 'GET',\n path: '/pages/{id}/',\n inputSchema: readParams,\n description: 'Read a single page by ID',\n },\n {\n name: 'pages.read_by_slug',\n api: 'admin',\n method: 'GET',\n path: '/pages/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a single page by slug',\n },\n {\n name: 'pages.add',\n api: 'admin',\n method: 'POST',\n path: '/pages/',\n inputSchema: addSchema,\n description: 'Create a new page',\n example: { title: 'About Us', status: 'draft' },\n },\n {\n name: 'pages.edit',\n api: 'admin',\n method: 'PUT',\n path: '/pages/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing page. Requires updated_at for collision detection.',\n },\n {\n name: 'pages.copy',\n api: 'admin',\n method: 'POST',\n path: '/pages/{id}/copy/',\n inputSchema: copySchema,\n description: 'Copy an existing page',\n },\n {\n name: 'pages.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/pages/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a page by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n filter: z.string().optional().describe('NQL filter expression'),\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tag ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst tagWriteFields = {\n name: z.string().describe('Tag name'),\n slug: z.string().optional().describe('Tag slug (auto-generated from name if omitted)'),\n description: z.string().optional().describe('Tag description'),\n feature_image: z.string().optional().describe('Feature image URL'),\n visibility: z.string().optional().describe('Tag visibility (public or internal)'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for head'),\n codeinjection_foot: z.string().optional().describe('Code injection for footer'),\n canonical_url: z.string().optional().describe('Canonical URL'),\n accent_color: z.string().optional().describe('Accent color hex code'),\n};\n\nconst addSchema = z.object({\n ...tagWriteFields,\n name: z.string().describe('Tag name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Tag ID (required)'),\n updated_at: z.string().describe('Last known updated_at for collision detection (required)'),\n ...tagWriteFields,\n name: z.string().optional().describe('Tag name'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Tag ID to delete'),\n});\n\nexport const adminTagActions: ActionDefinition[] = [\n {\n name: 'tags.browse',\n api: 'admin',\n method: 'GET',\n path: '/tags/',\n inputSchema: browseParams,\n description: 'Browse all tags with filtering and pagination',\n example: { limit: 'all', include: 'count.posts' },\n },\n {\n name: 'tags.read',\n api: 'admin',\n method: 'GET',\n path: '/tags/{id}/',\n inputSchema: readParams,\n description: 'Read a single tag by ID',\n },\n {\n name: 'tags.add',\n api: 'admin',\n method: 'POST',\n path: '/tags/',\n inputSchema: addSchema,\n description: 'Create a new tag',\n example: { name: 'News', description: 'Latest news articles' },\n },\n {\n name: 'tags.edit',\n api: 'admin',\n method: 'PUT',\n path: '/tags/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing tag',\n },\n {\n name: 'tags.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/tags/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a tag by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n filter: z.string().optional().describe('NQL filter expression (e.g. \"type:paid+active:true\")'),\n include: z\n .string()\n .optional()\n .describe('Related data to include (e.g. \"monthly_price,yearly_price,benefits\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tier ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst tierWriteFields = {\n name: z.string().describe('Tier name'),\n description: z.string().optional().describe('Tier description'),\n welcome_page_url: z.string().optional().describe('URL of the welcome page for new subscribers'),\n visibility: z.enum(['public', 'none']).optional().describe('Tier visibility'),\n monthly_price: z\n .number()\n .optional()\n .describe('Monthly price in smallest currency unit (e.g. cents)'),\n yearly_price: z.number().optional().describe('Yearly price in smallest currency unit'),\n currency: z.string().optional().describe('Three-letter ISO currency code (e.g. \"usd\")'),\n benefits: z.array(z.string()).optional().describe('List of benefits for this tier'),\n};\n\nconst addSchema = z.object({\n ...tierWriteFields,\n name: z.string().describe('Tier name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Tier ID (required)'),\n ...tierWriteFields,\n name: z.string().optional().describe('Tier name'),\n});\n\nexport const adminTierActions: ActionDefinition[] = [\n {\n name: 'tiers.browse',\n api: 'admin',\n method: 'GET',\n path: '/tiers/',\n inputSchema: browseParams,\n description: 'Browse all tiers with filtering and pagination',\n example: {\n filter: 'type:paid+active:true',\n include: 'monthly_price,yearly_price,benefits',\n },\n },\n {\n name: 'tiers.read',\n api: 'admin',\n method: 'GET',\n path: '/tiers/{id}/',\n inputSchema: readParams,\n description: 'Read a single tier by ID',\n },\n {\n name: 'tiers.add',\n api: 'admin',\n method: 'POST',\n path: '/tiers/',\n inputSchema: addSchema,\n description: 'Create a new tier',\n example: { name: 'Premium', monthly_price: 500, yearly_price: 5000, currency: 'usd' },\n },\n {\n name: 'tiers.edit',\n api: 'admin',\n method: 'PUT',\n path: '/tiers/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing tier',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Newsletter ID'),\n});\n\nconst newsletterWriteFields = {\n name: z.string().describe('Newsletter name'),\n description: z.string().optional().describe('Newsletter description'),\n slug: z.string().optional().describe('Newsletter slug'),\n sender_name: z.string().optional().describe('Sender name in emails'),\n sender_email: z.string().optional().describe('Sender email address (must be validated)'),\n sender_reply_to: z.enum(['newsletter', 'support']).optional().describe('Reply-to address type'),\n status: z.enum(['active', 'archived']).optional().describe('Newsletter status'),\n visibility: z.string().optional().describe('Newsletter visibility'),\n subscribe_on_signup: z.boolean().optional().describe('Auto-subscribe new members'),\n sort_order: z.number().optional().describe('Sort order position'),\n header_image: z.string().optional().describe('Header image URL'),\n show_header_icon: z.boolean().optional().describe('Show site icon in header'),\n show_header_title: z.boolean().optional().describe('Show site title in header'),\n show_header_name: z.boolean().optional().describe('Show newsletter name in header'),\n title_font_category: z.enum(['serif', 'sans_serif']).optional().describe('Title font category'),\n title_alignment: z.enum(['left', 'center']).optional().describe('Title alignment'),\n show_feature_image: z.boolean().optional().describe('Show feature image in emails'),\n body_font_category: z.enum(['serif', 'sans_serif']).optional().describe('Body font category'),\n footer_content: z.string().optional().describe('Footer content (HTML)'),\n show_badge: z.boolean().optional().describe('Show Ghost badge in footer'),\n};\n\nconst addSchema = z.object({\n ...newsletterWriteFields,\n name: z.string().describe('Newsletter name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Newsletter ID (required)'),\n ...newsletterWriteFields,\n name: z.string().optional().describe('Newsletter name'),\n});\n\nexport const adminNewsletterActions: ActionDefinition[] = [\n {\n name: 'newsletters.browse',\n api: 'admin',\n method: 'GET',\n path: '/newsletters/',\n inputSchema: browseParams,\n description: 'Browse all newsletters',\n example: { limit: 'all' },\n },\n {\n name: 'newsletters.read',\n api: 'admin',\n method: 'GET',\n path: '/newsletters/{id}/',\n inputSchema: readParams,\n description: 'Read a single newsletter by ID',\n },\n {\n name: 'newsletters.add',\n api: 'admin',\n method: 'POST',\n path: '/newsletters/',\n inputSchema: addSchema,\n description: 'Create a new newsletter',\n example: { name: 'Weekly Digest', sender_name: 'My Blog' },\n },\n {\n name: 'newsletters.edit',\n api: 'admin',\n method: 'PUT',\n path: '/newsletters/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing newsletter',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({}).describe('No parameters required');\n\nconst readParams = z.object({\n id: z.string().describe('Offer ID'),\n});\n\nconst addSchema = z.object({\n name: z.string().describe('Internal name for the offer (required)'),\n code: z.string().describe('Unique code for the offer URL (required)'),\n display_title: z.string().describe('Title shown to users (required)'),\n display_description: z.string().describe('Description shown to users (required)'),\n type: z\n .enum(['percent', 'fixed'])\n .describe('Discount type: percentage or fixed amount (required)'),\n cadence: z.enum(['month', 'year']).describe('Billing cadence the offer applies to (required)'),\n amount: z\n .number()\n .describe('Discount amount: percentage (1-100) or fixed amount in cents (required)'),\n duration: z\n .enum(['once', 'forever', 'repeating'])\n .describe('How long the discount lasts (required)'),\n duration_in_months: z.number().optional().describe('Number of months for repeating duration'),\n currency_restriction: z\n .boolean()\n .optional()\n .describe('Whether the offer is restricted to a specific currency'),\n currency: z\n .string()\n .optional()\n .describe('Three-letter ISO currency code (required for fixed type)'),\n tier: z\n .object({ id: z.string().describe('Tier ID') })\n .describe('Tier this offer applies to (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Offer ID (required)'),\n name: z.string().optional().describe('Internal name'),\n code: z.string().optional().describe('Unique code for the offer URL'),\n display_title: z.string().optional().describe('Title shown to users'),\n display_description: z.string().optional().describe('Description shown to users'),\n});\n\nexport const adminOfferActions: ActionDefinition[] = [\n {\n name: 'offers.browse',\n api: 'admin',\n method: 'GET',\n path: '/offers/',\n inputSchema: browseParams,\n description: 'Browse all offers',\n },\n {\n name: 'offers.read',\n api: 'admin',\n method: 'GET',\n path: '/offers/{id}/',\n inputSchema: readParams,\n description: 'Read a single offer by ID',\n },\n {\n name: 'offers.add',\n api: 'admin',\n method: 'POST',\n path: '/offers/',\n inputSchema: addSchema,\n description: 'Create a new offer (discount code)',\n example: {\n name: 'Black Friday',\n code: 'black-friday',\n display_title: '20% Off',\n display_description: 'Black Friday special',\n type: 'percent',\n cadence: 'year',\n amount: 20,\n duration: 'once',\n tier: { id: 'tier-id' },\n },\n },\n {\n name: 'offers.edit',\n api: 'admin',\n method: 'PUT',\n path: '/offers/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing offer (limited fields)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"newsletters,labels\")'),\n filter: z.string().optional().describe('NQL filter expression (e.g. \"status:paid\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Member ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst memberWriteFields = {\n email: z.string().describe('Member email address'),\n name: z.string().optional().describe('Member name'),\n note: z.string().optional().describe('Private note about the member'),\n labels: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Labels to assign'),\n newsletters: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Newsletters to subscribe the member to'),\n comped: z.boolean().optional().describe('Whether the member has a complimentary subscription'),\n};\n\nconst addSchema = z.object({\n ...memberWriteFields,\n email: z.string().describe('Member email address (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Member ID (required)'),\n ...memberWriteFields,\n email: z.string().optional().describe('Member email address'),\n});\n\nexport const adminMemberActions: ActionDefinition[] = [\n {\n name: 'members.browse',\n api: 'admin',\n method: 'GET',\n path: '/members/',\n inputSchema: browseParams,\n description: 'Browse all members with filtering and pagination',\n example: { filter: 'status:paid', include: 'newsletters', limit: 20 },\n },\n {\n name: 'members.read',\n api: 'admin',\n method: 'GET',\n path: '/members/{id}/',\n inputSchema: readParams,\n description: 'Read a single member by ID',\n },\n {\n name: 'members.add',\n api: 'admin',\n method: 'POST',\n path: '/members/',\n inputSchema: addSchema,\n description: 'Create a new member',\n example: { email: 'member@example.com', name: 'New Member', labels: [{ name: 'VIP' }] },\n },\n {\n name: 'members.edit',\n api: 'admin',\n method: 'PUT',\n path: '/members/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing member',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"roles,count.posts\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('User ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const adminUserActions: ActionDefinition[] = [\n {\n name: 'users.browse',\n api: 'admin',\n method: 'GET',\n path: '/users/',\n inputSchema: browseParams,\n description: 'Browse all users (staff members)',\n example: { include: 'roles', limit: 'all' },\n },\n {\n name: 'users.read',\n api: 'admin',\n method: 'GET',\n path: '/users/{id}/',\n inputSchema: readParams,\n description: 'Read a single user by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst uploadSchema = z.object({\n file: z.string().describe('Image URL to download and upload, or base64-encoded image data'),\n ref: z.string().optional().describe('Optional reference name for the uploaded image'),\n});\n\nexport const adminImageActions: ActionDefinition[] = [\n {\n name: 'images.upload',\n api: 'admin',\n method: 'POST',\n path: '/images/upload/',\n inputSchema: uploadSchema,\n description:\n 'Upload an image to Ghost. Provide a URL (which will be downloaded) or base64-encoded image data.',\n example: { file: 'https://example.com/photo.jpg', ref: 'hero-image' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst uploadSchema = z.object({\n file: z.string().describe('URL to a theme ZIP file to download and upload'),\n});\n\nconst activateSchema = z.object({\n name: z.string().describe('Theme name to activate'),\n});\n\nexport const adminThemeActions: ActionDefinition[] = [\n {\n name: 'themes.upload',\n api: 'admin',\n method: 'POST',\n path: '/themes/upload/',\n inputSchema: uploadSchema,\n description: 'Upload a theme ZIP file to Ghost. Provide a URL to the ZIP file.',\n example: { file: 'https://example.com/theme.zip' },\n },\n {\n name: 'themes.activate',\n api: 'admin',\n method: 'PUT',\n path: '/themes/{name}/activate/',\n inputSchema: activateSchema,\n description: 'Activate an installed theme by name',\n example: { name: 'casper' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst webhookEvents = z.enum([\n 'site.changed',\n 'post.added',\n 'post.deleted',\n 'post.edited',\n 'post.published',\n 'post.published.edited',\n 'post.unpublished',\n 'post.scheduled',\n 'post.unscheduled',\n 'post.rescheduled',\n 'page.added',\n 'page.deleted',\n 'page.edited',\n 'page.published',\n 'page.published.edited',\n 'page.unpublished',\n 'page.scheduled',\n 'page.unscheduled',\n 'page.rescheduled',\n 'tag.added',\n 'tag.edited',\n 'tag.deleted',\n 'post.tag.attached',\n 'post.tag.detached',\n 'page.tag.attached',\n 'page.tag.detached',\n 'member.added',\n 'member.edited',\n 'member.deleted',\n]);\n\nconst addSchema = z.object({\n event: webhookEvents.describe('Webhook event to listen for (required)'),\n target_url: z.string().describe('URL to receive webhook POST requests (required)'),\n name: z.string().optional().describe('Human-readable name for the webhook'),\n secret: z.string().optional().describe('Shared secret for HMAC signature verification'),\n api_version: z.string().optional().describe('Target API version'),\n integration_id: z.string().optional().describe('Associated integration ID'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Webhook ID (required)'),\n event: webhookEvents.optional().describe('Webhook event'),\n target_url: z.string().optional().describe('URL to receive webhook POST requests'),\n name: z.string().optional().describe('Human-readable name'),\n secret: z.string().optional().describe('Shared secret for HMAC verification'),\n api_version: z.string().optional().describe('Target API version'),\n integration_id: z.string().optional().describe('Associated integration ID'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Webhook ID to delete'),\n});\n\nexport const adminWebhookActions: ActionDefinition[] = [\n {\n name: 'webhooks.add',\n api: 'admin',\n method: 'POST',\n path: '/webhooks/',\n inputSchema: addSchema,\n description: 'Create a new webhook',\n example: {\n event: 'post.published',\n target_url: 'https://example.com/webhook',\n name: 'Post published',\n },\n },\n {\n name: 'webhooks.edit',\n api: 'admin',\n method: 'PUT',\n path: '/webhooks/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing webhook',\n },\n {\n name: 'webhooks.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/webhooks/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a webhook by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst readParams = z.object({}).describe('No parameters required');\n\nexport const adminSiteActions: ActionDefinition[] = [\n {\n name: 'site.read',\n api: 'admin',\n method: 'GET',\n path: '/site/',\n inputSchema: readParams,\n description: 'Read site configuration and metadata',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats: \"html\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression (e.g. \"tag:news+featured:true\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, max: 100, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Post ID'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Post slug'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nexport const contentPostActions: ActionDefinition[] = [\n {\n name: 'posts.browse',\n api: 'content',\n method: 'GET',\n path: '/posts/',\n inputSchema: browseParams,\n description: 'Browse published posts (Content API — read-only)',\n example: { filter: 'tag:news', include: 'authors,tags', limit: 10 },\n },\n {\n name: 'posts.read',\n api: 'content',\n method: 'GET',\n path: '/posts/{id}/',\n inputSchema: readParams,\n description: 'Read a published post by ID (Content API)',\n },\n {\n name: 'posts.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/posts/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a published post by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats: \"html\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Page ID'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Page slug'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nexport const contentPageActions: ActionDefinition[] = [\n {\n name: 'pages.browse',\n api: 'content',\n method: 'GET',\n path: '/pages/',\n inputSchema: browseParams,\n description: 'Browse published pages (Content API — read-only)',\n },\n {\n name: 'pages.read',\n api: 'content',\n method: 'GET',\n path: '/pages/{id}/',\n inputSchema: readParams,\n description: 'Read a published page by ID (Content API)',\n },\n {\n name: 'pages.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/pages/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a published page by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tag ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Tag slug'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const contentTagActions: ActionDefinition[] = [\n {\n name: 'tags.browse',\n api: 'content',\n method: 'GET',\n path: '/tags/',\n inputSchema: browseParams,\n description: 'Browse all tags (Content API — read-only)',\n example: { include: 'count.posts', limit: 'all' },\n },\n {\n name: 'tags.read',\n api: 'content',\n method: 'GET',\n path: '/tags/{id}/',\n inputSchema: readParams,\n description: 'Read a tag by ID (Content API)',\n },\n {\n name: 'tags.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/tags/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a tag by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Author ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Author slug'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const contentAuthorActions: ActionDefinition[] = [\n {\n name: 'authors.browse',\n api: 'content',\n method: 'GET',\n path: '/authors/',\n inputSchema: browseParams,\n description: 'Browse all authors (Content API — read-only)',\n example: { include: 'count.posts' },\n },\n {\n name: 'authors.read',\n api: 'content',\n method: 'GET',\n path: '/authors/{id}/',\n inputSchema: readParams,\n description: 'Read an author by ID (Content API)',\n },\n {\n name: 'authors.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/authors/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read an author by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Related data to include (e.g. \"monthly_price,yearly_price,benefits\")'),\n filter: z\n .string()\n .optional()\n .describe('NQL filter expression (e.g. \"type:paid+active:true+visibility:public\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n});\n\nexport const contentTierActions: ActionDefinition[] = [\n {\n name: 'tiers.browse',\n api: 'content',\n method: 'GET',\n path: '/tiers/',\n inputSchema: browseParams,\n description: 'Browse all tiers (Content API — read-only)',\n example: { include: 'monthly_price,yearly_price,benefits' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst readParams = z.object({}).describe('No parameters required');\n\nexport const contentSettingsActions: ActionDefinition[] = [\n {\n name: 'settings.read',\n api: 'content',\n method: 'GET',\n path: '/settings/',\n inputSchema: readParams,\n description: 'Read site settings (Content API — read-only)',\n },\n];\n","import { z } from 'zod';\n\n// Admin actions\nimport { adminPostActions } from './admin/posts.js';\nimport { adminPageActions } from './admin/pages.js';\nimport { adminTagActions } from './admin/tags.js';\nimport { adminTierActions } from './admin/tiers.js';\nimport { adminNewsletterActions } from './admin/newsletters.js';\nimport { adminOfferActions } from './admin/offers.js';\nimport { adminMemberActions } from './admin/members.js';\nimport { adminUserActions } from './admin/users.js';\nimport { adminImageActions } from './admin/images.js';\nimport { adminThemeActions } from './admin/themes.js';\nimport { adminWebhookActions } from './admin/webhooks.js';\nimport { adminSiteActions } from './admin/site.js';\n\n// Content actions\nimport { contentPostActions } from './content/posts.js';\nimport { contentPageActions } from './content/pages.js';\nimport { contentTagActions } from './content/tags.js';\nimport { contentAuthorActions } from './content/authors.js';\nimport { contentTierActions } from './content/tiers.js';\nimport { contentSettingsActions } from './content/settings.js';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\nexport type ApiType = 'admin' | 'content';\n\nexport interface ActionDefinition {\n name: string;\n api: ApiType;\n method: HttpMethod;\n path: string;\n inputSchema: z.ZodType;\n description: string;\n example?: Record<string, unknown>;\n}\n\nconst registry = new Map<string, ActionDefinition>();\n\nexport function registerAction(action: ActionDefinition): void {\n registry.set(`${action.api}:${action.name}`, action);\n}\n\nexport function registerActions(actions: ActionDefinition[]): void {\n for (const action of actions) {\n registerAction(action);\n }\n}\n\nexport function getAction(name: string, api?: ApiType): ActionDefinition | undefined {\n if (api) {\n return registry.get(`${api}:${name}`);\n }\n // Try admin first, then content\n return registry.get(`admin:${name}`) || registry.get(`content:${name}`);\n}\n\nexport function listActions(api?: ApiType): ActionDefinition[] {\n const actions = Array.from(registry.values());\n if (api) {\n return actions.filter((a) => a.api === api);\n }\n return actions;\n}\n\nexport function getActionHelp(name: string, api?: ApiType): string | undefined {\n const action = getAction(name, api);\n if (!action) {\n return undefined;\n }\n\n const schema = action.inputSchema;\n const lines: string[] = [\n `## ${action.name}`,\n '',\n action.description,\n '',\n `- **API:** ${action.api}`,\n `- **Method:** ${action.method}`,\n `- **Path:** ${action.path}`,\n '',\n ];\n\n // Extract schema info\n if (schema instanceof z.ZodObject) {\n lines.push('### Parameters', '');\n const shape = schema.shape as Record<string, z.ZodType>;\n for (const [key, field] of Object.entries(shape)) {\n const isOptional = field.isOptional();\n const desc = field.description || '';\n lines.push(`- **${key}**${isOptional ? ' (optional)' : ' (required)'}: ${desc}`);\n }\n lines.push('');\n }\n\n if (action.example) {\n lines.push(\n '### Example Payload',\n '',\n '```json',\n JSON.stringify(action.example, null, 2),\n '```',\n '',\n );\n }\n\n return lines.join('\\n');\n}\n\n// Register all actions\nfunction initRegistry(): void {\n const allActions = [\n ...adminPostActions,\n ...adminPageActions,\n ...adminTagActions,\n ...adminTierActions,\n ...adminNewsletterActions,\n ...adminOfferActions,\n ...adminMemberActions,\n ...adminUserActions,\n ...adminImageActions,\n ...adminThemeActions,\n ...adminWebhookActions,\n ...adminSiteActions,\n ...contentPostActions,\n ...contentPageActions,\n ...contentTagActions,\n ...contentAuthorActions,\n ...contentTierActions,\n ...contentSettingsActions,\n ];\n registerActions(allActions);\n}\n\ninitRegistry();\n","import { z } from 'zod';\nimport { attempt } from '@logosdx/utils';\nimport { get as fetchGet } from '@logosdx/fetch';\nimport mimeDb from 'mime-db';\nimport { adminApi, contentApi } from '../ghost-client.js';\nimport { getAction } from '../actions/registry.js';\nimport type { ApiType } from '../actions/registry.js';\n\nconst extToMime: Record<string, string> = {};\nfor (const [mime, meta] of Object.entries(mimeDb)) {\n for (const ext of (meta as any).extensions ?? []) {\n extToMime[`.${ext}`] = mime;\n }\n}\n\nexport const useGhostApiSchema = z.object({\n api: z\n .enum(['admin', 'content'])\n .describe('Which API to use: \"admin\" for full access, \"content\" for read-only public data'),\n action: z.string().describe('Action to execute (e.g. \"posts.browse\", \"members.add\")'),\n payload: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Action payload — fields depend on the action. Use ghost_api_help to see available fields.',\n ),\n});\n\nexport type UseGhostApiInput = z.infer<typeof useGhostApiSchema>;\n\nconst PATH_PARAMS = ['id', 'slug', 'name'] as const;\n\nfunction getUsedPathParams(template: string): Set<string> {\n const used = new Set<string>();\n for (const param of PATH_PARAMS) {\n if (template.includes(`{${param}}`)) {\n used.add(param);\n }\n }\n return used;\n}\n\nfunction buildPath(template: string, payload: Record<string, unknown>): string {\n let path = template;\n for (const param of PATH_PARAMS) {\n const placeholder = `{${param}}`;\n if (path.includes(placeholder) && payload[param]) {\n path = path.replace(placeholder, encodeURIComponent(String(payload[param])));\n }\n }\n return path;\n}\n\nfunction extractQueryParams(\n payload: Record<string, unknown>,\n usedPathParams: Set<string>,\n): Record<string, string> {\n const params: Record<string, string> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (usedPathParams.has(key)) {\n continue;\n }\n if (value !== undefined && value !== null) {\n params[key] = String(value);\n }\n }\n return params;\n}\n\nfunction extractBodyPayload(\n payload: Record<string, unknown>,\n usedPathParams: Set<string>,\n): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (usedPathParams.has(key)) {\n continue;\n }\n if (value !== undefined) {\n body[key] = value;\n }\n }\n return body;\n}\n\nexport async function handleUseGhostApi(input: UseGhostApiInput, mode: string): Promise<string> {\n const { api, action, payload = {} } = input;\n\n // Validate mode restrictions\n if (mode === 'content' && api === 'admin') {\n return JSON.stringify({\n error: 'Admin API is not available in content mode. Set GHOST_API_MODE=admin and provide GHOST_ADMIN_API_KEY to use admin actions.',\n });\n }\n\n // Look up the action\n const actionDef = getAction(action, api as ApiType);\n if (!actionDef) {\n return JSON.stringify({\n error: `Unknown action \"${action}\" for ${api} API. Use ghost_api_help to see available actions.`,\n });\n }\n\n // Validate payload\n const validation = actionDef.inputSchema.safeParse(payload);\n if (!validation.success) {\n return JSON.stringify({\n error: 'Invalid payload',\n details: validation.error.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n });\n }\n\n const validPayload = validation.data as Record<string, unknown>;\n const engine = api === 'admin' ? adminApi : contentApi;\n const usedPathParams = getUsedPathParams(actionDef.path);\n const path = buildPath(actionDef.path, validPayload);\n\n // Handle special cases: image/theme upload\n if (actionDef.name === 'images.upload' || actionDef.name === 'themes.upload') {\n return await handleFileUpload(actionDef.name, validPayload, path);\n }\n\n if (actionDef.method === 'GET') {\n const queryParams = extractQueryParams(validPayload, usedPathParams);\n const [response, err] = await attempt(async () =>\n engine.get(path, { params: queryParams }),\n );\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n }\n\n if (actionDef.method === 'DELETE') {\n const [response, err] = await attempt(async () => engine.delete(path));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n const resourcePrefix = `/${actionDef.name.split('.')[0]}`;\n await engine.invalidatePath(resourcePrefix);\n return JSON.stringify(response ?? { success: true });\n }\n\n // POST or PUT — build body wrapped in resource key\n const resourceKey = actionDef.name.split('.')[0];\n const body = extractBodyPayload(validPayload, usedPathParams);\n const wrappedBody = { [resourceKey]: [body] };\n\n if (actionDef.method === 'POST') {\n const [response, err] = await attempt(async () => engine.post(path, wrappedBody));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n }\n\n if (actionDef.method === 'PUT') {\n const [response, err] = await attempt(async () => engine.put(path, wrappedBody));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n const resourcePrefix = `/${actionDef.name.split('.')[0]}`;\n await engine.invalidatePath(resourcePrefix);\n return JSON.stringify(response);\n }\n\n return JSON.stringify({ error: `Unsupported method: ${actionDef.method}` });\n}\n\nasync function handleFileUpload(\n actionName: string,\n payload: Record<string, unknown>,\n path: string,\n): Promise<string> {\n const fileInput = payload.file as string;\n const ref = payload.ref as string | undefined;\n\n // Download file if URL\n let fileBuffer: Buffer;\n let filename: string;\n\n if (fileInput.startsWith('http://') || fileInput.startsWith('https://')) {\n const [response, err] = await attempt(async () => fetchGet(fileInput).arrayBuffer());\n if (err) {\n return JSON.stringify({ error: `Failed to download file: ${err.message}` });\n }\n fileBuffer = Buffer.from(response!.data);\n const urlPath = new URL(fileInput).pathname;\n filename =\n urlPath.split('/').pop() ||\n (actionName === 'images.upload' ? 'image.jpg' : 'theme.zip');\n } else {\n // Base64\n fileBuffer = Buffer.from(fileInput, 'base64');\n filename = actionName === 'images.upload' ? 'image.jpg' : 'theme.zip';\n }\n\n // Build multipart form\n const ext = filename.includes('.')\n ? filename.slice(filename.lastIndexOf('.')).toLowerCase()\n : '';\n const mimeType = extToMime[ext] || 'application/octet-stream';\n\n const formData = new FormData();\n const blob = new Blob([new Uint8Array(fileBuffer)], { type: mimeType });\n formData.append('file', blob, filename);\n if (ref) {\n formData.append('ref', ref);\n }\n\n const [response, err] = await attempt(async () =>\n adminApi.post(path, formData, {\n onBeforeReq: (opts) => {\n delete opts.headers!['Content-Type'];\n },\n }),\n );\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n}\n","import { z } from 'zod';\nimport { listActions, getActionHelp } from '../actions/registry.js';\nimport type { ApiType } from '../actions/registry.js';\n\nexport const ghostApiHelpSchema = z.object({\n action: z\n .string()\n .optional()\n .describe(\n 'Specific action name to get detailed help for (e.g. \"posts.add\"). Omit to see all available actions.',\n ),\n api: z.enum(['admin', 'content']).optional().describe('Filter actions by API type'),\n});\n\nexport type GhostApiHelpInput = z.infer<typeof ghostApiHelpSchema>;\n\nexport function handleGhostApiHelp(input: GhostApiHelpInput): string {\n const { action, api } = input;\n\n if (action) {\n const help = getActionHelp(action, api as ApiType | undefined);\n if (!help) {\n return `Unknown action \"${action}\". Use ghost_api_help without arguments to see all available actions.`;\n }\n return help;\n }\n\n // List all actions grouped by resource and API\n const actions = listActions(api as ApiType | undefined);\n const grouped: Record<string, Record<string, typeof actions>> = {};\n\n for (const a of actions) {\n if (!grouped[a.api]) {\n grouped[a.api] = {};\n }\n const resource = a.name.split('.')[0];\n if (!grouped[a.api][resource]) {\n grouped[a.api][resource] = [];\n }\n grouped[a.api][resource].push(a);\n }\n\n const lines: string[] = ['# Ghost API Actions', ''];\n\n for (const [apiType, resources] of Object.entries(grouped)) {\n lines.push(`## ${apiType.charAt(0).toUpperCase() + apiType.slice(1)} API`, '');\n for (const [resource, resourceActions] of Object.entries(resources)) {\n lines.push(`### ${resource}`);\n for (const a of resourceActions) {\n lines.push(`- **${a.name}** — ${a.description}`);\n }\n lines.push('');\n }\n }\n\n lines.push(\n '---',\n '',\n 'Use `ghost_api_help` with `action` parameter for detailed schema info on any action.',\n );\n return lines.join('\\n');\n}\n","import { z } from 'zod';\nimport { attempt } from '@logosdx/utils';\nimport { docsApi } from '../ghost-client.js';\n\nexport const ghostDocsSchema = z.object({\n all: z.boolean().optional().describe('Return the full Ghost documentation (llms.txt)'),\n search: z\n .string()\n .optional()\n .describe('Case-insensitive substring search across the documentation'),\n regex: z.string().optional().describe('Regex pattern string to match (e.g. \"/pattern/i\")'),\n});\n\nexport type GhostDocsInput = z.infer<typeof ghostDocsSchema>;\n\nasync function fetchDocs(): Promise<string> {\n const [response, err] = await attempt(async () => docsApi.get('/llms.txt'));\n if (err) {\n throw new Error(`Failed to fetch Ghost docs: ${err.message}`);\n }\n return response!.data as string;\n}\n\nexport async function handleGhostDocs(input: GhostDocsInput): Promise<string> {\n const { all, search, regex } = input;\n\n if (!all && !search && !regex) {\n return 'Provide one of: `all: true` to get full docs, `search` for text search, or `regex` for pattern matching.';\n }\n\n let content: string;\n try {\n content = await fetchDocs();\n } catch (error) {\n return `Error: ${(error as Error).message}`;\n }\n\n if (all) {\n return content;\n }\n\n const lines = content.split('\\n');\n const matchedLines: string[] = [];\n\n if (search) {\n const searchLower = search.toLowerCase();\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].toLowerCase().includes(searchLower)) {\n // Include context: 1 line before and after\n const start = Math.max(0, i - 1);\n const end = Math.min(lines.length - 1, i + 1);\n for (let j = start; j <= end; j++) {\n const line = `${j + 1}: ${lines[j]}`;\n if (!matchedLines.includes(line)) {\n matchedLines.push(line);\n }\n }\n }\n }\n }\n\n if (regex) {\n // Parse regex string: /pattern/flags or just pattern\n let pattern: RegExp;\n const regexMatch = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexMatch) {\n pattern = new RegExp(regexMatch[1], regexMatch[2]);\n } else {\n pattern = new RegExp(regex);\n }\n\n for (let i = 0; i < lines.length; i++) {\n if (pattern.test(lines[i])) {\n const start = Math.max(0, i - 1);\n const end = Math.min(lines.length - 1, i + 1);\n for (let j = start; j <= end; j++) {\n const line = `${j + 1}: ${lines[j]}`;\n if (!matchedLines.includes(line)) {\n matchedLines.push(line);\n }\n }\n }\n }\n }\n\n if (matchedLines.length === 0) {\n return 'No matches found.';\n }\n\n return matchedLines.join('\\n');\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { useGhostApiSchema, handleUseGhostApi } from './tools/use-ghost-api.js';\nimport { ghostApiHelpSchema, handleGhostApiHelp } from './tools/ghost-api-help.js';\nimport { ghostDocsSchema, handleGhostDocs } from './tools/ghost-docs.js';\n\nconst GHOST_API_MODE = process.env.GHOST_API_MODE || 'admin';\n\nconst server = new McpServer({\n name: 'ghost-mcp',\n version: '0.1.0',\n});\n\nserver.tool(\n 'use_ghost_api',\n 'Execute a Ghost API action (browse, read, add, edit, delete posts, pages, tags, members, newsletters, and more)',\n useGhostApiSchema.shape,\n async ({ api, action, payload }) => {\n const result = await handleUseGhostApi({ api, action, payload }, GHOST_API_MODE);\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nserver.tool(\n 'ghost_api_help',\n 'Get help on available Ghost API actions — list all actions or get detailed schema info for a specific action',\n ghostApiHelpSchema.shape,\n async ({ action, api }) => {\n const result = handleGhostApiHelp({ action, api });\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nserver.tool(\n 'ghost_docs',\n 'Search Ghost CMS documentation — fetch full docs, search by text, or match with regex',\n ghostDocsSchema.shape,\n async ({ all, search, regex }) => {\n const result = await handleGhostDocs({ all, search, regex });\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nasync function main(): Promise<void> {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["globalFetchConfig","browseParams","readParams","readBySlugParams","addSchema","editSchema","copySchema","deleteSchema","browseParams","readParams","readBySlugParams","addSchema","editSchema","deleteSchema","browseParams","readParams","addSchema","editSchema","deleteSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","addSchema","editSchema","browseParams","readParams","uploadSchema","readParams","browseParams","readParams","readBySlugParams","browseParams","readParams","readBySlugParams","browseParams","readParams","readBySlugParams","browseParams","readParams","fetchGet"],"sources":["../src/ghost-client.ts","../src/actions/admin/posts.ts","../src/actions/admin/pages.ts","../src/actions/admin/tags.ts","../src/actions/admin/tiers.ts","../src/actions/admin/newsletters.ts","../src/actions/admin/offers.ts","../src/actions/admin/members.ts","../src/actions/admin/users.ts","../src/actions/admin/images.ts","../src/actions/admin/themes.ts","../src/actions/admin/webhooks.ts","../src/actions/admin/site.ts","../src/actions/content/posts.ts","../src/actions/content/pages.ts","../src/actions/content/tags.ts","../src/actions/content/authors.ts","../src/actions/content/tiers.ts","../src/actions/content/settings.ts","../src/actions/registry.ts","../src/tools/use-ghost-api.ts","../src/tools/ghost-api-help.ts","../src/tools/ghost-docs.ts","../src/index.ts"],"sourcesContent":["import { FetchEngine, config as globalFetchConfig } from '@logosdx/fetch';\nimport type { FetchError } from '@logosdx/fetch';\nimport jwt from 'jsonwebtoken';\n\nconst GHOST_URL = process.env.GHOST_URL || '';\nconst GHOST_ADMIN_API_KEY = process.env.GHOST_ADMIN_API_KEY || '';\nconst GHOST_CONTENT_API_KEY = process.env.GHOST_CONTENT_API_KEY || '';\nconst GHOST_API_VERSION = process.env.GHOST_API_VERSION || 'v6.0';\nconst GHOST_RATE_LIMIT = Number(process.env.GHOST_RATE_LIMIT) || 50;\n\nfunction generateAdminToken(): string {\n const [id, secret] = GHOST_ADMIN_API_KEY.split(':');\n const token = jwt.sign({}, Buffer.from(secret, 'hex'), {\n keyid: id,\n algorithm: 'HS256',\n expiresIn: '5m',\n audience: '/admin/',\n });\n return token;\n}\n\nconst resilience = {\n attemptTimeout: 15000,\n totalTimeout: 45000,\n\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n retryableStatusCodes: [408, 429, 500, 502, 503, 504],\n shouldRetry: (error: FetchError, _attempt: number) => {\n if (error.status === 429) {\n const retryAfter = error.headers?.['retry-after'];\n return retryAfter ? parseInt(retryAfter as string) * 1000 : 5000;\n }\n if (error.status >= 400 && error.status < 500) {\n return false;\n }\n return true;\n },\n },\n\n cachePolicy: {\n enabled: true,\n methods: ['GET'] as const,\n ttl: 3_600_000,\n staleIn: 10_000,\n },\n\n dedupePolicy: true as const,\n\n rateLimitPolicy: {\n maxCalls: GHOST_RATE_LIMIT,\n windowMs: 60_000,\n waitForToken: true,\n },\n};\n\nexport const adminApi = new FetchEngine({\n baseUrl: `${GHOST_URL}/ghost/api/admin`,\n defaultType: 'json',\n headers: {\n 'Accept-Version': GHOST_API_VERSION,\n 'Content-Type': 'application/json',\n Authorization: `Ghost ${generateAdminToken()}`,\n },\n ...resilience,\n});\n\nadminApi.hooks.add('beforeRequest', (url, opts) => {\n opts.headers.Authorization = `Ghost ${generateAdminToken()}`;\n});\n\nexport const contentApi = new FetchEngine({\n baseUrl: `${GHOST_URL}/ghost/api/content`,\n defaultType: 'json',\n headers: {\n 'Accept-Version': GHOST_API_VERSION,\n 'Content-Type': 'application/json',\n },\n params: {\n key: GHOST_CONTENT_API_KEY,\n },\n ...resilience,\n});\n\nexport const docsApi = new FetchEngine({\n baseUrl: 'https://docs.ghost.org',\n defaultType: 'text',\n attemptTimeout: 15000,\n totalTimeout: 45000,\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n },\n cachePolicy: {\n enabled: true,\n methods: ['GET'] as const,\n ttl: 3_600_000,\n staleIn: 10_000,\n },\n dedupePolicy: true as const,\n});\n\n// Configure global fetch instance for raw downloads (image/theme uploads)\n// No auth, no cache — just retry and dedupe\nglobalFetchConfig.set({\n attemptTimeout: 15000,\n totalTimeout: 45000,\n retry: {\n maxAttempts: 3,\n baseDelay: 1000,\n maxDelay: 10000,\n useExponentialBackoff: true,\n },\n dedupePolicy: true,\n});\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data to include (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats to return: \"html\", \"lexical\", \"plaintext\" (comma-separated)'),\n filter: z\n .string()\n .optional()\n .describe('NQL filter expression (e.g. \"status:published+tag:news\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Post ID'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Post slug'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst postWriteFields = {\n title: z.string().describe('Post title'),\n lexical: z.string().optional().describe('Post content in Lexical JSON format'),\n status: z.enum(['published', 'draft', 'scheduled']).optional().describe('Post status'),\n tags: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Tags to assign (by id or name)'),\n authors: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Authors to assign (by id)'),\n featured: z.boolean().optional().describe('Whether the post is featured'),\n visibility: z.string().optional().describe('Post visibility (public, members, paid, tiers)'),\n published_at: z.string().optional().describe('Publication date (ISO 8601 format)'),\n custom_excerpt: z.string().optional().describe('Custom excerpt for the post'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for the post head'),\n codeinjection_foot: z.string().optional().describe('Code injection for the post footer'),\n canonical_url: z.string().optional().describe('Canonical URL for the post'),\n feature_image: z.string().optional().describe('Feature image URL'),\n feature_image_alt: z.string().optional().describe('Feature image alt text'),\n feature_image_caption: z.string().optional().describe('Feature image caption (HTML)'),\n custom_template: z.string().optional().describe('Custom template for the post'),\n newsletter: z.object({ id: z.string() }).optional().describe('Newsletter to send the post to'),\n email_subject: z\n .string()\n .optional()\n .describe('Custom email subject when sending as newsletter'),\n slug: z.string().optional().describe('Custom URL slug for the post'),\n email_only: z.boolean().optional().describe('Whether the post is email-only (not published to web)'),\n email_segment: z\n .string()\n .optional()\n .describe(\"NQL filter for email recipient segment (e.g. 'status:free', 'status:-free')\"),\n};\n\nconst addSchema = z.object({\n ...postWriteFields,\n title: z.string().describe('Post title (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Post ID (required)'),\n updated_at: z\n .string()\n .describe('Last known updated_at value for collision detection (required)'),\n ...postWriteFields,\n title: z.string().optional().describe('Post title'),\n});\n\nconst copySchema = z.object({\n id: z.string().describe('Post ID to copy'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Post ID to delete'),\n});\n\nexport const adminPostActions: ActionDefinition[] = [\n {\n name: 'posts.browse',\n api: 'admin',\n method: 'GET',\n path: '/posts/',\n inputSchema: browseParams,\n description: 'Browse all posts with filtering, pagination, and sorting',\n example: { filter: 'status:published', limit: 10, include: 'authors,tags' },\n },\n {\n name: 'posts.read',\n api: 'admin',\n method: 'GET',\n path: '/posts/{id}/',\n inputSchema: readParams,\n description: 'Read a single post by ID',\n example: {\n id: '5ddc9141c35e7700383b2937',\n include: 'authors,tags',\n formats: 'html,lexical',\n },\n },\n {\n name: 'posts.read_by_slug',\n api: 'admin',\n method: 'GET',\n path: '/posts/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a single post by slug',\n example: { slug: 'my-post', include: 'authors,tags' },\n },\n {\n name: 'posts.add',\n api: 'admin',\n method: 'POST',\n path: '/posts/',\n inputSchema: addSchema,\n description: 'Create a new post',\n example: { title: 'My New Post', status: 'draft', tags: [{ name: 'News' }] },\n },\n {\n name: 'posts.edit',\n api: 'admin',\n method: 'PUT',\n path: '/posts/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing post. Requires updated_at for collision detection.',\n example: {\n id: '5ddc9141c35e7700383b2937',\n updated_at: '2024-01-01T00:00:00.000Z',\n title: 'Updated Title',\n },\n },\n {\n name: 'posts.copy',\n api: 'admin',\n method: 'POST',\n path: '/posts/{id}/copy/',\n inputSchema: copySchema,\n description: 'Copy an existing post',\n example: { id: '5ddc9141c35e7700383b2937' },\n },\n {\n name: 'posts.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/posts/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a post by ID',\n example: { id: '5ddc9141c35e7700383b2937' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data to include (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats to return: \"html\", \"lexical\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Page ID'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Page slug'),\n include: z.string().optional().describe('Comma-separated list of related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst pageWriteFields = {\n title: z.string().describe('Page title'),\n lexical: z.string().optional().describe('Page content in Lexical JSON format'),\n status: z.enum(['published', 'draft', 'scheduled']).optional().describe('Page status'),\n tags: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Tags to assign (by id or name)'),\n authors: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Authors to assign (by id)'),\n featured: z.boolean().optional().describe('Whether the page is featured'),\n visibility: z.string().optional().describe('Page visibility'),\n published_at: z.string().optional().describe('Publication date (ISO 8601)'),\n custom_excerpt: z.string().optional().describe('Custom excerpt'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for head'),\n codeinjection_foot: z.string().optional().describe('Code injection for footer'),\n canonical_url: z.string().optional().describe('Canonical URL'),\n feature_image: z.string().optional().describe('Feature image URL'),\n feature_image_alt: z.string().optional().describe('Feature image alt text'),\n feature_image_caption: z.string().optional().describe('Feature image caption (HTML)'),\n custom_template: z.string().optional().describe('Custom template'),\n slug: z.string().optional().describe('Custom URL slug for the page'),\n};\n\nconst addSchema = z.object({\n ...pageWriteFields,\n title: z.string().describe('Page title (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Page ID (required)'),\n updated_at: z.string().describe('Last known updated_at for collision detection (required)'),\n ...pageWriteFields,\n title: z.string().optional().describe('Page title'),\n});\n\nconst copySchema = z.object({ id: z.string().describe('Page ID to copy') });\nconst deleteSchema = z.object({ id: z.string().describe('Page ID to delete') });\n\nexport const adminPageActions: ActionDefinition[] = [\n {\n name: 'pages.browse',\n api: 'admin',\n method: 'GET',\n path: '/pages/',\n inputSchema: browseParams,\n description: 'Browse all pages with filtering, pagination, and sorting',\n example: { filter: 'status:published', limit: 10 },\n },\n {\n name: 'pages.read',\n api: 'admin',\n method: 'GET',\n path: '/pages/{id}/',\n inputSchema: readParams,\n description: 'Read a single page by ID',\n },\n {\n name: 'pages.read_by_slug',\n api: 'admin',\n method: 'GET',\n path: '/pages/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a single page by slug',\n },\n {\n name: 'pages.add',\n api: 'admin',\n method: 'POST',\n path: '/pages/',\n inputSchema: addSchema,\n description: 'Create a new page',\n example: { title: 'About Us', status: 'draft' },\n },\n {\n name: 'pages.edit',\n api: 'admin',\n method: 'PUT',\n path: '/pages/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing page. Requires updated_at for collision detection.',\n },\n {\n name: 'pages.copy',\n api: 'admin',\n method: 'POST',\n path: '/pages/{id}/copy/',\n inputSchema: copySchema,\n description: 'Copy an existing page',\n },\n {\n name: 'pages.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/pages/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a page by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n filter: z.string().optional().describe('NQL filter expression'),\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tag ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst tagWriteFields = {\n name: z.string().describe('Tag name'),\n slug: z.string().optional().describe('Tag slug (auto-generated from name if omitted)'),\n description: z.string().optional().describe('Tag description'),\n feature_image: z.string().optional().describe('Feature image URL'),\n visibility: z.string().optional().describe('Tag visibility (public or internal)'),\n meta_title: z.string().optional().describe('SEO meta title'),\n meta_description: z.string().optional().describe('SEO meta description'),\n og_image: z.string().optional().describe('Open Graph image URL'),\n og_title: z.string().optional().describe('Open Graph title'),\n og_description: z.string().optional().describe('Open Graph description'),\n twitter_image: z.string().optional().describe('Twitter card image URL'),\n twitter_title: z.string().optional().describe('Twitter card title'),\n twitter_description: z.string().optional().describe('Twitter card description'),\n codeinjection_head: z.string().optional().describe('Code injection for head'),\n codeinjection_foot: z.string().optional().describe('Code injection for footer'),\n canonical_url: z.string().optional().describe('Canonical URL'),\n accent_color: z.string().optional().describe('Accent color hex code'),\n};\n\nconst addSchema = z.object({\n ...tagWriteFields,\n name: z.string().describe('Tag name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Tag ID (required)'),\n updated_at: z.string().describe('Last known updated_at for collision detection (required)'),\n ...tagWriteFields,\n name: z.string().optional().describe('Tag name'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Tag ID to delete'),\n});\n\nexport const adminTagActions: ActionDefinition[] = [\n {\n name: 'tags.browse',\n api: 'admin',\n method: 'GET',\n path: '/tags/',\n inputSchema: browseParams,\n description: 'Browse all tags with filtering and pagination',\n example: { limit: 'all', include: 'count.posts' },\n },\n {\n name: 'tags.read',\n api: 'admin',\n method: 'GET',\n path: '/tags/{id}/',\n inputSchema: readParams,\n description: 'Read a single tag by ID',\n },\n {\n name: 'tags.add',\n api: 'admin',\n method: 'POST',\n path: '/tags/',\n inputSchema: addSchema,\n description: 'Create a new tag',\n example: { name: 'News', description: 'Latest news articles' },\n },\n {\n name: 'tags.edit',\n api: 'admin',\n method: 'PUT',\n path: '/tags/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing tag',\n },\n {\n name: 'tags.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/tags/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a tag by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n filter: z.string().optional().describe('NQL filter expression (e.g. \"type:paid+active:true\")'),\n include: z\n .string()\n .optional()\n .describe('Related data to include (e.g. \"monthly_price,yearly_price,benefits\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tier ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst tierWriteFields = {\n name: z.string().describe('Tier name'),\n description: z.string().optional().describe('Tier description'),\n welcome_page_url: z.string().optional().describe('URL of the welcome page for new subscribers'),\n visibility: z.enum(['public', 'none']).optional().describe('Tier visibility'),\n monthly_price: z\n .number()\n .optional()\n .describe('Monthly price in smallest currency unit (e.g. cents)'),\n yearly_price: z.number().optional().describe('Yearly price in smallest currency unit'),\n currency: z.string().optional().describe('Three-letter ISO currency code (e.g. \"usd\")'),\n benefits: z.array(z.string()).optional().describe('List of benefits for this tier'),\n trial_days: z.number().optional().describe('Number of free trial days for new subscribers'),\n};\n\nconst addSchema = z.object({\n ...tierWriteFields,\n name: z.string().describe('Tier name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Tier ID (required)'),\n ...tierWriteFields,\n name: z.string().optional().describe('Tier name'),\n});\n\nexport const adminTierActions: ActionDefinition[] = [\n {\n name: 'tiers.browse',\n api: 'admin',\n method: 'GET',\n path: '/tiers/',\n inputSchema: browseParams,\n description: 'Browse all tiers with filtering and pagination',\n example: {\n filter: 'type:paid+active:true',\n include: 'monthly_price,yearly_price,benefits',\n },\n },\n {\n name: 'tiers.read',\n api: 'admin',\n method: 'GET',\n path: '/tiers/{id}/',\n inputSchema: readParams,\n description: 'Read a single tier by ID',\n },\n {\n name: 'tiers.add',\n api: 'admin',\n method: 'POST',\n path: '/tiers/',\n inputSchema: addSchema,\n description: 'Create a new tier',\n example: { name: 'Premium', monthly_price: 500, yearly_price: 5000, currency: 'usd' },\n },\n {\n name: 'tiers.edit',\n api: 'admin',\n method: 'PUT',\n path: '/tiers/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing tier',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n filter: z.string().optional().describe('NQL filter expression'),\n include: z\n .string()\n .optional()\n .describe(\"Related data to include (e.g. 'count.posts,count.members,count.active_members')\"),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Newsletter ID'),\n});\n\nconst newsletterWriteFields = {\n name: z.string().describe('Newsletter name'),\n description: z.string().optional().describe('Newsletter description'),\n slug: z.string().optional().describe('Newsletter slug'),\n sender_name: z.string().optional().describe('Sender name in emails'),\n sender_email: z.string().optional().describe('Sender email address (must be validated)'),\n sender_reply_to: z.enum(['newsletter', 'support']).optional().describe('Reply-to address type'),\n status: z.enum(['active', 'archived']).optional().describe('Newsletter status'),\n visibility: z.string().optional().describe('Newsletter visibility'),\n subscribe_on_signup: z.boolean().optional().describe('Auto-subscribe new members'),\n sort_order: z.number().optional().describe('Sort order position'),\n header_image: z.string().optional().describe('Header image URL'),\n show_header_icon: z.boolean().optional().describe('Show site icon in header'),\n show_header_title: z.boolean().optional().describe('Show site title in header'),\n show_header_name: z.boolean().optional().describe('Show newsletter name in header'),\n title_font_category: z.enum(['serif', 'sans_serif']).optional().describe('Title font category'),\n title_alignment: z.enum(['left', 'center']).optional().describe('Title alignment'),\n show_feature_image: z.boolean().optional().describe('Show feature image in emails'),\n body_font_category: z.enum(['serif', 'sans_serif']).optional().describe('Body font category'),\n footer_content: z.string().optional().describe('Footer content (HTML)'),\n show_badge: z.boolean().optional().describe('Show Ghost badge in footer'),\n feedback_enabled: z.boolean().optional().describe('Enable email feedback/reactions'),\n show_excerpt: z.boolean().optional().describe('Show post excerpt in emails'),\n show_post_title_section: z.boolean().optional().describe('Show post title section'),\n show_comment_cta: z.boolean().optional().describe('Show comment call-to-action'),\n show_subscription_details: z.boolean().optional().describe('Show subscription details'),\n show_latest_posts: z.boolean().optional().describe('Show latest posts section'),\n show_share_button: z.boolean().optional().describe('Show share button'),\n background_color: z.string().optional().describe(\"Background color (e.g. 'light', 'dark', or hex)\"),\n post_title_color: z.string().nullable().optional().describe('Post title color (hex)'),\n button_corners: z\n .enum(['square', 'rounded', 'pill'])\n .optional()\n .describe('Button corner style'),\n button_style: z.enum(['fill', 'outline']).optional().describe('Button style'),\n title_font_weight: z\n .enum(['normal', 'medium', 'semibold', 'bold'])\n .optional()\n .describe('Title font weight'),\n link_style: z.enum(['underline', 'regular', 'bold']).optional().describe('Link style in emails'),\n image_corners: z.enum(['square', 'rounded']).optional().describe('Image corner style'),\n header_background_color: z\n .string()\n .optional()\n .describe(\"Header background color (e.g. 'transparent', hex, 'accent')\"),\n section_title_color: z.string().nullable().optional().describe('Section title color (hex)'),\n divider_color: z.string().nullable().optional().describe('Divider color (hex)'),\n button_color: z.string().optional().describe(\"Button color (e.g. 'accent', hex)\"),\n link_color: z.string().optional().describe(\"Link color (e.g. 'accent', hex)\"),\n};\n\nconst addSchema = z.object({\n ...newsletterWriteFields,\n name: z.string().describe('Newsletter name (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Newsletter ID (required)'),\n ...newsletterWriteFields,\n name: z.string().optional().describe('Newsletter name'),\n});\n\nexport const adminNewsletterActions: ActionDefinition[] = [\n {\n name: 'newsletters.browse',\n api: 'admin',\n method: 'GET',\n path: '/newsletters/',\n inputSchema: browseParams,\n description: 'Browse all newsletters',\n example: { limit: 'all' },\n },\n {\n name: 'newsletters.read',\n api: 'admin',\n method: 'GET',\n path: '/newsletters/{id}/',\n inputSchema: readParams,\n description: 'Read a single newsletter by ID',\n },\n {\n name: 'newsletters.add',\n api: 'admin',\n method: 'POST',\n path: '/newsletters/',\n inputSchema: addSchema,\n description: 'Create a new newsletter',\n example: { name: 'Weekly Digest', sender_name: 'My Blog' },\n },\n {\n name: 'newsletters.edit',\n api: 'admin',\n method: 'PUT',\n path: '/newsletters/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing newsletter',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({}).describe('No parameters required');\n\nconst readParams = z.object({\n id: z.string().describe('Offer ID'),\n});\n\nconst addSchema = z.object({\n name: z.string().describe('Internal name for the offer (required)'),\n code: z.string().describe('Unique code for the offer URL (required)'),\n display_title: z.string().describe('Title shown to users (required)'),\n display_description: z.string().describe('Description shown to users (required)'),\n type: z\n .enum(['percent', 'fixed'])\n .describe('Discount type: percentage or fixed amount (required)'),\n cadence: z.enum(['month', 'year']).describe('Billing cadence the offer applies to (required)'),\n amount: z\n .number()\n .describe('Discount amount: percentage (1-100) or fixed amount in cents (required)'),\n duration: z\n .enum(['once', 'forever', 'repeating'])\n .describe('How long the discount lasts (required)'),\n duration_in_months: z.number().optional().describe('Number of months for repeating duration'),\n currency_restriction: z\n .boolean()\n .optional()\n .describe('Whether the offer is restricted to a specific currency'),\n currency: z\n .string()\n .optional()\n .describe('Three-letter ISO currency code (required for fixed type)'),\n tier: z\n .object({ id: z.string().describe('Tier ID') })\n .describe('Tier this offer applies to (required)'),\n redemption_type: z\n .enum(['signup', 'retention'])\n .optional()\n .describe('Whether the offer is for new signups or existing member retention'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Offer ID (required)'),\n name: z.string().optional().describe('Internal name'),\n});\n\nexport const adminOfferActions: ActionDefinition[] = [\n {\n name: 'offers.browse',\n api: 'admin',\n method: 'GET',\n path: '/offers/',\n inputSchema: browseParams,\n description: 'Browse all offers',\n },\n {\n name: 'offers.read',\n api: 'admin',\n method: 'GET',\n path: '/offers/{id}/',\n inputSchema: readParams,\n description: 'Read a single offer by ID',\n },\n {\n name: 'offers.add',\n api: 'admin',\n method: 'POST',\n path: '/offers/',\n inputSchema: addSchema,\n description: 'Create a new offer (discount code)',\n example: {\n name: 'Black Friday',\n code: 'black-friday',\n display_title: '20% Off',\n display_description: 'Black Friday special',\n type: 'percent',\n cadence: 'year',\n amount: 20,\n duration: 'once',\n tier: { id: 'tier-id' },\n },\n },\n {\n name: 'offers.edit',\n api: 'admin',\n method: 'PUT',\n path: '/offers/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing offer (limited fields)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"newsletters,labels\")'),\n filter: z.string().optional().describe('NQL filter expression (e.g. \"status:paid\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Member ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst memberWriteFields = {\n email: z.string().describe('Member email address'),\n name: z.string().optional().describe('Member name'),\n note: z.string().optional().describe('Private note about the member'),\n labels: z\n .array(z.union([z.object({ id: z.string() }), z.object({ name: z.string() })]))\n .optional()\n .describe('Labels to assign'),\n newsletters: z\n .array(z.object({ id: z.string() }))\n .optional()\n .describe('Newsletters to subscribe the member to'),\n comped: z.boolean().optional().describe('Whether the member has a complimentary subscription'),\n};\n\nconst addSchema = z.object({\n ...memberWriteFields,\n email: z.string().describe('Member email address (required)'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Member ID (required)'),\n ...memberWriteFields,\n email: z.string().optional().describe('Member email address'),\n});\n\nexport const adminMemberActions: ActionDefinition[] = [\n {\n name: 'members.browse',\n api: 'admin',\n method: 'GET',\n path: '/members/',\n inputSchema: browseParams,\n description: 'Browse all members with filtering and pagination',\n example: { filter: 'status:paid', include: 'newsletters', limit: 20 },\n },\n {\n name: 'members.read',\n api: 'admin',\n method: 'GET',\n path: '/members/{id}/',\n inputSchema: readParams,\n description: 'Read a single member by ID',\n },\n {\n name: 'members.add',\n api: 'admin',\n method: 'POST',\n path: '/members/',\n inputSchema: addSchema,\n description: 'Create a new member',\n example: { email: 'member@example.com', name: 'New Member', labels: [{ name: 'VIP' }] },\n },\n {\n name: 'members.edit',\n api: 'admin',\n method: 'PUT',\n path: '/members/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing member',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"roles,count.posts\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('User ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const adminUserActions: ActionDefinition[] = [\n {\n name: 'users.browse',\n api: 'admin',\n method: 'GET',\n path: '/users/',\n inputSchema: browseParams,\n description: 'Browse all users (staff members)',\n example: { include: 'roles', limit: 'all' },\n },\n {\n name: 'users.read',\n api: 'admin',\n method: 'GET',\n path: '/users/{id}/',\n inputSchema: readParams,\n description: 'Read a single user by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst uploadSchema = z.object({\n file: z.string().describe('Image URL to download and upload, or base64-encoded image data'),\n ref: z.string().optional().describe('Optional reference name for the uploaded image'),\n});\n\nexport const adminImageActions: ActionDefinition[] = [\n {\n name: 'images.upload',\n api: 'admin',\n method: 'POST',\n path: '/images/upload/',\n inputSchema: uploadSchema,\n description:\n 'Upload an image to Ghost. Provide a URL (which will be downloaded) or base64-encoded image data.',\n example: { file: 'https://example.com/photo.jpg', ref: 'hero-image' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst uploadSchema = z.object({\n file: z.string().describe('URL to a theme ZIP file to download and upload'),\n});\n\nconst activateSchema = z.object({\n name: z.string().describe('Theme name to activate'),\n});\n\nexport const adminThemeActions: ActionDefinition[] = [\n {\n name: 'themes.upload',\n api: 'admin',\n method: 'POST',\n path: '/themes/upload/',\n inputSchema: uploadSchema,\n description: 'Upload a theme ZIP file to Ghost. Provide a URL to the ZIP file.',\n example: { file: 'https://example.com/theme.zip' },\n },\n {\n name: 'themes.activate',\n api: 'admin',\n method: 'PUT',\n path: '/themes/{name}/activate/',\n inputSchema: activateSchema,\n description: 'Activate an installed theme by name',\n example: { name: 'casper' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst webhookEvents = z.enum([\n 'site.changed',\n 'post.added',\n 'post.deleted',\n 'post.edited',\n 'post.published',\n 'post.published.edited',\n 'post.unpublished',\n 'post.scheduled',\n 'post.unscheduled',\n 'post.rescheduled',\n 'page.added',\n 'page.deleted',\n 'page.edited',\n 'page.published',\n 'page.published.edited',\n 'page.unpublished',\n 'page.scheduled',\n 'page.unscheduled',\n 'page.rescheduled',\n 'tag.added',\n 'tag.edited',\n 'tag.deleted',\n 'post.tag.attached',\n 'post.tag.detached',\n 'page.tag.attached',\n 'page.tag.detached',\n 'member.added',\n 'member.edited',\n 'member.deleted',\n]);\n\nconst addSchema = z.object({\n event: webhookEvents.describe('Webhook event to listen for (required)'),\n target_url: z.string().describe('URL to receive webhook POST requests (required)'),\n name: z.string().optional().describe('Human-readable name for the webhook'),\n secret: z.string().optional().describe('Shared secret for HMAC signature verification'),\n api_version: z.string().optional().describe('Target API version'),\n integration_id: z.string().optional().describe('Associated integration ID'),\n});\n\nconst editSchema = z.object({\n id: z.string().describe('Webhook ID (required)'),\n event: webhookEvents.optional().describe('Webhook event'),\n target_url: z.string().optional().describe('URL to receive webhook POST requests'),\n name: z.string().optional().describe('Human-readable name'),\n secret: z.string().optional().describe('Shared secret for HMAC verification'),\n api_version: z.string().optional().describe('Target API version'),\n integration_id: z.string().optional().describe('Associated integration ID'),\n});\n\nconst deleteSchema = z.object({\n id: z.string().describe('Webhook ID to delete'),\n});\n\nexport const adminWebhookActions: ActionDefinition[] = [\n {\n name: 'webhooks.add',\n api: 'admin',\n method: 'POST',\n path: '/webhooks/',\n inputSchema: addSchema,\n description: 'Create a new webhook',\n example: {\n event: 'post.published',\n target_url: 'https://example.com/webhook',\n name: 'Post published',\n },\n },\n {\n name: 'webhooks.edit',\n api: 'admin',\n method: 'PUT',\n path: '/webhooks/{id}/',\n inputSchema: editSchema,\n description: 'Update an existing webhook',\n },\n {\n name: 'webhooks.delete',\n api: 'admin',\n method: 'DELETE',\n path: '/webhooks/{id}/',\n inputSchema: deleteSchema,\n description: 'Delete a webhook by ID',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst readParams = z.object({}).describe('No parameters required');\n\nexport const adminSiteActions: ActionDefinition[] = [\n {\n name: 'site.read',\n api: 'admin',\n method: 'GET',\n path: '/site/',\n inputSchema: readParams,\n description: 'Read site configuration and metadata',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats: \"html\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression (e.g. \"tag:news+featured:true\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page (default: 15, max: 100, or \"all\")'),\n page: z.number().optional().describe('Page number for pagination'),\n order: z.string().optional().describe('Sort order (e.g. \"published_at DESC\")'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Post ID'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Post slug'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nexport const contentPostActions: ActionDefinition[] = [\n {\n name: 'posts.browse',\n api: 'content',\n method: 'GET',\n path: '/posts/',\n inputSchema: browseParams,\n description: 'Browse published posts (Content API — read-only)',\n example: { filter: 'tag:news', include: 'authors,tags', limit: 10 },\n },\n {\n name: 'posts.read',\n api: 'content',\n method: 'GET',\n path: '/posts/{id}/',\n inputSchema: readParams,\n description: 'Read a published post by ID (Content API)',\n },\n {\n name: 'posts.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/posts/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a published post by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Comma-separated list of related data (e.g. \"authors,tags\")'),\n formats: z\n .string()\n .optional()\n .describe('Content formats: \"html\", \"plaintext\" (comma-separated)'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Page ID'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Page slug'),\n include: z.string().optional().describe('Related data to include'),\n formats: z.string().optional().describe('Content formats to return'),\n});\n\nexport const contentPageActions: ActionDefinition[] = [\n {\n name: 'pages.browse',\n api: 'content',\n method: 'GET',\n path: '/pages/',\n inputSchema: browseParams,\n description: 'Browse published pages (Content API — read-only)',\n },\n {\n name: 'pages.read',\n api: 'content',\n method: 'GET',\n path: '/pages/{id}/',\n inputSchema: readParams,\n description: 'Read a published page by ID (Content API)',\n },\n {\n name: 'pages.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/pages/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a published page by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Tag ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Tag slug'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const contentTagActions: ActionDefinition[] = [\n {\n name: 'tags.browse',\n api: 'content',\n method: 'GET',\n path: '/tags/',\n inputSchema: browseParams,\n description: 'Browse all tags (Content API — read-only)',\n example: { include: 'count.posts', limit: 'all' },\n },\n {\n name: 'tags.read',\n api: 'content',\n method: 'GET',\n path: '/tags/{id}/',\n inputSchema: readParams,\n description: 'Read a tag by ID (Content API)',\n },\n {\n name: 'tags.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/tags/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read a tag by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z.string().optional().describe('Related data to include (e.g. \"count.posts\")'),\n filter: z.string().optional().describe('NQL filter expression'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n order: z.string().optional().describe('Sort order'),\n fields: z.string().optional().describe('Comma-separated list of fields to return'),\n});\n\nconst readParams = z.object({\n id: z.string().describe('Author ID'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nconst readBySlugParams = z.object({\n slug: z.string().describe('Author slug'),\n include: z.string().optional().describe('Related data to include'),\n});\n\nexport const contentAuthorActions: ActionDefinition[] = [\n {\n name: 'authors.browse',\n api: 'content',\n method: 'GET',\n path: '/authors/',\n inputSchema: browseParams,\n description: 'Browse all authors (Content API — read-only)',\n example: { include: 'count.posts' },\n },\n {\n name: 'authors.read',\n api: 'content',\n method: 'GET',\n path: '/authors/{id}/',\n inputSchema: readParams,\n description: 'Read an author by ID (Content API)',\n },\n {\n name: 'authors.read_by_slug',\n api: 'content',\n method: 'GET',\n path: '/authors/slug/{slug}/',\n inputSchema: readBySlugParams,\n description: 'Read an author by slug (Content API)',\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst browseParams = z.object({\n include: z\n .string()\n .optional()\n .describe('Related data to include (e.g. \"monthly_price,yearly_price,benefits\")'),\n filter: z\n .string()\n .optional()\n .describe('NQL filter expression (e.g. \"type:paid+active:true+visibility:public\")'),\n limit: z\n .union([z.number(), z.literal('all')])\n .optional()\n .describe('Number of results per page'),\n page: z.number().optional().describe('Page number'),\n});\n\nexport const contentTierActions: ActionDefinition[] = [\n {\n name: 'tiers.browse',\n api: 'content',\n method: 'GET',\n path: '/tiers/',\n inputSchema: browseParams,\n description: 'Browse all tiers (Content API — read-only)',\n example: { include: 'monthly_price,yearly_price,benefits' },\n },\n];\n","import { z } from 'zod';\nimport type { ActionDefinition } from '../registry.js';\n\nconst readParams = z.object({}).describe('No parameters required');\n\nexport const contentSettingsActions: ActionDefinition[] = [\n {\n name: 'settings.read',\n api: 'content',\n method: 'GET',\n path: '/settings/',\n inputSchema: readParams,\n description: 'Read site settings (Content API — read-only)',\n },\n];\n","import { z } from 'zod';\n\n// Admin actions\nimport { adminPostActions } from './admin/posts.js';\nimport { adminPageActions } from './admin/pages.js';\nimport { adminTagActions } from './admin/tags.js';\nimport { adminTierActions } from './admin/tiers.js';\nimport { adminNewsletterActions } from './admin/newsletters.js';\nimport { adminOfferActions } from './admin/offers.js';\nimport { adminMemberActions } from './admin/members.js';\nimport { adminUserActions } from './admin/users.js';\nimport { adminImageActions } from './admin/images.js';\nimport { adminThemeActions } from './admin/themes.js';\nimport { adminWebhookActions } from './admin/webhooks.js';\nimport { adminSiteActions } from './admin/site.js';\n\n// Content actions\nimport { contentPostActions } from './content/posts.js';\nimport { contentPageActions } from './content/pages.js';\nimport { contentTagActions } from './content/tags.js';\nimport { contentAuthorActions } from './content/authors.js';\nimport { contentTierActions } from './content/tiers.js';\nimport { contentSettingsActions } from './content/settings.js';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\nexport type ApiType = 'admin' | 'content';\n\nexport interface ActionDefinition {\n name: string;\n api: ApiType;\n method: HttpMethod;\n path: string;\n inputSchema: z.ZodType;\n description: string;\n example?: Record<string, unknown>;\n}\n\nconst registry = new Map<string, ActionDefinition>();\n\nexport function registerAction(action: ActionDefinition): void {\n registry.set(`${action.api}:${action.name}`, action);\n}\n\nexport function registerActions(actions: ActionDefinition[]): void {\n for (const action of actions) {\n registerAction(action);\n }\n}\n\nexport function getAction(name: string, api?: ApiType): ActionDefinition | undefined {\n if (api) {\n return registry.get(`${api}:${name}`);\n }\n // Try admin first, then content\n return registry.get(`admin:${name}`) || registry.get(`content:${name}`);\n}\n\nexport function listActions(api?: ApiType): ActionDefinition[] {\n const actions = Array.from(registry.values());\n if (api) {\n return actions.filter((a) => a.api === api);\n }\n return actions;\n}\n\nfunction unwrapZodType(field: z.ZodType): z.ZodType {\n if (field instanceof z.ZodOptional || field instanceof z.ZodNullable) {\n return unwrapZodType((field as z.ZodOptional<z.ZodType> | z.ZodNullable<z.ZodType>)._def.innerType);\n }\n if (field instanceof z.ZodDefault) {\n return unwrapZodType((field as z.ZodDefault<z.ZodType>)._def.innerType);\n }\n return field;\n}\n\nfunction describeZodType(field: z.ZodType): string {\n const inner = unwrapZodType(field);\n\n if (inner instanceof z.ZodEnum) {\n const values = (inner._def as z.ZodEnumDef).values as string[];\n return `values: ${values.map((v) => `\\`${v}\\``).join(', ')}`;\n }\n\n if (inner instanceof z.ZodObject) {\n const shape = inner.shape as Record<string, z.ZodType>;\n const fields = Object.entries(shape).map(([k, v]) => {\n const t = describeZodType(v);\n return t ? `${k}${t.startsWith('values:') ? ` (${t})` : `: ${t}`}` : k;\n });\n return `object: { ${fields.join(', ')} }`;\n }\n\n if (inner instanceof z.ZodArray) {\n const itemType = describeZodType((inner._def as z.ZodArrayDef).type);\n return itemType ? `array of [${itemType}]` : 'array';\n }\n\n if (inner instanceof z.ZodUnion) {\n const options = (inner._def as z.ZodUnionDef).options as z.ZodType[];\n const parts = options.map((o) => describeZodType(o)).filter(Boolean);\n return parts.length > 0 ? parts.join(' | ') : '';\n }\n\n if (inner instanceof z.ZodLiteral) {\n return `\\`${String((inner._def as z.ZodLiteralDef).value)}\\``;\n }\n\n if (inner instanceof z.ZodString) return 'string';\n if (inner instanceof z.ZodNumber) return 'number';\n if (inner instanceof z.ZodBoolean) return 'boolean';\n\n return '';\n}\n\nexport function getActionHelp(name: string, api?: ApiType): string | undefined {\n const action = getAction(name, api);\n if (!action) {\n return undefined;\n }\n\n const schema = action.inputSchema;\n const lines: string[] = [\n `## ${action.name}`,\n '',\n action.description,\n '',\n `- **API:** ${action.api}`,\n `- **Method:** ${action.method}`,\n `- **Path:** ${action.path}`,\n '',\n ];\n\n // Extract schema info\n if (schema instanceof z.ZodObject) {\n lines.push('### Parameters', '');\n const shape = schema.shape as Record<string, z.ZodType>;\n for (const [key, field] of Object.entries(shape)) {\n const isOptional = field.isOptional();\n const desc = field.description || '';\n const typeInfo = describeZodType(field);\n const suffix = typeInfo ? ` — ${typeInfo}` : '';\n lines.push(`- **${key}**${isOptional ? ' (optional)' : ' (required)'}: ${desc}${suffix}`);\n }\n lines.push('');\n }\n\n if (action.example) {\n lines.push(\n '### Example Payload',\n '',\n '```json',\n JSON.stringify(action.example, null, 2),\n '```',\n '',\n );\n }\n\n return lines.join('\\n');\n}\n\n// Register all actions\nfunction initRegistry(): void {\n const allActions = [\n ...adminPostActions,\n ...adminPageActions,\n ...adminTagActions,\n ...adminTierActions,\n ...adminNewsletterActions,\n ...adminOfferActions,\n ...adminMemberActions,\n ...adminUserActions,\n ...adminImageActions,\n ...adminThemeActions,\n ...adminWebhookActions,\n ...adminSiteActions,\n ...contentPostActions,\n ...contentPageActions,\n ...contentTagActions,\n ...contentAuthorActions,\n ...contentTierActions,\n ...contentSettingsActions,\n ];\n registerActions(allActions);\n}\n\ninitRegistry();\n","import { z } from 'zod';\nimport { attempt } from '@logosdx/utils';\nimport { get as fetchGet } from '@logosdx/fetch';\nimport mimeDb from 'mime-db';\nimport { adminApi, contentApi } from '../ghost-client.js';\nimport { getAction } from '../actions/registry.js';\nimport type { ApiType } from '../actions/registry.js';\n\nconst extToMime: Record<string, string> = {};\nfor (const [mime, meta] of Object.entries(mimeDb)) {\n for (const ext of (meta as any).extensions ?? []) {\n extToMime[`.${ext}`] = mime;\n }\n}\n\nexport const useGhostApiSchema = z.object({\n api: z\n .enum(['admin', 'content'])\n .describe('Which API to use: \"admin\" for full access, \"content\" for read-only public data'),\n action: z.string().describe('Action to execute (e.g. \"posts.browse\", \"members.add\")'),\n payload: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Action payload — fields depend on the action. Use ghost_api_help to see available fields.',\n ),\n});\n\nexport type UseGhostApiInput = z.infer<typeof useGhostApiSchema>;\n\nconst PATH_PARAMS = ['id', 'slug', 'name'] as const;\n\nfunction getUsedPathParams(template: string): Set<string> {\n const used = new Set<string>();\n for (const param of PATH_PARAMS) {\n if (template.includes(`{${param}}`)) {\n used.add(param);\n }\n }\n return used;\n}\n\nfunction buildPath(template: string, payload: Record<string, unknown>): string {\n let path = template;\n for (const param of PATH_PARAMS) {\n const placeholder = `{${param}}`;\n if (path.includes(placeholder) && payload[param]) {\n path = path.replace(placeholder, encodeURIComponent(String(payload[param])));\n }\n }\n return path;\n}\n\nfunction extractQueryParams(\n payload: Record<string, unknown>,\n usedPathParams: Set<string>,\n): Record<string, string> {\n const params: Record<string, string> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (usedPathParams.has(key)) {\n continue;\n }\n if (value !== undefined && value !== null) {\n params[key] = String(value);\n }\n }\n return params;\n}\n\nfunction extractBodyPayload(\n payload: Record<string, unknown>,\n usedPathParams: Set<string>,\n): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (usedPathParams.has(key)) {\n continue;\n }\n if (value !== undefined) {\n body[key] = value;\n }\n }\n return body;\n}\n\nexport async function handleUseGhostApi(input: UseGhostApiInput, mode: string): Promise<string> {\n const { api, action, payload = {} } = input;\n\n // Validate mode restrictions\n if (mode === 'content' && api === 'admin') {\n return JSON.stringify({\n error: 'Admin API is not available in content mode. Set GHOST_API_MODE=admin and provide GHOST_ADMIN_API_KEY to use admin actions.',\n });\n }\n\n // Look up the action\n const actionDef = getAction(action, api as ApiType);\n if (!actionDef) {\n return JSON.stringify({\n error: `Unknown action \"${action}\" for ${api} API. Use ghost_api_help to see available actions.`,\n });\n }\n\n // Validate payload\n const validation = actionDef.inputSchema.safeParse(payload);\n if (!validation.success) {\n return JSON.stringify({\n error: 'Invalid payload',\n details: validation.error.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n });\n }\n\n const validPayload = validation.data as Record<string, unknown>;\n const engine = api === 'admin' ? adminApi : contentApi;\n const usedPathParams = getUsedPathParams(actionDef.path);\n const path = buildPath(actionDef.path, validPayload);\n\n // Handle special cases: image/theme upload\n if (actionDef.name === 'images.upload' || actionDef.name === 'themes.upload') {\n return await handleFileUpload(actionDef.name, validPayload, path);\n }\n\n if (actionDef.method === 'GET') {\n const queryParams = extractQueryParams(validPayload, usedPathParams);\n const [response, err] = await attempt(async () =>\n engine.get(path, { params: queryParams }),\n );\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n }\n\n if (actionDef.method === 'DELETE') {\n const [response, err] = await attempt(async () => engine.delete(path));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n const resourcePrefix = `/${actionDef.name.split('.')[0]}`;\n await engine.invalidatePath(resourcePrefix);\n return JSON.stringify(response ?? { success: true });\n }\n\n // POST or PUT — build body wrapped in resource key\n const resourceKey = actionDef.name.split('.')[0];\n const body = extractBodyPayload(validPayload, usedPathParams);\n const wrappedBody = { [resourceKey]: [body] };\n\n if (actionDef.method === 'POST') {\n const [response, err] = await attempt(async () => engine.post(path, wrappedBody));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n }\n\n if (actionDef.method === 'PUT') {\n const [response, err] = await attempt(async () => engine.put(path, wrappedBody));\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n const resourcePrefix = `/${actionDef.name.split('.')[0]}`;\n await engine.invalidatePath(resourcePrefix);\n return JSON.stringify(response);\n }\n\n return JSON.stringify({ error: `Unsupported method: ${actionDef.method}` });\n}\n\nasync function handleFileUpload(\n actionName: string,\n payload: Record<string, unknown>,\n path: string,\n): Promise<string> {\n const fileInput = payload.file as string;\n const ref = payload.ref as string | undefined;\n\n // Download file if URL\n let fileBuffer: Buffer;\n let filename: string;\n\n if (fileInput.startsWith('http://') || fileInput.startsWith('https://')) {\n const [response, err] = await attempt(async () => fetchGet(fileInput).arrayBuffer());\n if (err) {\n return JSON.stringify({ error: `Failed to download file: ${err.message}` });\n }\n fileBuffer = Buffer.from(response!.data);\n const urlPath = new URL(fileInput).pathname;\n filename =\n urlPath.split('/').pop() ||\n (actionName === 'images.upload' ? 'image.jpg' : 'theme.zip');\n } else {\n // Base64\n fileBuffer = Buffer.from(fileInput, 'base64');\n filename = actionName === 'images.upload' ? 'image.jpg' : 'theme.zip';\n }\n\n // Build multipart form\n const ext = filename.includes('.')\n ? filename.slice(filename.lastIndexOf('.')).toLowerCase()\n : '';\n const mimeType = extToMime[ext] || 'application/octet-stream';\n\n const formData = new FormData();\n const blob = new Blob([new Uint8Array(fileBuffer)], { type: mimeType });\n formData.append('file', blob, filename);\n if (ref) {\n formData.append('ref', ref);\n }\n\n const [response, err] = await attempt(async () =>\n adminApi.post(path, formData, {\n onBeforeReq: (opts) => {\n delete opts.headers!['Content-Type'];\n },\n }),\n );\n if (err) {\n return JSON.stringify({ error: err.message });\n }\n return JSON.stringify(response);\n}\n","import { z } from 'zod';\nimport { listActions, getActionHelp } from '../actions/registry.js';\nimport type { ApiType } from '../actions/registry.js';\n\nexport const ghostApiHelpSchema = z.object({\n action: z\n .string()\n .optional()\n .describe(\n 'Specific action name to get detailed help for (e.g. \"posts.add\"). Omit to see all available actions.',\n ),\n api: z.enum(['admin', 'content']).optional().describe('Filter actions by API type'),\n});\n\nexport type GhostApiHelpInput = z.infer<typeof ghostApiHelpSchema>;\n\nexport function handleGhostApiHelp(input: GhostApiHelpInput): string {\n const { action, api } = input;\n\n if (action) {\n const help = getActionHelp(action, api as ApiType | undefined);\n if (!help) {\n return `Unknown action \"${action}\". Use ghost_api_help without arguments to see all available actions.`;\n }\n return help;\n }\n\n // List all actions grouped by resource and API\n const actions = listActions(api as ApiType | undefined);\n const grouped: Record<string, Record<string, typeof actions>> = {};\n\n for (const a of actions) {\n if (!grouped[a.api]) {\n grouped[a.api] = {};\n }\n const resource = a.name.split('.')[0];\n if (!grouped[a.api][resource]) {\n grouped[a.api][resource] = [];\n }\n grouped[a.api][resource].push(a);\n }\n\n const lines: string[] = ['# Ghost API Actions', ''];\n\n for (const [apiType, resources] of Object.entries(grouped)) {\n lines.push(`## ${apiType.charAt(0).toUpperCase() + apiType.slice(1)} API`, '');\n for (const [resource, resourceActions] of Object.entries(resources)) {\n lines.push(`### ${resource}`);\n for (const a of resourceActions) {\n lines.push(`- **${a.name}** — ${a.description}`);\n }\n lines.push('');\n }\n }\n\n lines.push(\n '---',\n '',\n 'Use `ghost_api_help` with `action` parameter for detailed schema info on any action.',\n );\n return lines.join('\\n');\n}\n","import { z } from 'zod';\nimport { attempt } from '@logosdx/utils';\nimport { docsApi } from '../ghost-client.js';\n\nexport const ghostDocsSchema = z.object({\n all: z.boolean().optional().describe('Return the full Ghost documentation (llms.txt)'),\n search: z\n .string()\n .optional()\n .describe('Case-insensitive substring search across the documentation'),\n regex: z.string().optional().describe('Regex pattern string to match (e.g. \"/pattern/i\")'),\n});\n\nexport type GhostDocsInput = z.infer<typeof ghostDocsSchema>;\n\nasync function fetchDocs(): Promise<string> {\n const [response, err] = await attempt(async () => docsApi.get('/llms.txt'));\n if (err) {\n throw new Error(`Failed to fetch Ghost docs: ${err.message}`);\n }\n return response!.data as string;\n}\n\nexport async function handleGhostDocs(input: GhostDocsInput): Promise<string> {\n const { all, search, regex } = input;\n\n if (!all && !search && !regex) {\n return 'Provide one of: `all: true` to get full docs, `search` for text search, or `regex` for pattern matching.';\n }\n\n let content: string;\n try {\n content = await fetchDocs();\n } catch (error) {\n return `Error: ${(error as Error).message}`;\n }\n\n if (all) {\n return content;\n }\n\n const lines = content.split('\\n');\n const matchedLines: string[] = [];\n\n if (search) {\n const searchLower = search.toLowerCase();\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].toLowerCase().includes(searchLower)) {\n // Include context: 1 line before and after\n const start = Math.max(0, i - 1);\n const end = Math.min(lines.length - 1, i + 1);\n for (let j = start; j <= end; j++) {\n const line = `${j + 1}: ${lines[j]}`;\n if (!matchedLines.includes(line)) {\n matchedLines.push(line);\n }\n }\n }\n }\n }\n\n if (regex) {\n // Parse regex string: /pattern/flags or just pattern\n let pattern: RegExp;\n const regexMatch = regex.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexMatch) {\n pattern = new RegExp(regexMatch[1], regexMatch[2]);\n } else {\n pattern = new RegExp(regex);\n }\n\n for (let i = 0; i < lines.length; i++) {\n if (pattern.test(lines[i])) {\n const start = Math.max(0, i - 1);\n const end = Math.min(lines.length - 1, i + 1);\n for (let j = start; j <= end; j++) {\n const line = `${j + 1}: ${lines[j]}`;\n if (!matchedLines.includes(line)) {\n matchedLines.push(line);\n }\n }\n }\n }\n }\n\n if (matchedLines.length === 0) {\n return 'No matches found.';\n }\n\n return matchedLines.join('\\n');\n}\n","#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { useGhostApiSchema, handleUseGhostApi } from './tools/use-ghost-api.js';\nimport { ghostApiHelpSchema, handleGhostApiHelp } from './tools/ghost-api-help.js';\nimport { ghostDocsSchema, handleGhostDocs } from './tools/ghost-docs.js';\n\nconst GHOST_API_MODE = process.env.GHOST_API_MODE || 'admin';\n\nconst server = new McpServer({\n name: 'ghost-mcp',\n version: '0.1.0',\n});\n\nserver.tool(\n 'use_ghost_api',\n 'Execute a Ghost API action (browse, read, add, edit, delete posts, pages, tags, members, newsletters, and more)',\n useGhostApiSchema.shape,\n async ({ api, action, payload }) => {\n const result = await handleUseGhostApi({ api, action, payload }, GHOST_API_MODE);\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nserver.tool(\n 'ghost_api_help',\n 'Get help on available Ghost API actions — list all actions or get detailed schema info for a specific action',\n ghostApiHelpSchema.shape,\n async ({ action, api }) => {\n const result = handleGhostApiHelp({ action, api });\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nserver.tool(\n 'ghost_docs',\n 'Search Ghost CMS documentation — fetch full docs, search by text, or match with regex',\n ghostDocsSchema.shape,\n async ({ all, search, regex }) => {\n const result = await handleGhostDocs({ all, search, regex });\n return { content: [{ type: 'text' as const, text: result }] };\n },\n);\n\nasync function main(): Promise<void> {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n});\n"],"mappings":"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"}
|