Ghost MCP Server
A Model Context Protocol (MCP) server for Ghost CMS. Manage your Ghost blog content directly from Claude, Cursor, or any MCP-compatible client.
Features
- ๐ Create & Edit Posts - Draft and publish blog posts
- ๐ Search Posts - Find posts by status, tags, or query
- ๐ท๏ธ Tag Management - List and organize your tags
- ๐ Analytics - Basic analytics integration support
- ๐๏ธ Delete Posts - Remove unwanted content
- ๐ Resource Access - Browse posts as MCP resources
Installation
NPM (recommended)
npm install -g @mcpanvil/ghost-mcp
From Source
git clone https://github.com/mcpanvil/ghost-mcp.git
cd ghost-mcp
npm install
npm run build
npm link
Configuration
Get your Ghost API keys:
- Log into your Ghost Admin
- Go to Settings > Integrations
- Create a new Custom Integration
- Copy the Admin API Key and Content API Key
Set up environment variables:
# Create a .env file or set these in your environment
GHOST_URL=https://your-site.ghost.io
GHOST_ADMIN_API_KEY=your-admin-api-key
GHOST_CONTENT_API_KEY=your-content-api-key
Usage
With Claude Desktop
Add to your claude_desktop_config.json
:
{
"mcpServers": {
"ghost": {
"command": "npx",
"args": ["@mcpanvil/ghost-mcp"],
"env": {
"GHOST_URL": "https://your-site.ghost.io",
"GHOST_ADMIN_API_KEY": "your-admin-key",
"GHOST_CONTENT_API_KEY": "your-content-key"
}
}
}
}
With Claude Code
# Install globally first
npm install -g @mcpanvil/ghost-mcp
# Add to Claude Code
claude mcp add ghost "npx @mcpanvil/ghost-mcp"
# Set environment variables
export GHOST_URL="https://your-site.ghost.io"
export GHOST_ADMIN_API_KEY="your-admin-key"
export GHOST_CONTENT_API_KEY="your-content-key"
With Cursor
Add to Cursor's MCP settings:
{
"ghost": {
"command": "npx",
"args": ["@mcpanvil/ghost-mcp"],
"env": {
"GHOST_URL": "https://your-site.ghost.io",
"GHOST_ADMIN_API_KEY": "your-admin-key",
"GHOST_CONTENT_API_KEY": "your-content-key"
}
}
}
Available Tools
create_post
Create a new blog post.
{
title: string; // Required
content: string; // Required (HTML or Markdown)
status?: 'draft' | 'published';
tags?: string[];
excerpt?: string;
featured?: boolean;
}
update_post
Update an existing post.
{
id: string; // Required (post ID)
title?: string;
content?: string;
status?: 'draft' | 'published';
tags?: string[];
excerpt?: string;
featured?: boolean;
}
search_posts
Search and list posts.
{
query?: string;
status?: 'draft' | 'published' | 'all';
limit?: number; // 1-100, default 10
tags?: string[];
}
get_post
Get a specific post by ID or slug.
{
id: string; // Post ID or slug
}
delete_post
Delete a post.
{
id: string; // Post ID
}
list_tags
List all available tags.
{
limit?: number; // 1-100, default 20
}
get_analytics
Get analytics information (requires additional setup).
{
days?: number; // 1-365, default 30
}
Example Workflows
Writing a New Blog Post
Human: Create a draft blog post about building MCP servers