ghost_create_ memberAdd a member: email (required), name, note, labels, newsletters.
Draft a post from Markdown, publish it and email it to your newsletter, find a member by email and change their labels, set up an offer, and see which posts brought in new subscribers.
PopMCPGhost
Every Ghost Admin and Content API endpoint a key can call, with posts written in Markdown or HTML, Ghost's edit checks handled for you, and site secrets kept out of view.
215 tools in the full catalog: 120 read and 95 write. 35 load by default, and the rest are found with tool search.
ghost_create_ memberAdd a member: email (required), name, note, labels, newsletters.
ghost_delete_ memberDelete a member permanently.
ghost_find_ memberFind a member by exact email, or search names and emails.
ghost_get_ memberOne member by id with newsletters, labels, tiers, subscriptions and email stats.
ghost_list_ labelsList member labels (used to group and target members).
ghost_list_ member_ eventsThe member activity feed: sign-ups, logins, newsletter subscriptions, payments, email opens and clicks, comments.
ghost_list_ membersList members (subscribers), newest first.
ghost_update_ memberUpdate a member: name, email, note, labels (the full list to keep), newsletters (the full list they stay subscribed to), comped tier access.
ghost_copy_ postDuplicate a post as a new draft titled '<title> (Copy)'.
ghost_create_ postCreate a post.
ghost_delete_ postDelete a post permanently.
ghost_find_ postsFind posts (or pages) by words in the title, status and tag, newest edits first.
ghost_get_ postOne post by id, with its HTML (formats=html by default here), tags, authors, status, visibility, newsletter and email state.
ghost_list_ postsList posts of every status (draft, scheduled, published, sent).
ghost_publish_ postPublish a draft now, or schedule it (published_at in the future), in one step; optionally email it to a newsletter's members.
ghost_update_ postUpdate a post: title, html or markdown body, status (draft, published, scheduled), tags, authors, feature image, excerpt, visibility, meta fields.
ghost_list_ usersList staff users (authors, editors, administrators) with roles and post counts.
ghost_create_ pageCreate a page.
ghost_get_ pageOne page by id, with its HTML, tags and authors.
ghost_list_ commentsList comments across the site, newest first, with the member and post.
ghost_list_ pagesList pages (static pages such as About or Contact) of every status.
ghost_list_ settingsEvery site setting as key/value pairs: title, description, navigation, social accounts, members and newsletter options, code injection, meta fields.
ghost_update_ commentModerate a comment: status hidden, published or deleted.
ghost_update_ pageUpdate a page: title, html or markdown body, status, tags, feature image, meta fields.
ghost_site_ overviewOne look at the site: title, URL and Ghost version, published, draft and scheduled post counts, page count, total and paid members, active newsletters (with slugs) and active tiers with prices in cents.
ghost_create_ tagCreate a tag: name (required), slug, description, feature image, accent colour, meta fields.
ghost_list_ tagsList tags, including internal tags (names starting with #).
ghost_update_ tagUpdate a tag's name, slug, description, image or meta fields.
ghost_list_ newslettersList newsletters with their slug, status, sender and design settings.
ghost_create_ offerCreate an offer: name, code, display_title, type (percent, fixed or trial), amount, duration (once, repeating, forever, trial), cadence (month or year), tier { id }.
ghost_list_ offersList offers (discounts and free trials on paid tiers) with their codes, redemptions and status.
ghost_list_ tiersList membership tiers (Free and paid) with prices, benefits, visibility and trial days.
ghost_create_ webhookCreate a webhook: event (e.g. post.published, member.added) and target_url (https).
ghost_delete_ webhookDelete a webhook.
ghost_upload_ imageUpload an image (jpg, png, gif, webp, svg, ico): file { url } or { base64, filename }.
ghost_bulk_ delete_ membersDelete every member matching filter or search.
ghost_bulk_ update_ membersChange many members at once, chosen by filter or search (or all=true): add or remove a label, unsubscribe from newsletters.
ghost_create_ labelCreate a member label: { name }.
ghost_create_ member_ subscriptionGive a member a paid subscription from an existing Stripe price or customer.
ghost_delete_ labelDelete a member label.
ghost_disable_ member_ commentingStop a member from commenting.
ghost_enable_ member_ commentingLet a member comment again.
ghost_export_ members_ csvDownload members as CSV text (email, name, labels, tiers, subscription state).
ghost_get_ labelOne member label by id.
ghost_get_ label_ by_ slugOne member label by slug.
ghost_get_ member_ count_ statsMember counts over time: total, paid, free and comped per day.
ghost_get_ member_ mrr_ statsMonthly recurring revenue over time, per currency (amounts in cents).
ghost_get_ member_ signin_ urlA one-time magic sign-in link for a member (for support).
ghost_import_ members_ csvImport members from a CSV.
ghost_remove_ member_ email_ suppressionClear a member's email suppression (after a bounce or spam complaint) so newsletters reach them again.
ghost_sign_ out_ memberSign a member out of every device.
ghost_update_ labelRename a member label.
ghost_update_ member_ subscriptionChange a member's Stripe subscription, e.g. cancel at period end ({ cancel_at_period_end: true }) or resume.
ghost_content_ get_ authorContent API: one author by id.
ghost_content_ get_ author_ by_ slugContent API: one author by slug.
ghost_content_ get_ offerContent API: one public offer by id.
ghost_content_ get_ pageContent API: one published page by id.
ghost_content_ get_ page_ by_ slugContent API: one published page by slug.
ghost_content_ get_ postContent API: one published post by id, as the public sees it.
ghost_content_ get_ post_ by_ slugContent API: one published post by slug.
ghost_content_ get_ settingsContent API: the public settings themes use (title, description, logo, navigation, social accounts, locale).
ghost_content_ get_ tagContent API: one public tag by id.
ghost_content_ get_ tag_ by_ slugContent API: one public tag by slug.
ghost_content_ list_ authorsContent API: public author profiles (staff with published posts).
ghost_content_ list_ newslettersContent API: the newsletters readers can subscribe to.
ghost_content_ list_ pagesContent API: published pages as the public sees them.
ghost_content_ list_ postsContent API: published posts exactly as the public sees them (member-only content is cut at the paywall).
ghost_content_ list_ recommendationsContent API: the sites this publication recommends.
ghost_content_ list_ tagsContent API: public tags.
ghost_content_ list_ tiersContent API: public membership tiers and prices.
ghost_content_ search_ index_ authorsContent API: compact list of authors for search.
ghost_content_ search_ index_ postsContent API: compact list of published posts for search.
ghost_content_ search_ index_ tagsContent API: compact list of public tags for search.
ghost_get_ member_ count_ historyDaily member counts (paid, free, comped) from date_from (YYYY-MM-DD).
ghost_get_ mrr_ historyDaily monthly recurring revenue per currency from date_from (YYYY-MM-DD).
ghost_get_ newsletter_ basic_ statsLighter per-post newsletter results (sent and opens) for a newsletter_id.
ghost_get_ newsletter_ click_ statsClick counts for newsletter posts: newsletter_id plus post_ids (comma separated).
ghost_get_ newsletter_ statsPer-post newsletter results (sent, opened, clicked, open and click rates) for a newsletter_id between date_from and date_to.
ghost_get_ post_ growth_ statsMembers and revenue one post brought in.
ghost_get_ post_ statsOne post's performance: views, visitors, free sign-ups, paid conversions, MRR and email engagement.
ghost_get_ post_ top_ referrersTop traffic sources of one post with sign-ups and conversions.
ghost_get_ posts_ member_ countsFree and paid sign-ups attributed to several posts at once: body { postIds: ['<post id>', ...] }.
ghost_get_ posts_ visitor_ countsWeb visitor counts for several posts at once: body { postUuids: ['<post uuid>', ...] }.
ghost_get_ referrer_ historyWhere members came from over time: sign-ups and paid conversions per referrer source.
ghost_get_ subscriber_ count_ historyNewsletter subscriber counts over time, for one newsletter_id or all.
ghost_get_ subscription_ statsPaid subscription counts over time per tier and cadence, with sign-ups and cancellations.
ghost_get_ top_ contentMost viewed pages and posts from web analytics between date_from and date_to; narrow by member_status, post_type, device, location or source.
ghost_get_ top_ postsPosts ranked by sign-ups, paid conversions or MRR between date_from and date_to (YYYY-MM-DD).
ghost_get_ top_ posts_ by_ viewsPosts ranked by web views between date_from and date_to, with sign-ups and conversions.
ghost_get_ top_ sources_ growthTraffic sources ranked by the members and revenue they brought in.
ghost_bulk_ delete_ postsDelete every post matching an NQL filter (required).
ghost_bulk_ update_ postsChange many posts at once, chosen by an NQL filter: feature or unfeature, make public or members-only, add or remove tags, unpublish.
ghost_export_ posts_ csvDownload posts with their analytics (views, sign-ups, conversions, email opens and clicks) as CSV text.
ghost_get_ post_ by_ slugOne post by its URL slug (the last part of the post URL), with its HTML, tags and authors.
ghost_cancel_ email_ analyticsCancel scheduled email analytics fetching.
ghost_create_ inviteInvite someone to the staff: { email, role_id }.
ghost_delete_ inviteRevoke a pending staff invitation.
ghost_delete_ userDelete a staff user; their posts move to the site owner.
ghost_get_ emailOne newsletter email: subject, recipient filter, counts (delivered, opened, failed) and status.
ghost_get_ email_ analytics_ statusWhether open and click analytics are being fetched for a newsletter email.
ghost_get_ email_ previewRender a post as the newsletter email: subject and html.
ghost_get_ email_ sending_ statusWhere a newsletter send is up to: pending, submitting, submitted or failed, with batch progress.
ghost_get_ inviteOne staff invitation by id.
ghost_get_ userOne staff user by id.
ghost_get_ user_ by_ emailOne staff user by email address.
ghost_get_ user_ by_ slugOne staff user by slug.
ghost_list_ email_ batchesThe delivery batches of a newsletter send with their status and errors.
ghost_list_ email_ recipient_ failuresRecipients a newsletter could not be delivered to, with the reason.
ghost_list_ emailsList sent newsletter emails (one per post emailed) with recipients, opens, clicks and status.
ghost_list_ invitesList pending staff invitations.
ghost_list_ rolesList staff roles (Administrator, Editor, Author, Contributor, Super Editor).
ghost_retry_ emailRetry a failed newsletter send.
ghost_schedule_ email_ analyticsAsk Ghost to fetch open and click analytics for an email now (optionally between begin and end).
ghost_send_ test_ emailSend a test newsletter email of a post: { emails: ['you@example.com'], newsletter, memberSegment }.
ghost_update_ userUpdate a staff user's profile: name, slug, bio, website, location, social links, profile and cover image, role.
ghost_create_ automated_ emailCreate an automated email: name, slug (member-welcome-email-free or member-welcome-email-paid), subject, lexical, status.
ghost_get_ automated_ emailOne automated email with its lexical content.
ghost_get_ automated_ email_ designThe shared design of automated emails (colours, fonts, header image).
ghost_list_ automated_ emailsList automated member emails (welcome emails for free and paid sign-ups) with status and subject.
ghost_preview_ automated_ emailRender an automated email to subject and html.
ghost_send_ automated_ email_ testSend a test of an automated email: { email }.
ghost_update_ automated_ emailChange an automated email's subject, content or status (active or inactive).
ghost_update_ automated_ email_ designChange the shared design of automated emails.
ghost_update_ automated_ email_ sendersSet the sender name, sender email and reply-to of automated emails.
ghost_verify_ automated_ email_ sender_ updateConfirm an automated email sender change with the token from the verification email: { token }.
ghost_bulk_ delete_ pagesDelete every page matching an NQL filter (required).
ghost_bulk_ update_ pagesChange many pages at once, chosen by an NQL filter.
ghost_check_ recommendation_ urlFetch a site's title, favicon and one-click-subscribe support before recommending it.
ghost_copy_ pageDuplicate a page as a new draft.
ghost_create_ commentAdd a comment as a member: post_id, member_id, html, and parent_id for a reply.
ghost_create_ recommendationRecommend a site: { url, title, description, excerpt, featured_image, favicon, one_click_subscribe }.
ghost_delete_ pageDelete a page permanently.
ghost_delete_ recommendationRemove a recommendation.
ghost_disconnect_ stripeDisconnect Stripe.
ghost_get_ commentOne comment by id.
ghost_get_ page_ by_ slugOne page by its URL slug.
ghost_get_ recommendationOne recommendation by id.
ghost_get_ redirectsDownload the site's redirects file (redirects.yaml or redirects.json).
ghost_get_ routes_ yamlDownload the site's routes.yaml (custom routes, collections and taxonomies).
ghost_list_ comment_ dislikesMembers who disliked a comment.
ghost_list_ comment_ likesMembers who liked a comment.
ghost_list_ comment_ repliesReplies to a comment.
ghost_list_ comment_ reportsReports members filed against a comment.
ghost_list_ incoming_ recommendationsOther sites that recommend this publication.
ghost_list_ mentionsWebmentions: other sites that linked to this site's posts.
ghost_list_ post_ commentsComments on one post.
ghost_list_ post_ feedbackMember feedback (more like this / less like this) on a post's newsletter.
ghost_list_ recommendationsSites this publication recommends to its readers, with click and subscriber counts.
ghost_regenerate_ private_ site_ access_ codeMake a new access code for a private (password-protected) site.
ghost_update_ recommendationChange a recommendation's title, description or image.
ghost_update_ settingsChange site settings: body { settings: [ { key, value } ] }, e.g. title, description, navigation, secondary_navigation, codeinjection_head, accent_color, members_signup_access.
ghost_upload_ redirectsReplace the site's redirects.
ghost_upload_ routes_ yamlReplace routes.yaml.
ghost_verify_ settings_ email_ updateConfirm a support or sender email change with the token from the verification email: { token }.
ghost_activate_ themeMake an installed theme the live theme.
ghost_delete_ themeDelete an installed theme that is not active.
ghost_get_ active_ themeThe active theme with its validation errors and warnings.
ghost_install_ themeInstall a theme straight from GitHub: query source=github and ref=Owner/Repo, e.g. TryGhost/Edition.
ghost_list_ custom_ theme_ settingsThe active theme's custom settings (the options in Ghost Admin > Design) with their types and current values.
ghost_list_ themesList installed themes and which one is active, with any theme errors and warnings.
ghost_update_ custom_ theme_ settingsChange the active theme's custom settings: body { custom_theme_settings: [ { key, value } ] }.
ghost_upload_ themeUpload a theme zip: file { url } or { base64 }.
ghost_create_ page_ gift_ linkCreate a new gift link for a page.
ghost_create_ post_ gift_ linkCreate a new gift link for a post (a fresh shareable URL that unlocks it).
ghost_ensure_ page_ gift_ linkGet the page's gift link, creating one when it has none.
ghost_ensure_ post_ gift_ linkGet the post's gift link, creating one when it has none.
ghost_generate_ slugGet a free URL slug for a title.
ghost_generate_ slug_ for_ resourceGet a free slug for an existing post, tag or user (its own current slug counts as free).
ghost_get_ configThe site's server configuration as Ghost Admin sees it: Ghost version, environment, enabled Labs features, mail and Stripe setup flags and upload limits.
ghost_get_ oembedTurn a URL (YouTube, X, Spotify, any page) into embed or bookmark card data: query url and type (embed or bookmark).
ghost_get_ siteBasic facts about the site: title, description, logo, icon, accent colour, public URL, locale and the Ghost version.
ghost_list_ page_ gift_ linksThe gift links of a members-only page.
ghost_list_ post_ gift_ linksThe gift links of a paid or members-only post: shareable links that let anyone read it without signing in.
ghost_remove_ all_ gift_ linksRevoke every gift link on the site.
ghost_send_ slack_ test_ messageSend a test message to the Slack webhook set in Ghost's integrations.
ghost_delete_ tagDelete a tag.
ghost_get_ tagOne tag by id.
ghost_get_ tag_ by_ slugOne tag by slug.
ghost_create_ integrationCreate a custom integration: { name, description }.
ghost_create_ newsletterCreate a newsletter: name, description, sender_name, sender_reply_to, subscribe_on_signup, design options.
ghost_create_ snippetSave a snippet: name plus lexical (Ghost's editor JSON).
ghost_delete_ integrationDelete a custom integration.
ghost_delete_ snippetDelete a snippet.
ghost_get_ integrationOne integration with its webhooks.
ghost_get_ newsletterOne newsletter by id.
ghost_get_ snippetOne snippet by id.
ghost_list_ integrationsList the site's integrations (custom and built-in) with their webhooks.
ghost_list_ snippetsList reusable content snippets (saved blocks of editor content).
ghost_update_ integrationRename a custom integration or change its description or icon.
ghost_update_ newsletterUpdate a newsletter's name, description, sender, design or status (archive with status: archived).
ghost_update_ snippetRename or change a snippet.
ghost_verify_ newsletter_ email_ updateConfirm a newsletter sender-address change with the token from the verification email: { token }.
ghost_create_ tierCreate a paid tier: name, monthly_price and yearly_price in cents, currency (e.g. usd), benefits, description, visibility, trial_days.
ghost_get_ offerOne offer by id.
ghost_get_ stripe_ checkout_ brandingThe branding Stripe Checkout takes from the site (icon, colours, fonts).
ghost_get_ stripe_ checkout_ configHow Stripe Checkout looks for paid sign-ups (colours, shapes, logo, fields).
ghost_get_ tierOne tier by id.
ghost_preview_ stripe_ checkoutOpen a preview Stripe Checkout session with the current design.
ghost_search_ index_ pagesA compact list of every page for quick local search.
ghost_search_ index_ postsA compact list of every published post (id, title, url, excerpt, tags) for quick local search.
ghost_search_ index_ tagsA compact list of every public tag.
ghost_search_ index_ usersA compact list of every staff user with published posts.
ghost_update_ offerUpdate an offer's name, code, display text or status (archive with status: archived).
ghost_update_ stripe_ checkout_ configChange the Stripe Checkout design for paid sign-ups.
ghost_update_ tierUpdate a tier's name, prices (cents), benefits, description, visibility or trial days.
ghost_create_ notificationAdd a notice to Ghost Admin: { type: info|warn|error, message, dismissible }.
ghost_dismiss_ notificationDismiss a Ghost Admin notice.
ghost_list_ notificationsNotices Ghost shows in its Admin (update available, warnings).
ghost_update_ webhookChange a webhook's event, target_url, name or secret.
ghost_bulk_ update_ linksChange where a tracked newsletter link points, for every email that contains it.
ghost_list_ linksLinks found in sent newsletter emails with their click counts.
ghost_upload_ mediaUpload a video or audio file (mp4, webm, ogg, mp3, wav, m4a): file { url } or { base64, filename }, optional thumbnail.
ghost_upload_ media_ thumbnailUpload or replace the thumbnail image of an uploaded video: file plus ref (the media URL).
ghost_list_ actionsThe staff activity log (who created, edited or deleted which post, page, tag or setting, and when).
ghost_upload_ fileUpload any file (pdf, zip, docx and more) for a file card or download link: file { url } or { base64, filename } or { content, filename }.
Credentials off one Ghost screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Ghost Admin open Settings, then Integrations, and add a custom integration. Paste its API URL and Admin API key; the Content API key is optional. A staff access token from your profile under Settings, then Staff, works in the same field and also unlocks analytics and email reports.
https://yoursite.ghost.io••••••••••••3f7a••••••••••••3f7aPublishing a post with a newsletter emails your members at once and cannot be recalled, and deletes are permanent, all as soon as the AI calls them. Tick Ghost on the PopMCP consent screen only for clients that should edit the site. Teammates start on read-only.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Ghost credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Turn these notes into a post tagged News, then publish it and email it to the Weekly newsletter
ghost_create_postok
Then just ask for the work
“Turn these notes into a post tagged News, then publish it and email it to the Weekly newsletter”
“Find ann@example.com, add the VIP label and tell me which newsletters she gets”
“Which posts did I publish this month, and which drafts has nobody touched in two weeks”
“Create a 30 percent Black Friday offer on the yearly Gold tier and give me its code”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Ghost behind an AI client.
Your site's API URL and an Admin API key. In Ghost Admin open Settings, then Integrations, choose Add custom integration and copy both values; the Content API key on the same screen is optional. Ghost(Pro) Starter does not include custom integrations, so you need Publisher or higher, or a self-hosted site. PopMCP stores the key encrypted and signs a fresh five-minute token from it for every request, so the key itself never leaves the server.
Yes. create_post and update_post take Markdown or HTML, and publish_post publishes a draft now or schedules it, optionally emailing it to one newsletter's members. Sending an email cannot be undone, so the tools say to confirm first, and send_test_email can mail a test to you beforehand. Ghost's rule that every edit carries the post's latest update time is handled for you.
Ghost limits custom integration keys to posts, pages, tags, members, newsletters, tiers, offers, comments, uploads, webhooks and reading settings. Analytics, newsletter email reports, snippets, settings changes, the theme list and staff management need a staff access token, which acts as you with your role. Find it in Ghost Admin under Settings, then Staff, on your own profile, and paste it in the Admin API key field instead.
The optional Content API tools, which read published posts, pages, authors, tags, tiers and newsletters exactly as visitors see them. Everything they return can also be read through the Admin API tools, which include drafts, so most people leave the field empty.
Yes, with Ghost 5 and 6 on any https address the internet can reach, including sites installed in a subdirectory and sites whose admin lives on a separate domain, which PopMCP detects when you connect. Ghost(Pro) sites on Publisher, Business and Custom plans work the same way.
215: every Admin and Content API endpoint a key can call, plus four multi-step tools for finding posts, finding a member, publishing and a site overview. Thirty-five everyday tools load by default and the rest stay searchable, so your AI client is not crowded.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Ghost in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Ghost on the consent screen. The Ghost tools are then available in that session, and no Ghost credential is stored on your machine.
Loading 215 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 35-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 215 here. A trigger is something PopMCP watches for you: 31 Ghost events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Ghost.
Launch a hosted MCP endpoint for Ghost, keep tool access under control, and start testing real workflow prompts right away.