Ghost MCP Server
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.

Features
- 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
GhostErrorexceptions - Integrated logging support via MCP context for enhanced troubleshooting
Installation
Installing via Smithery
To install Ghost MCP Server for Claude Desktop automatically via Smitheryβ:
npx -y @smithery/cli install @MFYDev/ghost-mcp --client claudeManual Installation
# 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 .Requirements
- Python β₯ 3.12
- Running Ghost instance with Admin API access (v5.x+ recommended)
- Node.js (for testing with MCP Inspector)
Usage
Environment Variables
GHOST_API_URL=https://yourblog.com # Your Ghost Admin API URL
GHOST_STAFF_API_KEY=your_staff_api_key # Your Ghost Staff API keyUsage with MCP Clients
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"
}
}
}
}Testing with MCP Inspector
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.pyAvailable Tools
Posts Management
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
Tags Management
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
Users Management
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
Members Management
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
Tiers Management
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
Offers Management
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
Newsletters Management
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
Webhooks Management
create_webhook: Create a new webhook with specified detailsupdate_webhook: Update an existing webhook with new informationdelete_webhook: Delete a specific webhook
Available Resources
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
Error Handling
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.
Contributing
- Fork repository
- Create feature branch
- Commit changes
- Create pull request
License
MIT
Last updated on