ghost-cms-mcp
Unofficial MCP server for Ghost CMS. Not affiliated with Ghost Foundation.
Manage posts, pages, tags and images through any MCP-compatible client (Claude Code, Claude Desktop, Cursor, OpenCode, etc.).
Installation
uvx ghost-cms-mcp
Or install with pip:
pip install ghost-cms-mcp
Configuration
You need a Ghost Admin API key. Get it from your Ghost Admin panel:
- Go to Settings → Integrations
- Create a new Custom Integration
- Copy the Admin API Key (format:
id:secret)
Claude Code
claude mcp add ghost \
-e GHOST_URL=https://your-blog.com \
-e GHOST_ADMIN_KEY=your-id:your-secret \
-- uvx ghost-cms-mcp
Or add to your project's .mcp.json:
{
"mcpServers": {
"ghost": {
"command": "uvx",
"args": ["ghost-cms-mcp"],
"env": {
"GHOST_URL": "https://your-blog.com",
"GHOST_ADMIN_KEY": "your-id:your-secret"
}
}
}
}
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"ghost": {
"command": "uvx",
"args": ["ghost-cms-mcp"],
"env": {
"GHOST_URL": "https://your-blog.com",
"GHOST_ADMIN_KEY": "your-id:your-secret"
}
}
}
}
Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"ghost": {
"command": "uvx",
"args": ["ghost-cms-mcp"],
"env": {
"GHOST_URL": "https://your-blog.com",
"GHOST_ADMIN_KEY": "your-id:your-secret"
}
}
}
}
CLI
ghost-cms-mcp --url https://your-blog.com --key "your-id:your-secret"
Environment variables take priority over CLI arguments.
Tool Selection
By default all tools are enabled. You can control which tools are available using presets or manual selection.
Presets
| Preset | Tools | Description |
|---|---|---|
all |
posts, pages, tags, images | All tools (default) |
writer |
posts, tags, images | For authors: write, tag, upload images |
content |
posts, pages, tags, images | All content tools |
readonly |
posts, pages, tags, images | Only list/get operations, no create/update/delete |
Configure via env variable or CLI argument:
{
"mcpServers": {
"ghost": {
"command": "uvx",
"args": ["ghost-cms-mcp"],
"env": {
"GHOST_URL": "https://your-blog.com",
"GHOST_ADMIN_KEY": "your-id:your-secret",
"GHOST_PRESET": "writer"
}
}
}
}
Or via CLI:
ghost-cms-mcp --url https://your-blog.com --key "id:secret" --preset readonly
Manual tool selection
Enable only specific tool groups:
{
"env": {
"GHOST_URL": "https://your-blog.com",
"GHOST_ADMIN_KEY": "your-id:your-secret",
"GHOST_TOOLS": "posts,tags"
}
}
Or via CLI:
ghost-cms-mcp --url https://your-blog.com --key "id:secret" --tools posts,tags
Available groups: posts, pages, tags, images
GHOST_TOOLS / --tools takes priority over GHOST_PRESET / --preset.
Available tools
Posts
ghost_list_posts— list posts with filtering by status and tagghost_get_post— get post by ID or slugghost_create_post— create post from Markdownghost_update_post— update post fields (title, content, tags, SEO metadata, etc.)ghost_delete_post— delete postghost_publish_post— publish a draftghost_unpublish_post— revert to draft
Pages
ghost_list_pages— list pagesghost_get_page— get page by ID or slugghost_create_page— create page from Markdownghost_update_page— update page fieldsghost_delete_page— delete page
Tags
ghost_list_tags— list all tagsghost_create_tag— create a new tagghost_delete_tag— delete tag
Images & Site
ghost_upload_image— upload image and get URLghost_site_info— get site metadata (title, version, etc.)
Development
git clone https://github.com/matveev-pavel/ghost-mcp.git
cd ghost-mcp
uv sync --dev
uv run pytest
License
MIT