Runs as a serverless application on Cloudflare Workers platform, providing the MCP server infrastructure and OAuth handling
Provides comprehensive Ghost CMS management capabilities including creating, reading, updating, and deleting blog posts, with AI-powered content enhancement, automated title and excerpt generation, and advanced search functionality
Uses GitHub OAuth for secure authentication and single-user access control to the MCP server
Uses Google's Imagen AI for professional quality image generation (10-15 seconds) as an alternative to Replicate Flux
Leverages Google Gemini AI for intelligent content generation, transforming rough ideas into complete blog posts with automated enhancement features
Integrates Replicate's Flux model for ultra-fast AI image generation (3-7 seconds) to create feature images for blog posts
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Content Creation MCP Servercreate a blog post about AI trends in 2024 with a futuristic feature image"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š Ghost Blog Management MCP Server
Transform your Ghost CMS workflow with AI-powered content management directly from Claude Desktop.
This MCP server brings the full power of Ghost Blog Smart API to Claude, enabling you to create AI-enhanced blog posts, generate stunning feature images, and manage multiple Ghost blogs - all through natural conversation.
⨠Why This MCP Server?
šÆ Multi-Blog Management
Manage unlimited Ghost blogs from a single MCP server. Switch between blogs dynamically by providing credentials, perfect for agencies and content creators managing multiple properties.
š¤ AI-First Content Creation
Smart Create: Transform rough notes into polished blog posts with Google Gemini
Dual Image Generation: Choose between ultra-fast Flux (3-7s) or professional Imagen (10-15s)
Auto Enhancement: Generate titles, excerpts, and tags automatically
Multi-language Support: Create content in any language
š Support for Posts AND Pages
Create both blog posts and static pages (About, Contact, etc.) with the new post_type parameter support.
š Enterprise-Grade Security
GitHub OAuth authentication with flexible access control
Private mode: Restrict to specific GitHub users
Public mode: Allow all authenticated GitHub users
Three-level credential priority system
HMAC-signed session management
No hardcoded secrets
Related MCP server: Ghost MCP Server
šļø Architecture
graph LR
A[Claude Desktop] -->|MCP Protocol| B[Ghost Blog MCP Server]
B -->|REST API| C[Ghost Blog Smart API]
C -->|Admin API| D[Ghost CMS]
B -.->|OAuth| E[GitHub]
C -.->|AI| F[Google Gemini]
C -.->|Images| G[Flux/Imagen]
style A fill:#FFE6CC
style B fill:#D4FFD4
style C fill:#D4E4FF
style D fill:#E8E8E8š ļø Complete Tool Suite (13 Tools)
Tool | Description | AI Features |
| Check API status and health | - |
| Get API capabilities and version | - |
| Create posts/pages with optional AI images | šØ Flux/Imagen |
| Transform ideas into complete posts | š¤ Gemini + šØ |
| List posts with filters | - |
| Search posts by text, tags, dates | - |
| Get complete post information | - |
| Update post content/metadata | - |
| Generate new AI feature image | šØ Flux/Imagen |
| Delete posts permanently | - |
| Analytics and statistics | - |
| Efficient batch operations | - |
| Find posts by date patterns | - |
š Quick Start
Prerequisites
Ghost Blog with Admin API access
Ghost Blog Smart API deployed (Instructions)
Cloudflare account (free tier works)
GitHub account for OAuth
Step 1: Deploy Ghost Blog Smart API
# Quick start with Docker
docker run -d -p 5000:5000 \
-e GHOST_ADMIN_API_KEY=your_ghost_key \
-e GHOST_API_URL=https://your-blog.com \
-e GEMINI_API_KEY=your_gemini_key \
-e REPLICATE_API_TOKEN=your_replicate_token \
--name ghost-blog-api \
betashow/ghost-blog-smart-apiStep 2: Clone and Configure
git clone https://github.com/preangelleo/ghost-blog-management-mcp.git
cd ghost-blog-management-mcp
npm installStep 3: Setup GitHub OAuth
Create a GitHub OAuth App:
Application name: Ghost Blog Management
Homepage URL:
http://localhost:8792Callback URL:
http://localhost:8792/callback
Step 4: Configure Environment
cp .dev.vars.example .dev.varsEdit .dev.vars:
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
COOKIE_ENCRYPTION_KEY=your_api_key # Must match Ghost Blog Smart APIStep 5: Configure Authorization
Choose your access control mode in .dev.vars:
Option 1: Private Mode (Recommended for production)
# Only specific GitHub users can access
AUTHORIZED_USERS=your-github-username
# For multiple users: AUTHORIZED_USERS=user1,user2,user3Option 2: Public Mode
# All authenticated GitHub users can access
AUTHORIZED_USERS=
# Or simply don't set the variableUpdate the Ghost Blog API URL in src/tools/ghost-blog-tools.ts if needed:
// Line 6: Your Ghost Blog Smart API URL
const API_BASE_URL = 'http://localhost:5000'; // or your production URLStep 6: Start Development Server
npm run dev
# Server runs at http://localhost:8792Step 7: Configure Claude Desktop
Add to Claude Desktop settings:
{
"mcpServers": {
"ghost-blog": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8792/mcp"],
"env": {}
}
}
}š” Advanced Features
šÆ Three-Level Credential System
Perfect for managing multiple blogs:
Level 1: Dynamic Selection (Highest Priority)
// Pass credentials directly in tool parameters
await ghost_create_post({
title: "My Post",
content: "Content here",
ghost_admin_api_key: "blog2_key", // Override default
ghost_api_url: "https://blog2.com" // Override default
})Level 2: Worker Configuration
# Set for entire Worker deployment
wrangler secret put CUSTOM_GHOST_ADMIN_API_KEY
wrangler secret put CUSTOM_GHOST_API_URLLevel 3: Backend Defaults
Uses Ghost Blog Smart API's configured blog - no additional setup needed.
š Posts vs Pages Support
// Create a blog post (default)
await ghost_create_post({
title: "Blog Post Title",
content: "Blog content...",
post_type: "post" // Optional, this is default
})
// Create a static page
await ghost_create_post({
title: "About Us",
content: "Company information...",
post_type: "page" // Creates a page instead of post
})šØ AI Image Generation Options
// Ultra-fast generation with Flux (3-7 seconds)
await ghost_create_post({
title: "My Post",
content: "Content",
use_generated_feature_image: true,
prefer_flux: true
})
// Professional quality with Imagen (10-15 seconds)
await ghost_create_post({
title: "My Post",
content: "Content",
use_generated_feature_image: true,
prefer_imagen: true
})š Usage Examples in Claude
Create AI-Enhanced Content
"Use ghost_smart_create to write a blog post about 'The Future of Remote Work in 2025' with a professional tone"Manage Multiple Blogs
"Get the Animagent blog credentials from my-credentials database, then use ghost_create_post to publish a new announcement there"Batch Operations
"Use ghost_advanced_search to find all posts tagged 'technology', then use ghost_batch_get_details to get their full content"Update with AI Images
"Use ghost_update_post_image on post ID abc123 to generate a new feature image using Imagen"š Production Deployment
Deploy to Cloudflare Workers
# Login to Cloudflare
wrangler login
# Create KV namespace for OAuth
wrangler kv namespace create "OAUTH_KV"
# Add the namespace_id to wrangler.jsonc
# Deploy to production
npm run deploy
# Set production secrets
wrangler secret put GITHUB_CLIENT_ID
wrangler secret put GITHUB_CLIENT_SECRET
wrangler secret put COOKIE_ENCRYPTION_KEY
# Optional: Set authorization control
# For private mode (specific users only):
wrangler secret put AUTHORIZED_USERS # Enter: "user1,user2,user3"
# For public mode (all GitHub users), don't set this or set empty
# Optional: Set custom Ghost blog (Level 2)
wrangler secret put CUSTOM_GHOST_ADMIN_API_KEY
wrangler secret put CUSTOM_GHOST_API_URLUpdate Claude Desktop for Production
{
"mcpServers": {
"ghost-blog": {
"command": "npx",
"args": ["mcp-remote", "https://your-worker.workers.dev/mcp"],
"env": {}
}
}
}š Performance Metrics
Operation | Typical Time | Max Time |
Create post (no image) | 2-5s | 10s |
Create post (with Flux) | 8-15s | 30s |
Create post (with Imagen) | 15-25s | 45s |
Smart create (AI content) | 10-20s | 60s |
Update post | 1-2s | 5s |
Search/List | <1s | 3s |
Batch operations | 2-5s | 15s |
Note: All operations have a 5-minute timeout to ensure reliability
š Security Features
GitHub OAuth 2.0: Industry-standard authentication
Flexible Access Control:
Private Mode: Restrict to specific GitHub users
Public Mode: Allow all authenticated GitHub users
Signed Cookies: HMAC-SHA256 session security
Environment Variables: No hardcoded secrets
API Key Protection: Separate keys for each service
Test Mode: Safe experimentation with
is_test: true
š Troubleshooting
Common Issues
Issue | Solution |
"Ghost Blog Smart API not reachable" | Verify Docker container is running: |
"Unauthorized access" | Check |
"API key mismatch" | Ensure |
"Tools not appearing in Claude" | Restart Claude Desktop after configuration |
"Timeout errors" | API has 5-minute default timeout, check network |
Debug Commands
# Check development logs
npm run dev
# Production logs
wrangler tail
# Test Ghost Blog Smart API
curl http://localhost:5000/health
# Test authentication
open http://localhost:8792/authorizeš¤ Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing)Open a Pull Request
š Documentation
š License
MIT License - see LICENSE file for details
š Acknowledgments
Anthropic for Model Context Protocol
Ghost for the amazing CMS platform
Cloudflare for Workers infrastructure
Google for Gemini AI and Imagen
Replicate for Flux image generation
š Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Email: me@leowang.net
Built with ā¤ļø by
Transform your content creation workflow with AI-powered Ghost CMS management
Get Started ⢠Documentation ⢠Support