@antoinefamibelle/ghost-mcp 1.0.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/README.md +286 -0
- package/build/client.d.ts +8 -0
- package/build/client.d.ts.map +1 -0
- package/build/client.js +28 -0
- package/build/client.js.map +1 -0
- package/build/config.d.ts +6 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +17 -0
- package/build/config.js.map +1 -0
- package/build/errors.d.ts +14 -0
- package/build/errors.d.ts.map +1 -0
- package/build/errors.js +34 -0
- package/build/errors.js.map +1 -0
- package/build/prompts/content-audit.d.ts +3 -0
- package/build/prompts/content-audit.d.ts.map +1 -0
- package/build/prompts/content-audit.js +74 -0
- package/build/prompts/content-audit.js.map +1 -0
- package/build/prompts/index.d.ts +3 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +10 -0
- package/build/prompts/index.js.map +1 -0
- package/build/prompts/summarize-post.d.ts +3 -0
- package/build/prompts/summarize-post.d.ts.map +1 -0
- package/build/prompts/summarize-post.js +33 -0
- package/build/prompts/summarize-post.js.map +1 -0
- package/build/resources/blog.d.ts +3 -0
- package/build/resources/blog.d.ts.map +1 -0
- package/build/resources/blog.js +18 -0
- package/build/resources/blog.js.map +1 -0
- package/build/resources/index.d.ts +8 -0
- package/build/resources/index.d.ts.map +1 -0
- package/build/resources/index.js +18 -0
- package/build/resources/index.js.map +1 -0
- package/build/resources/members.d.ts +3 -0
- package/build/resources/members.d.ts.map +1 -0
- package/build/resources/members.js +23 -0
- package/build/resources/members.js.map +1 -0
- package/build/resources/newsletters.d.ts +3 -0
- package/build/resources/newsletters.d.ts.map +1 -0
- package/build/resources/newsletters.js +23 -0
- package/build/resources/newsletters.js.map +1 -0
- package/build/resources/offers.d.ts +3 -0
- package/build/resources/offers.d.ts.map +1 -0
- package/build/resources/offers.js +23 -0
- package/build/resources/offers.js.map +1 -0
- package/build/resources/posts.d.ts +3 -0
- package/build/resources/posts.d.ts.map +1 -0
- package/build/resources/posts.js +23 -0
- package/build/resources/posts.js.map +1 -0
- package/build/resources/tiers.d.ts +3 -0
- package/build/resources/tiers.d.ts.map +1 -0
- package/build/resources/tiers.js +26 -0
- package/build/resources/tiers.js.map +1 -0
- package/build/resources/users.d.ts +3 -0
- package/build/resources/users.d.ts.map +1 -0
- package/build/resources/users.js +23 -0
- package/build/resources/users.js.map +1 -0
- package/build/server.d.ts +3 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +54 -0
- package/build/server.js.map +1 -0
- package/build/tools/invites.d.ts +3 -0
- package/build/tools/invites.d.ts.map +1 -0
- package/build/tools/invites.js +46 -0
- package/build/tools/invites.js.map +1 -0
- package/build/tools/members.d.ts +3 -0
- package/build/tools/members.d.ts.map +1 -0
- package/build/tools/members.js +93 -0
- package/build/tools/members.js.map +1 -0
- package/build/tools/newsletters.d.ts +3 -0
- package/build/tools/newsletters.d.ts.map +1 -0
- package/build/tools/newsletters.js +108 -0
- package/build/tools/newsletters.js.map +1 -0
- package/build/tools/offers.d.ts +3 -0
- package/build/tools/offers.d.ts.map +1 -0
- package/build/tools/offers.js +95 -0
- package/build/tools/offers.js.map +1 -0
- package/build/tools/posts.d.ts +3 -0
- package/build/tools/posts.d.ts.map +1 -0
- package/build/tools/posts.js +120 -0
- package/build/tools/posts.js.map +1 -0
- package/build/tools/roles.d.ts +3 -0
- package/build/tools/roles.d.ts.map +1 -0
- package/build/tools/roles.js +35 -0
- package/build/tools/roles.js.map +1 -0
- package/build/tools/tags.d.ts +3 -0
- package/build/tools/tags.d.ts.map +1 -0
- package/build/tools/tags.js +88 -0
- package/build/tools/tags.js.map +1 -0
- package/build/tools/tiers.d.ts +3 -0
- package/build/tools/tiers.d.ts.map +1 -0
- package/build/tools/tiers.js +96 -0
- package/build/tools/tiers.js.map +1 -0
- package/build/tools/users.d.ts +3 -0
- package/build/tools/users.d.ts.map +1 -0
- package/build/tools/users.js +72 -0
- package/build/tools/users.js.map +1 -0
- package/build/tools/webhooks.d.ts +3 -0
- package/build/tools/webhooks.d.ts.map +1 -0
- package/build/tools/webhooks.js +85 -0
- package/build/tools/webhooks.js.map +1 -0
- package/build/types/entities.d.ts +265 -0
- package/build/types/entities.d.ts.map +1 -0
- package/build/types/entities.js +4 -0
- package/build/types/entities.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerOfferTools = registerOfferTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
function registerOfferTools(server) {
|
|
8
|
+
server.tool("offers_browse", "List promotional offers on your Ghost site. Offers give discounts or trials on paid tiers.", {
|
|
9
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression, e.g. 'status:active'"),
|
|
10
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max results to return (default 15)"),
|
|
11
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
12
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'created_at desc'"),
|
|
13
|
+
}, async (args) => {
|
|
14
|
+
try {
|
|
15
|
+
const offers = await (0, client_js_1.callGhost)(() => client_js_1.ghost.offers.browse(args));
|
|
16
|
+
return { content: [{ type: "text", text: JSON.stringify(offers, null, 2) }] };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
server.tool("offers_read", "Fetch a single promotional offer by its ID or redemption code.", {
|
|
23
|
+
id: zod_1.z.string().optional().describe("Ghost offer ID"),
|
|
24
|
+
code: zod_1.z.string().optional().describe("Offer redemption code (e.g. 'SUMMER50')"),
|
|
25
|
+
}, async (args) => {
|
|
26
|
+
try {
|
|
27
|
+
const offer = await (0, client_js_1.callGhost)(() => client_js_1.ghost.offers.read(args));
|
|
28
|
+
return { content: [{ type: "text", text: JSON.stringify(offer, null, 2) }] };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
server.tool("offers_add", "Create a new promotional offer linked to a paid tier. Choose type 'percent' for a percentage discount, 'fixed' for a fixed-amount discount, or 'trial' for a free trial period.", {
|
|
35
|
+
name: zod_1.z.string().describe("Internal offer name (required)"),
|
|
36
|
+
code: zod_1.z.string().describe("Unique redemption code subscribers enter, e.g. 'LAUNCH50' (required)"),
|
|
37
|
+
cadence: zod_1.z
|
|
38
|
+
.enum(["month", "year"])
|
|
39
|
+
.describe("Billing interval the discount applies to: month or year (required)"),
|
|
40
|
+
duration: zod_1.z
|
|
41
|
+
.enum(["once", "forever", "repeating"])
|
|
42
|
+
.describe("How long the discount lasts: once | forever | repeating (required)"),
|
|
43
|
+
amount: zod_1.z.number().int().nonnegative().describe("Discount amount — percentage (0-100) for 'percent' type, cents for 'fixed', days for 'trial' (required)"),
|
|
44
|
+
tier_id: zod_1.z.string().describe("Ghost tier ID this offer applies to (required)"),
|
|
45
|
+
type: zod_1.z
|
|
46
|
+
.enum(["percent", "fixed", "trial"])
|
|
47
|
+
.describe("Discount type: percent | fixed | trial (required)"),
|
|
48
|
+
display_title: zod_1.z.string().optional().describe("Public-facing offer title shown at checkout"),
|
|
49
|
+
display_description: zod_1.z.string().optional().describe("Public-facing offer description"),
|
|
50
|
+
currency: zod_1.z
|
|
51
|
+
.string()
|
|
52
|
+
.length(3)
|
|
53
|
+
.optional()
|
|
54
|
+
.describe("ISO 4217 currency code for fixed-amount offers, e.g. 'USD'"),
|
|
55
|
+
duration_in_months: zod_1.z
|
|
56
|
+
.number()
|
|
57
|
+
.int()
|
|
58
|
+
.positive()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Number of months when duration is 'repeating'"),
|
|
61
|
+
}, async (args) => {
|
|
62
|
+
try {
|
|
63
|
+
const offer = await (0, client_js_1.callGhost)(() => client_js_1.ghost.offers.add(args));
|
|
64
|
+
return { content: [{ type: "text", text: JSON.stringify(offer, null, 2) }] };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
server.tool("offers_edit", "Update an offer's display information. Note: Ghost only allows editing display_title and display_description after creation — the discount amount, code, and type cannot be changed.", {
|
|
71
|
+
id: zod_1.z.string().describe("Ghost offer ID (required)"),
|
|
72
|
+
display_title: zod_1.z.string().optional().describe("Updated public-facing offer title"),
|
|
73
|
+
display_description: zod_1.z.string().optional().describe("Updated public-facing offer description"),
|
|
74
|
+
}, async (args) => {
|
|
75
|
+
try {
|
|
76
|
+
const offer = await (0, client_js_1.callGhost)(() => client_js_1.ghost.offers.edit(args));
|
|
77
|
+
return { content: [{ type: "text", text: JSON.stringify(offer, null, 2) }] };
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
server.tool("offers_delete", "Delete a promotional offer by ID. Existing redemptions are not affected.", {
|
|
84
|
+
id: zod_1.z.string().describe("Ghost offer ID to delete"),
|
|
85
|
+
}, async (args) => {
|
|
86
|
+
try {
|
|
87
|
+
await (0, client_js_1.callGhost)(() => client_js_1.ghost.offers.delete(args));
|
|
88
|
+
return { content: [{ type: "text", text: `Offer ${args.id} deleted successfully.` }] };
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=offers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offers.js","sourceRoot":"","sources":["../../src/tools/offers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoGzD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerPostTools = registerPostTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
const tagOrAuthorRef = zod_1.z.union([
|
|
8
|
+
zod_1.z.string().describe("Tag/author name or slug"),
|
|
9
|
+
zod_1.z.object({
|
|
10
|
+
id: zod_1.z.string().optional().describe("Ghost entity ID"),
|
|
11
|
+
slug: zod_1.z.string().optional().describe("URL slug"),
|
|
12
|
+
name: zod_1.z.string().optional().describe("Display name"),
|
|
13
|
+
email: zod_1.z.string().optional().describe("Author email (authors only)"),
|
|
14
|
+
}),
|
|
15
|
+
]);
|
|
16
|
+
const mutablePostFields = {
|
|
17
|
+
slug: zod_1.z.string().optional().describe("URL slug — generated from title if omitted"),
|
|
18
|
+
status: zod_1.z
|
|
19
|
+
.enum(["draft", "published", "scheduled"])
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Publish status: draft | published | scheduled"),
|
|
22
|
+
html: zod_1.z.string().optional().describe("Post body as HTML"),
|
|
23
|
+
lexical: zod_1.z.string().optional().describe("Post body as Lexical JSON (alternative to html)"),
|
|
24
|
+
excerpt: zod_1.z.string().optional().describe("Short summary shown in listings"),
|
|
25
|
+
feature_image: zod_1.z.string().url().optional().describe("Hero image URL"),
|
|
26
|
+
feature_image_alt: zod_1.z.string().optional().describe("Alt text for the hero image"),
|
|
27
|
+
feature_image_caption: zod_1.z.string().optional().describe("Caption for the hero image"),
|
|
28
|
+
featured: zod_1.z.boolean().optional().describe("Pin as a featured post"),
|
|
29
|
+
tags: zod_1.z.array(tagOrAuthorRef).optional().describe("Tags to attach (name, slug, or {id})"),
|
|
30
|
+
authors: zod_1.z.array(tagOrAuthorRef).optional().describe("Authors to attach (slug, email, or {id})"),
|
|
31
|
+
meta_title: zod_1.z.string().optional().describe("SEO title (falls back to title)"),
|
|
32
|
+
meta_description: zod_1.z.string().optional().describe("SEO description"),
|
|
33
|
+
og_title: zod_1.z.string().optional().describe("Open Graph title override"),
|
|
34
|
+
og_description: zod_1.z.string().optional().describe("Open Graph description override"),
|
|
35
|
+
og_image: zod_1.z.string().url().optional().describe("Open Graph image URL override"),
|
|
36
|
+
twitter_title: zod_1.z.string().optional().describe("Twitter card title override"),
|
|
37
|
+
twitter_description: zod_1.z.string().optional().describe("Twitter card description override"),
|
|
38
|
+
twitter_image: zod_1.z.string().url().optional().describe("Twitter card image URL override"),
|
|
39
|
+
custom_template: zod_1.z.string().optional().describe("Custom Handlebars template filename"),
|
|
40
|
+
canonical_url: zod_1.z.string().url().optional().describe("Canonical URL if different from the Ghost URL"),
|
|
41
|
+
published_at: zod_1.z.string().optional().describe("ISO 8601 publish date-time (for scheduling)"),
|
|
42
|
+
visibility: zod_1.z
|
|
43
|
+
.enum(["public", "members", "paid", "tiers"])
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Visibility level: public | members | paid | tiers"),
|
|
46
|
+
};
|
|
47
|
+
function registerPostTools(server) {
|
|
48
|
+
server.tool("posts_browse", "List posts from your Ghost blog. Supports filtering, pagination, and sorting. Returns an array of post objects.", {
|
|
49
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression, e.g. 'status:published+featured:true'"),
|
|
50
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max number of results (default 15, max 15 without 'all')"),
|
|
51
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
52
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'published_at desc'"),
|
|
53
|
+
include: zod_1.z.string().optional().describe("Comma-separated relations to include: tags, authors"),
|
|
54
|
+
formats: zod_1.z.string().optional().describe("Content formats to include: html, plaintext, lexical"),
|
|
55
|
+
}, async (args) => {
|
|
56
|
+
try {
|
|
57
|
+
const posts = await (0, client_js_1.callGhost)(() => client_js_1.ghost.posts.browse(args));
|
|
58
|
+
return { content: [{ type: "text", text: JSON.stringify(posts, null, 2) }] };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
server.tool("posts_read", "Fetch a single Ghost post by its ID or slug. Returns the full post object.", {
|
|
65
|
+
id: zod_1.z.string().optional().describe("Ghost post ID"),
|
|
66
|
+
slug: zod_1.z.string().optional().describe("Post slug (URL-friendly identifier)"),
|
|
67
|
+
include: zod_1.z.string().optional().describe("Comma-separated relations to include: tags, authors"),
|
|
68
|
+
formats: zod_1.z.string().optional().describe("Content formats to include: html, plaintext, lexical"),
|
|
69
|
+
}, async (args) => {
|
|
70
|
+
try {
|
|
71
|
+
const post = await (0, client_js_1.callGhost)(() => client_js_1.ghost.posts.read(args));
|
|
72
|
+
return { content: [{ type: "text", text: JSON.stringify(post, null, 2) }] };
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
server.tool("posts_add", "Create a new Ghost post. Only 'title' is required; all other fields are optional. To publish immediately set status to 'published'.", {
|
|
79
|
+
title: zod_1.z.string().describe("Post title (required)"),
|
|
80
|
+
...mutablePostFields,
|
|
81
|
+
}, async ({ html, ...rest }) => {
|
|
82
|
+
try {
|
|
83
|
+
const options = html ? { source: "html" } : {};
|
|
84
|
+
const post = await (0, client_js_1.callGhost)(() => client_js_1.ghost.posts.add(html ? { ...rest, html } : rest, options));
|
|
85
|
+
return { content: [{ type: "text", text: JSON.stringify(post, null, 2) }] };
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
server.tool("posts_edit", "Update an existing Ghost post. Requires the post ID and its current updated_at timestamp (for optimistic concurrency). Only supply the fields you want to change.", {
|
|
92
|
+
id: zod_1.z.string().describe("Ghost post ID"),
|
|
93
|
+
updated_at: zod_1.z
|
|
94
|
+
.string()
|
|
95
|
+
.describe("Current updated_at timestamp from posts_read — required to prevent conflicting edits"),
|
|
96
|
+
title: zod_1.z.string().optional().describe("Post title"),
|
|
97
|
+
...mutablePostFields,
|
|
98
|
+
}, async ({ html, ...rest }) => {
|
|
99
|
+
try {
|
|
100
|
+
const options = html ? { source: "html" } : {};
|
|
101
|
+
const post = await (0, client_js_1.callGhost)(() => client_js_1.ghost.posts.edit(html ? { ...rest, html } : rest, options));
|
|
102
|
+
return { content: [{ type: "text", text: JSON.stringify(post, null, 2) }] };
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
server.tool("posts_delete", "Permanently delete a Ghost post by ID. This action cannot be undone.", {
|
|
109
|
+
id: zod_1.z.string().describe("Ghost post ID to delete"),
|
|
110
|
+
}, async (args) => {
|
|
111
|
+
try {
|
|
112
|
+
await (0, client_js_1.callGhost)(() => client_js_1.ghost.posts.delete(args));
|
|
113
|
+
return { content: [{ type: "text", text: `Post ${args.id} deleted successfully.` }] };
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=posts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/tools/posts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/tools/roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoCzD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerRoleTools = registerRoleTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
function registerRoleTools(server) {
|
|
8
|
+
server.tool("roles_browse", "List available staff roles on your Ghost site (e.g. Administrator, Editor, Author, Contributor). Roles control what actions team members can perform.", {
|
|
9
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression"),
|
|
10
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max results to return (default 15)"),
|
|
11
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
12
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'name asc'"),
|
|
13
|
+
}, async (args) => {
|
|
14
|
+
try {
|
|
15
|
+
const roles = await (0, client_js_1.callGhost)(() => client_js_1.ghost.roles.browse(args));
|
|
16
|
+
return { content: [{ type: "text", text: JSON.stringify(roles, null, 2) }] };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
server.tool("roles_read", "Fetch a single Ghost role by its ID or name.", {
|
|
23
|
+
id: zod_1.z.string().optional().describe("Ghost role ID"),
|
|
24
|
+
name: zod_1.z.string().optional().describe("Role name, e.g. 'Administrator' or 'Editor'"),
|
|
25
|
+
}, async (args) => {
|
|
26
|
+
try {
|
|
27
|
+
const role = await (0, client_js_1.callGhost)(() => client_js_1.ghost.roles.read(args));
|
|
28
|
+
return { content: [{ type: "text", text: JSON.stringify(role, null, 2) }] };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/tools/roles.ts"],"names":[],"mappings":";;AAKA,8CAoCC;AAzCD,6BAAwB;AAExB,4CAAgD;AAChD,4CAAkD;AAElD,SAAgB,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,uJAAuJ,EACvJ;QACE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACjE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC5F,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACzF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC1E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,iBAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAA,8BAAkB,EAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,8CAA8C,EAC9C;QACE,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KACpF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAS,EAAC,GAAG,EAAE,CAAC,iBAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAA,8BAAkB,EAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwGxD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTagTools = registerTagTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
function registerTagTools(server) {
|
|
8
|
+
server.tool("tags_browse", "List all tags on your Ghost site. Tags categorise posts and can be public or internal (#hashtag-style).", {
|
|
9
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression, e.g. 'visibility:public'"),
|
|
10
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max results to return (default 15)"),
|
|
11
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
12
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'name asc'"),
|
|
13
|
+
include: zod_1.z.string().optional().describe("Relations to include, e.g. 'count.posts'"),
|
|
14
|
+
}, async (args) => {
|
|
15
|
+
try {
|
|
16
|
+
const tags = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tags.browse(args));
|
|
17
|
+
return { content: [{ type: "text", text: JSON.stringify(tags, null, 2) }] };
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
server.tool("tags_read", "Fetch a single Ghost tag by its ID or slug.", {
|
|
24
|
+
id: zod_1.z.string().optional().describe("Ghost tag ID"),
|
|
25
|
+
slug: zod_1.z.string().optional().describe("Tag slug (URL-friendly identifier)"),
|
|
26
|
+
include: zod_1.z.string().optional().describe("Relations to include, e.g. 'count.posts'"),
|
|
27
|
+
}, async (args) => {
|
|
28
|
+
try {
|
|
29
|
+
const tag = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tags.read(args));
|
|
30
|
+
return { content: [{ type: "text", text: JSON.stringify(tag, null, 2) }] };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
server.tool("tags_add", "Create a new tag on your Ghost site. Use a '#' prefix in the name to make it an internal tag.", {
|
|
37
|
+
name: zod_1.z.string().describe("Tag name (required). Prefix with '#' to make it internal."),
|
|
38
|
+
slug: zod_1.z.string().optional().describe("URL slug — auto-generated from name if omitted"),
|
|
39
|
+
description: zod_1.z.string().optional().describe("Short description of the tag"),
|
|
40
|
+
feature_image: zod_1.z.string().url().optional().describe("Tag feature image URL"),
|
|
41
|
+
visibility: zod_1.z
|
|
42
|
+
.enum(["public", "internal"])
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("Tag visibility: public (default) or internal"),
|
|
45
|
+
meta_title: zod_1.z.string().optional().describe("SEO title for the tag page"),
|
|
46
|
+
meta_description: zod_1.z.string().optional().describe("SEO description for the tag page"),
|
|
47
|
+
accent_color: zod_1.z.string().optional().describe("Accent color hex code, e.g. '#ff6b35'"),
|
|
48
|
+
}, async (args) => {
|
|
49
|
+
try {
|
|
50
|
+
const tag = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tags.add(args));
|
|
51
|
+
return { content: [{ type: "text", text: JSON.stringify(tag, null, 2) }] };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
server.tool("tags_edit", "Update an existing Ghost tag. Requires the tag ID. Supply only the fields you want to change.", {
|
|
58
|
+
id: zod_1.z.string().describe("Ghost tag ID (required)"),
|
|
59
|
+
name: zod_1.z.string().optional().describe("New tag name"),
|
|
60
|
+
slug: zod_1.z.string().optional().describe("New URL slug"),
|
|
61
|
+
description: zod_1.z.string().optional().describe("Updated description"),
|
|
62
|
+
feature_image: zod_1.z.string().url().optional().describe("New feature image URL"),
|
|
63
|
+
visibility: zod_1.z.enum(["public", "internal"]).optional().describe("Updated visibility"),
|
|
64
|
+
meta_title: zod_1.z.string().optional().describe("Updated SEO title"),
|
|
65
|
+
meta_description: zod_1.z.string().optional().describe("Updated SEO description"),
|
|
66
|
+
accent_color: zod_1.z.string().optional().describe("Updated accent color hex"),
|
|
67
|
+
}, async (args) => {
|
|
68
|
+
try {
|
|
69
|
+
const tag = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tags.edit(args));
|
|
70
|
+
return { content: [{ type: "text", text: JSON.stringify(tag, null, 2) }] };
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
server.tool("tags_delete", "Permanently delete a Ghost tag by ID. Posts that had this tag will not be deleted — the tag is just removed from them.", {
|
|
77
|
+
id: zod_1.z.string().describe("Ghost tag ID to delete"),
|
|
78
|
+
}, async (args) => {
|
|
79
|
+
try {
|
|
80
|
+
await (0, client_js_1.callGhost)(() => client_js_1.ghost.tags.delete(args));
|
|
81
|
+
return { content: [{ type: "text", text: `Tag ${args.id} deleted successfully.` }] };
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tools/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/tools/tiers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgHzD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTierTools = registerTierTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
function registerTierTools(server) {
|
|
8
|
+
server.tool("tiers_browse", "List membership tiers on your Ghost site. Tiers define what paid subscribers get access to.", {
|
|
9
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression, e.g. 'active:true'"),
|
|
10
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max results to return (default 15)"),
|
|
11
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
12
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'name asc'"),
|
|
13
|
+
include: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Relations to include, e.g. 'monthly_price,yearly_price'"),
|
|
17
|
+
}, async (args) => {
|
|
18
|
+
try {
|
|
19
|
+
const tiers = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tiers.browse(args));
|
|
20
|
+
return { content: [{ type: "text", text: JSON.stringify(tiers, null, 2) }] };
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
server.tool("tiers_read", "Fetch a single membership tier by its ID or slug.", {
|
|
27
|
+
id: zod_1.z.string().optional().describe("Ghost tier ID"),
|
|
28
|
+
slug: zod_1.z.string().optional().describe("Tier slug"),
|
|
29
|
+
include: zod_1.z.string().optional().describe("Relations to include, e.g. 'monthly_price,yearly_price'"),
|
|
30
|
+
}, async (args) => {
|
|
31
|
+
try {
|
|
32
|
+
const tier = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tiers.read(args));
|
|
33
|
+
return { content: [{ type: "text", text: JSON.stringify(tier, null, 2) }] };
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.tool("tiers_add", "Create a new paid membership tier. Requires a name. Set monthly/yearly prices to enable Stripe billing.", {
|
|
40
|
+
name: zod_1.z.string().describe("Tier name (required), e.g. 'Premium'"),
|
|
41
|
+
description: zod_1.z.string().optional().describe("Short description shown to potential subscribers"),
|
|
42
|
+
welcome_page_url: zod_1.z
|
|
43
|
+
.string()
|
|
44
|
+
.url()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("URL to redirect new subscribers to after signing up"),
|
|
47
|
+
visibility: zod_1.z
|
|
48
|
+
.enum(["public", "none"])
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("public = shown on the signup page; none = hidden"),
|
|
51
|
+
monthly_price: zod_1.z.number().int().nonnegative().optional().describe("Monthly price in smallest currency unit (e.g. cents)"),
|
|
52
|
+
yearly_price: zod_1.z.number().int().nonnegative().optional().describe("Yearly price in smallest currency unit (e.g. cents)"),
|
|
53
|
+
currency: zod_1.z.string().length(3).optional().describe("ISO 4217 currency code, e.g. 'USD'"),
|
|
54
|
+
benefits: zod_1.z.array(zod_1.z.string()).optional().describe("List of benefits shown on the tier card"),
|
|
55
|
+
trial_days: zod_1.z.number().int().nonnegative().optional().describe("Free trial period in days"),
|
|
56
|
+
}, async (args) => {
|
|
57
|
+
try {
|
|
58
|
+
const tier = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tiers.add(args));
|
|
59
|
+
return { content: [{ type: "text", text: JSON.stringify(tier, null, 2) }] };
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
server.tool("tiers_edit", "Update an existing membership tier. Requires the tier ID. Supply only the fields you want to change.", {
|
|
66
|
+
id: zod_1.z.string().describe("Ghost tier ID (required)"),
|
|
67
|
+
name: zod_1.z.string().optional().describe("Updated tier name"),
|
|
68
|
+
description: zod_1.z.string().optional().describe("Updated description"),
|
|
69
|
+
welcome_page_url: zod_1.z.string().url().optional().describe("Updated welcome page URL"),
|
|
70
|
+
visibility: zod_1.z.enum(["public", "none"]).optional().describe("Updated visibility"),
|
|
71
|
+
monthly_price: zod_1.z.number().int().nonnegative().optional().describe("Updated monthly price in smallest currency unit"),
|
|
72
|
+
yearly_price: zod_1.z.number().int().nonnegative().optional().describe("Updated yearly price in smallest currency unit"),
|
|
73
|
+
benefits: zod_1.z.array(zod_1.z.string()).optional().describe("Updated benefits list (replaces existing)"),
|
|
74
|
+
trial_days: zod_1.z.number().int().nonnegative().optional().describe("Updated free trial period in days"),
|
|
75
|
+
}, async (args) => {
|
|
76
|
+
try {
|
|
77
|
+
const tier = await (0, client_js_1.callGhost)(() => client_js_1.ghost.tiers.edit(args));
|
|
78
|
+
return { content: [{ type: "text", text: JSON.stringify(tier, null, 2) }] };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
server.tool("tiers_delete", "Delete a membership tier by ID. Members on this tier will not be deleted but will lose tier access.", {
|
|
85
|
+
id: zod_1.z.string().describe("Ghost tier ID to delete"),
|
|
86
|
+
}, async (args) => {
|
|
87
|
+
try {
|
|
88
|
+
await (0, client_js_1.callGhost)(() => client_js_1.ghost.tiers.delete(args));
|
|
89
|
+
return { content: [{ type: "text", text: `Tier ${args.id} deleted successfully.` }] };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/tools/tiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmFzD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerUserTools = registerUserTools;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_js_1 = require("../client.js");
|
|
6
|
+
const errors_js_1 = require("../errors.js");
|
|
7
|
+
function registerUserTools(server) {
|
|
8
|
+
server.tool("users_browse", "List staff users of your Ghost site (not members — these are the editorial team with admin access).", {
|
|
9
|
+
filter: zod_1.z.string().optional().describe("Ghost filter expression, e.g. 'status:active'"),
|
|
10
|
+
limit: zod_1.z.number().int().positive().optional().describe("Max results to return (default 15)"),
|
|
11
|
+
page: zod_1.z.number().int().positive().optional().describe("Pagination page number (1-based)"),
|
|
12
|
+
order: zod_1.z.string().optional().describe("Sort expression, e.g. 'name asc'"),
|
|
13
|
+
include: zod_1.z.string().optional().describe("Relations to include, e.g. 'roles'"),
|
|
14
|
+
}, async (args) => {
|
|
15
|
+
try {
|
|
16
|
+
const users = await (0, client_js_1.callGhost)(() => client_js_1.ghost.users.browse(args));
|
|
17
|
+
return { content: [{ type: "text", text: JSON.stringify(users, null, 2) }] };
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
server.tool("users_read", "Fetch a single Ghost staff user by their ID, email, or slug.", {
|
|
24
|
+
id: zod_1.z.string().optional().describe("Ghost user ID"),
|
|
25
|
+
email: zod_1.z.string().email().optional().describe("User email address"),
|
|
26
|
+
slug: zod_1.z.string().optional().describe("User slug (URL-friendly identifier)"),
|
|
27
|
+
include: zod_1.z.string().optional().describe("Relations to include, e.g. 'roles'"),
|
|
28
|
+
}, async (args) => {
|
|
29
|
+
try {
|
|
30
|
+
const user = await (0, client_js_1.callGhost)(() => client_js_1.ghost.users.read(args));
|
|
31
|
+
return { content: [{ type: "text", text: JSON.stringify(user, null, 2) }] };
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
server.tool("users_edit", "Update a Ghost staff user's profile. Requires the user ID. Supply only the fields you want to change.", {
|
|
38
|
+
id: zod_1.z.string().describe("Ghost user ID (required)"),
|
|
39
|
+
name: zod_1.z.string().optional().describe("Display name"),
|
|
40
|
+
email: zod_1.z.string().email().optional().describe("Email address"),
|
|
41
|
+
slug: zod_1.z.string().optional().describe("URL slug"),
|
|
42
|
+
bio: zod_1.z.string().optional().describe("Author bio (shown on author pages)"),
|
|
43
|
+
website: zod_1.z.string().url().optional().describe("Personal website URL"),
|
|
44
|
+
location: zod_1.z.string().optional().describe("Location string"),
|
|
45
|
+
facebook: zod_1.z.string().optional().describe("Facebook profile username"),
|
|
46
|
+
twitter: zod_1.z.string().optional().describe("Twitter/X handle (without @)"),
|
|
47
|
+
profile_image: zod_1.z.string().url().optional().describe("Profile image URL"),
|
|
48
|
+
cover_image: zod_1.z.string().url().optional().describe("Cover image URL"),
|
|
49
|
+
meta_title: zod_1.z.string().optional().describe("SEO title for the author page"),
|
|
50
|
+
meta_description: zod_1.z.string().optional().describe("SEO description for the author page"),
|
|
51
|
+
}, async (args) => {
|
|
52
|
+
try {
|
|
53
|
+
const user = await (0, client_js_1.callGhost)(() => client_js_1.ghost.users.edit(args));
|
|
54
|
+
return { content: [{ type: "text", text: JSON.stringify(user, null, 2) }] };
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
server.tool("users_delete", "Delete a Ghost staff user by ID. Note: you cannot delete the last owner/administrator. Assign their posts to another user first.", {
|
|
61
|
+
id: zod_1.z.string().describe("Ghost user ID to delete"),
|
|
62
|
+
}, async (args) => {
|
|
63
|
+
try {
|
|
64
|
+
await (0, client_js_1.callGhost)(() => client_js_1.ghost.users.delete(args));
|
|
65
|
+
return { content: [{ type: "text", text: `User ${args.id} deleted successfully.` }] };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return (0, errors_js_1.formatErrorContent)(err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}
|