Ghost MCP Server
Manages Ghost CMS through its Admin API, with tools for posts, pages, tags, tiers, newsletters, offers, members, labels, staff users, images, themes, webhooks, site settings, SEO updates, uploads, exports, and generic API requests across the Ghost route catalog.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Ghost MCP Server
A TypeScript MCP server for managing Ghost CMS through AI clients over stdio: posts, pages, SEO, tags, members, newsletters, uploads and exports.
58 tools: 54 dedicated API tools, two SEO/tag shortcuts, a route search and a generic caller. The catalog covers 253 routes from a pinned Ghost source snapshot; availability depends on your credentials, Ghost version and feature flags. See GHOST_API.list for routes and sources.
Quick start
Requires Node.js 20 or newer and access to a Ghost Admin API.
git clone https://github.com/proars/ghost-mcp-server.git
cd ghost-mcp-server
npm install
cp .env.example .envEdit .env:
GHOST_API_URL=https://your-blog.com
GHOST_ADMIN_API_KEY=id:secretUse the canonical Admin domain, including any site subdirectory, without /ghost/api/admin. For a local site, use an address such as http://localhost:2368.
Create a key in Ghost Admin → Settings → Integrations → Add custom integration. Copy the complete Admin API Key (id:secret), not the Content API key.
Configuration is loaded from the project-root .env, regardless of the launch directory. Existing environment variables take priority; if both required variables are set, the file is not read. Optional: GHOST_MCP_ENV_FILE selects another env file; GHOST_MCP_SKIP_DOTENV=1 disables file loading.
Related MCP server: Ghost MCP Server
Connect your AI client
Replace /ABSOLUTE/PATH/ghost-mcp-server with your project path. These examples use the keys from .env; you can also supply them through your client's environment configuration.
Claude Code:
claude mcp add ghost -- npm --silent --prefix /ABSOLUTE/PATH/ghost-mcp-server startClaude Desktop / Cursor:
{
"mcpServers": {
"ghost-mcp-server": {
"command": "npm",
"args": ["--silent", "--prefix", "/ABSOLUTE/PATH/ghost-mcp-server", "start"]
}
}
}For Claude Desktop on macOS, edit ~/Library/Application Support/Claude/claude_desktop_config.json. For Cursor, use ~/.cursor/mcp.json or your project's .cursor/mcp.json. Restart the client after configuration.
Other stdio MCP clients can use the same command. Keep --silent: npm's startup banner would otherwise enter the MCP protocol stream on stdout.
Tools
Resource | Tools |
Posts |
|
Pages |
|
Tags |
|
Tiers |
|
Newsletters |
|
Offers |
|
Members |
|
Labels |
|
Staff |
|
Images / themes |
|
Webhooks |
|
Site |
|
Shortcuts |
|
Discovery / generic calls |
|
Calling conventions
Create/update: pass record fields in
data, with the recordidas a separate argument. Post/page updates requiredata.updated_atfrom a fresh read; the SEO/tag shortcuts takeupdated_atdirectly.Lists: use
limit,page,filter,order,includeandfields. Posts/pages return compact fields and tags by default; single-record reads return full records.Tags: replacing tags replaces the entire set. Missing tags are created; an empty array removes all tags.
Publishing: call
update_postwithdata.status="published", or"scheduled"plus a futuredata.published_at. Addnewsletter(slug) and optionallyemail_segmentto send email.Images:
upload_imagetakesfile_path, optionalpurpose(image,profile_image,icon) andref.
For example, ask: "List my latest posts with their SEO titles" or "Create a draft from this HTML."
Routes without dedicated tools
Use ghost_list_endpoints to search by group, method, access or search; without_dedicated_tool=true finds the other 199 routes. Entries show access requirements, feature flags and upload fields.
Call a route with ghost_api_request. Its path is relative to /ghost/api/admin; substitute actual IDs/slugs, without a query string.
ghost_api_request method=GET path=/labels/slug/vip/
ghost_api_request method=POST path=/members/upload/ files={membersfile: "/Users/me/members.csv"}
ghost_api_request method=GET path=/posts/export/ save_to="/Users/me/posts.csv"Pass JSON payloads in body using Ghost's expected structure, query parameters in query, and multipart files as files={formField: "/absolute/path"} with optional text fields.
For downloads, save_to must name a new file in an existing writable folder; trailing separators are rejected. Existing files are never overwritten. Set save_to on the first call of a POST/PUT/DELETE that returns a file—repeating a mutation to retrieve its response can repeat its effect.
Access and compatibility
Class | Routes | Requirement |
| 125 | Integration-key allowlist or public access; handler permissions still apply. |
| 116 | A staff user's access token with the required role, or a user session. |
| 3 | User cookie session; integration keys and staff tokens are blocked. |
| 9 | Login/recovery/setup flows with their own authentication requirements. |
For staff-token access, put the token from the user's Ghost Admin profile into GHOST_ADMIN_API_KEY. Its permissions follow the user's role. Staff tokens cannot call DELETE /db/, PUT /users/owner/ or POST /authentication/reset/.
The server does not implement cookie sessions, login or 2FA. The catalog includes these routes for discovery, not as supported authentication flows.
Requests send Accept-Version: v5.0. The catalog is a snapshot of Ghost's main branch and includes newer or experimental routes that may return 404 on your installation. The public Content API is not included.
Safety and limits
Keep keys in
.envor your client's environment; never commit them. Enable manual approval for destructive tools, including allupdate_*/delete_*tools,activate_theme,upload_themeandghost_api_request.If a mutation fails after dispatch, check Ghost before retrying: it may already have completed. Use read tools to inspect a truncated response's result.
Redirects are never followed. Configure the canonical Admin URL; after a mutation receives a redirect, check its result before sending another request.
Local file paths must be absolute. Hidden path components are refused both as written and after symlink resolution; uploads require regular files. Downloads are reserved before dispatch with owner-only permissions.
File checks are not a general sandbox: they do not protect sensitive files with visible names or defend against a local process rewriting directory components during a call. Treat site content as untrusted and review upload requests.
Uploads and downloads are buffered in memory. HTTP requests time out after 120 seconds; tool responses over 100,000 characters are truncated.
Development
npm run typecheck # tsc --noEmit
npm test # regression tests with synthetic credentials and a local fake Ghost server
npm run catalog # regenerate src/catalog.ts from GHOST_API.list
npm run build # compile to dist/
npm start # run over stdio (requires configuration)Tests check catalog/tool consistency, request construction, file safety, redirects, retry guidance and configuration isolation. They do not establish compatibility with a live Ghost instance.
Edit GHOST_API.list to change routes, then regenerate the catalog and run tests. See AGENTS.md for architecture and contribution rules. Server logs belong on stderr; stdout is reserved for MCP.
License
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Publish to self-hosted WordPress from AI agents: markdown, images, SEO, and Notion sync.
Publish blog posts, send newsletters and emails from Claude, Claude Code, Codex and ChatGPT.
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Ghost CMS instances through the Admin API, supporting content operations (posts, tags), member management, newsletters, tiers, offers, and webhooks through natural language interactions.4 npm1MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables interaction with Ghost CMS through the Ghost Admin API via LLM interfaces. It provides comprehensive tools for managing posts, members, newsletters, and other site entities through secure JWT authentication.-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Ghost CMS content including posts, members, users, tags, tiers, offers, newsletters, invites, roles, and webhooks via the Ghost Admin API.-
- AlicenseNot gradedqualityDmaintenanceEnables to manage Ghost CMS instance using LLM interfaces. Supports comprehensive CRUD operations on posts, members, newsletters, offers, tags, tiers, users, and webhooks.4 npmMIT