A Model Context Protocol (MCP) server for interacting with Ghost CMS through LLM interfaces like Claude. This server provides secure and comprehensive access to your Ghost blog, leveraging JWT authentication and a rich set of MCP tools for managing posts, users, members, tiers, offers, and newsletters.
- Secure JWT Authentication for Ghost Admin API requests
- Comprehensive entity access including posts, users, members, tiers, offers, and newsletters
- Advanced search functionality with both fuzzy and exact matching options
- Detailed, human-readable output for Ghost entities
- Robust error handling using custom
GhostError
exceptions - Integrated logging support via MCP context for enhanced troubleshooting
To install Ghost MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @MFYDev/ghost-mcp --client claude
# Clone repository
git clone git@github.com/mfydev/ghost-mcp.git
cd ghost-mcp
# Create virtual environment and install
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .
- Python ≥ 3.12
- Running Ghost instance with Admin API access (v5.x+ recommended)
- Node.js (for testing with MCP Inspector)
GHOST_API_URL=https://yourblog.com # Your Ghost Admin API URL
GHOST_STAFF_API_KEY=your_staff_api_key # Your Ghost Staff API key
To use this with MCP clients, for instance, Claude Desktop, add the following to your claude_desktop_config.json
:
{
"mcpServers": {
"ghost": {
"command": "/Users/username/.local/bin/uv",
"args": [
"--directory",
"/path/to/ghost-mcp",
"run",
"src/main.py"
],
"env": {
"GHOST_API_URL": "your_ghost_api_url",
"GHOST_STAFF_API_KEY": "your_staff_api_key"
}
}
}
}
GHOST_API_URL=your_ghost_api_url GHOST_STAFF_API_KEY=your_staff_api_key npx @modelcontextprotocol/inspector uv --directory /path/to/ghost-mcp run src/main.py
list_posts
: List blog posts with pagination (supports both text and JSON formats)search_posts_by_title
: Search for posts by title using exact or fuzzy matchingread_post
: Retrieve full content of a specific post in HTML or plaintext formatscreate_post
: Create a new post with specified content and metadataupdate_post
: Update a specific post with new content and metadatadelete_post
: Delete a specific postbatchly_update_posts
: Update multiple posts in a single request
browse_tags
: List all tags associated with the blogread_tag
: Retrieve detailed information about a specific tagcreate_tag
: Create a new tag with specified detailsupdate_tag
: Update an existing tag with new informationdelete_tag
: Delete a specific tag
list_roles
: List all available rolescreate_invite
: Create a new user invitation email and role_idlist_users
: List all users with detailed role informationread_user
: Get comprehensive details of a specific userdelete_user
: Delete a specific user
list_members
: List members with subscription and newsletter detailsread_member
: Retrieve detailed information for a specific member, including subscriptionscreate_member
: Create a new member with specified detailsupdate_member
: Update an existing member's information
list_tiers
: List all available membership tiersread_tier
: Retrieve detailed information about a specific tier, including benefits and pricingcreate_tier
: Create a new membership tier with specified detailsupdate_tier
: Update an existing tier with new information
list_offers
: List promotional offers with relevant detailsread_offer
: Get detailed information on a specific offercreate_offer
: Create a new promotional offer with specified detailsupdate_offer
: Update an existing offer with new information
list_newsletters
: List all newsletters associated with the blogread_newsletter
: Retrieve detailed settings and information for a specific newslettercreate_newsletter
: Create a new newsletter with specified detailsupdate_newsletter
: Update an existing newsletter with new information
create_webhook
: Create a new webhook with specified detailsupdate_webhook
: Update an existing webhook with new informationdelete_webhook
: Delete a specific webhook
All resources follow the URI pattern: [type]://[id]
user://{user_id}
: User profiles and rolesmember://{member_id}
: Member details and subscriptionstier://{tier_id}
: Tier configurationsoffer://{offer_id}
: Offer detailsnewsletter://{newsletter_id}
: Newsletter settingspost://{post_id}
: Post content and metadatablog://info
: General blog information
Ghost MCP Server employs a custom GhostError
exception to handle API communication errors and processing issues. This ensures clear and descriptive error messages to assist with troubleshooting.
- Fork repository
- Create feature branch
- Commit changes
- Create pull request
MIT