ghost-content-mcp
Provides read-only tools for searching, summarizing, and retrieving posts, pages, and tags from a Ghost site via its Content API.
Optional companion that indexes READMEs of repositories linked in Ghost posts, surfacing repo content alongside articles.
Click on "Deploy 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., "@ghost-content-mcpWhat are the most recent posts about productivity?"
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-content-mcp
A read-only MCP server that turns any Ghost site into a semantic content-discovery source for AI assistants.
Point it at a Ghost site (URL + Content API key) and it exposes tools an LLM can call to search, summarize, and read that site's posts, pages, and tags β ranked by a hybrid of lexical (BM25) and local semantic embeddings. It's designed to power visitor-facing chatbots and RAG, not to manage the blog.
How this differs from other Ghost MCP servers. Most existing ones wrap the Admin API for content management (create/edit/delete posts, members, newsletters) β tools for the site owner. This one is the opposite: public, read-only, retrieval-focused. Its job is to answer "what does this site say about X?" well.
Features
π Hybrid search β Okapi BM25 (lexical) +
all-MiniLM-L6-v2embeddings (semantic), so natural-language questions match even without shared keywords. Runs fully locally (model bundled in the image, no external inference calls).π§ 9 tools β
search_all,search_posts,get_related_posts,get_site_summary,get_post,get_page,list_posts,list_pages,list_tags.βοΈ Zero-config identity β auto-detects the site's name/description/URL from Ghost's own
/settingsendpoint (override with env vars if you want).π Self-updating β in-memory index with a ~10-min TTL refresh; new content appears automatically. Optional internal
POST /refreshfor webhook-driven instant updates.π Optional GitHub companions β if a post links a repo you own, its README can be indexed and surfaced next to the article (off by default).
π
#noindexβ tag any post/page#noindexto keep it out of discovery search (still fetchable by direct slug).
Related MCP server: Knowledge Base MCP Server (Qdrant)
Quick start
cp .env.example .env # set GHOST_URL + GHOST_CONTENT_API_KEY
npm install
npm run build
npm startOr with Docker:
docker build -t ghost-content-mcp .
docker run -p 3000:3000 --env-file .env ghost-content-mcpOr with Docker Compose (see docker-compose.yml β includes a memory
cap and healthcheck):
cp .env.example .env # set GHOST_URL + GHOST_CONTENT_API_KEY
docker compose up -dThe MCP endpoint is POST /mcp (Streamable HTTP, stateless JSON). GET /health reports index
status.
Getting a Ghost Content API key
Ghost Admin β Settings β Integrations β Add custom integration β copy the Content API key. (Content keys are read-only and safe to use for a public endpoint.)
Connecting a client
Any MCP client that speaks Streamable HTTP. Example (Claude Desktop-style config):
{
"mcpServers": {
"ghost-content": { "url": "https://your-host/mcp" }
}
}Configuration
Env var | Required | Default | Notes |
| β |
| Your Ghost site URL |
| β | β | Content API key (read-only) |
|
| HTTP port | |
| from Ghost | Identity overrides | |
| β (off) | Comma-separated owner allowlist to enable repo companions | |
| β | Raises GitHub API rate limits | |
|
| Auto-refresh interval | |
| β | If set, | |
|
| Sentence-embedding model | |
|
| Lower = lower peak RAM during index build |
Tools
Tool | Purpose |
| Search posts + pages (+ repos) by keyword/question, ranked by relevance. Start here. |
| Same ranking, posts only. |
| "More like this" for a given post slug. |
| One-call overview: what the site is, topics, counts, recent posts, pages. |
| Full content as Markdown by slug. |
| Paginated listings (filter by tag/date, sort). |
| All public tags with post counts. |
Relevance is 0.5Β·BM25 + 0.5Β·cosine(embeddings), range 0β1. As a rule of thumb: β₯0.5 is a
strong match, 0.3β0.5 weak, <0.3 noise.
How updates work
The index rebuilds automatically every ~10 minutes (TTL); publishing in Ghost is enough. For
instant updates, wire a Ghost "post published/updated" webhook to the internal POST /refresh
(optionally guarded by REFRESH_TOKEN).
Notes
Requires glibc (Node
node:22-slim, not Alpine) β onnxruntime-node's native binding doesn't load on musl.The embedding model (~90 MB) is downloaded at image build time and bundled, so there are no network calls at runtime.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Read-only MCP server for Flamel.ai's public content: company overview, blog, case studies, FAQs.
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that gives AI agents the web as compact, ranked, verified evidence β no API keys, no cloud retrieval, all models local.131MIT
- FlicenseNot gradedqualityBmaintenanceRead-only MCP server with hybrid search combining dense semantic and sparse keyword retrieval via Qdrant, enabling document querying and fetching for ChatGPT Deep Research.-
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for accessing GitBook content, including spaces, pages, and search, through AI assistants.244MIT
- AlicenseNot gradedqualityAmaintenanceRead-only local-first MCP server enabling AI assistants to semantically search private Markdown, PDF, and Tika-backed knowledge bases without data upload.45MIT