Ghost CMS MCP Server
Provides comprehensive automation capabilities for Ghost CMS, including full CRUD operations for posts, pages, members, tags, newsletters, media uploads, site settings, user management, and membership tiers, with support for bulk operations and advanced search filtering.
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 CMS MCP Servercreate a new blog post about AI content automation"
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 CMS MCP Server
A comprehensive Model Context Protocol (MCP) server for Ghost CMS that provides full automation capabilities for Ghost blogs through AI assistants like Claude Desktop, Cursor, and other MCP-compatible clients.
Developed by Sivasubramanian Ramanathan | hello@sivasub.com
Product Owner | Innovation Catalyst | FinTech Leader previously at Bank for International Settlements Innovation Hub, SingaporeThis project demonstrates technical innovation and product thinking skills, bridging the gap between complex technology (Model Context Protocol) and practical business applications (content management automation). Built as a showcase of cross-functional capabilities in product development, from conception to delivery.
โจ Key Features
๐ Complete Ghost CMS Integration - Full CRUD operations for posts, pages, members, and more
๐ Enterprise Security - JWT authentication with proper error handling and validation
โก Smart Performance - Built-in rate limiting, caching, and queue management
๐ฏ Bulk Operations - Efficient mass content updates and member management
๐ Production Ready - Comprehensive testing, CI/CD pipeline, and NPM distribution
๐ค AI-First Design - Native integration with Claude, Cursor, and MCP-compatible tools
Related MCP server: Ghost MCP
๐ฆ Quick Installation
For Claude Desktop
macOS/Linux:
npm install -g ghost-cms-mcp-serverAdd to your Claude Desktop configuration:
{
"mcpServers": {
"ghost-cms": {
"command": "npx",
"args": ["-y", "ghost-cms-mcp-server"],
"env": {
"GHOST_URL": "https://your-site.ghost.io",
"GHOST_ADMIN_API_KEY": "your-admin-key",
"GHOST_CONTENT_API_KEY": "your-content-key"
}
}
}
}Windows (PowerShell):
npm install -g ghost-cms-mcp-server
# Add similar configuration to %APPDATA%\Claude\claude_desktop_config.jsonFor Claude Code CLI
claude mcp add ghost-cms -- npx -y ghost-cms-mcp-serverโ๏ธ Configuration
Required Environment Variables
GHOST_URL=https://your-site.ghost.io
GHOST_ADMIN_API_KEY=your-admin-key-id:your-admin-secret
GHOST_CONTENT_API_KEY=your-content-api-keyGetting Your Ghost API Keys
Go to your Ghost Admin panel โ Integrations
Click Add custom integration
Copy the Admin API Key (format:
id:secret)Copy the Content API Key
Use your Ghost site URL
๐ ๏ธ Available Operations
Content Management
Posts: Create, read, update, delete, publish, search, bulk operations
Pages: Full CRUD operations for static pages
Media: Upload images and files directly through the MCP interface
Audience Management
Members: Create, update, import/export subscriber lists
Tags: Organize content with custom tagging systems
Newsletters: Manage email campaigns and subscriber segments
Site Administration
Settings: Update site configuration and preferences
Users: Manage authors and admin accounts
Tiers: Configure membership and subscription options
Advanced Features
Bulk Operations: Mass update or delete content with safety confirmations
Search & Filtering: Advanced query capabilities with Ghost's filter syntax
Real-time Sync: Immediate updates with conflict resolution
๐ Usage Examples
Create a Blog Post
// Through your AI assistant using the ghost_posts_create tool
{
"title": "Product Strategy in FinTech Innovation",
"html": "<p>Insights from working at the BIS Innovation Hub...</p>",
"status": "published",
"tags": ["fintech", "product-management", "innovation"],
"meta_title": "FinTech Product Strategy Guide",
"featured": true
}Bulk Content Management
// Update multiple posts at once
{
"filter": "status:draft+created_at:>2024-01-01",
"data": {
"status": "published",
"tags": ["updated-content"]
}
}Member Management
// Add new newsletter subscribers
{
"email": "subscriber@example.com",
"name": "New Subscriber",
"labels": ["newsletter", "fintech-insights"],
"subscribed": true
}๐งช Technical Implementation
Architecture Highlights
TypeScript: Full type safety with strict mode enabled
Test-Driven Development: Comprehensive Jest test suite with >80% coverage
Error Handling: Proper error boundaries with detailed messaging
Performance: Request queuing, rate limiting, and intelligent caching
Security: API key protection and input validation
Development Workflow
# Local development
git clone https://github.com/siva-sub/ghost-cms-mcp-server.git
cd ghost-cms-mcp-server
npm install
npm run dev
# Testing
npm test # Run all tests
npm run test:coverage # Generate coverage reports
npm run lint # Code quality checks๐ฏ Product Innovation Showcase
This project demonstrates key product development skills:
๐ Problem Identification: Recognized the gap between powerful Ghost CMS APIs and AI assistant capabilities
๐ Solution Design: Created a bridge that makes content management conversational and intuitive
โ๏ธ Technical Trade-offs: Balanced feature completeness with performance and security considerations
๐ User Experience: Designed intuitive tool interfaces that work naturally with AI conversation flows
๐ Iterative Development: Built with modularity to enable rapid feature expansion and adaptation
๐จโ๐ผ About the Creator
Sivasubramanian Ramanathan is a Product Owner and Innovation Catalyst, previously at the Bank for International Settlements Innovation Hub in Singapore, specializing in FinTech innovation, CBDC research, and regulatory technology solutions.
Professional Focus Areas:
Product Strategy: End-to-end product management from conception to delivery
FinTech Innovation: CBDC design, digital finance, and regulatory technology
Stakeholder Management: Coordinating with 19+ central banks and regulatory authorities
Technical Leadership: Bridging business requirements with engineering implementation
Certifications:
PMPยฎ - Project Management Professional
PSM II - Professional Scrum Master II
PSPO II - Professional Scrum Product Owner II
Connect:
๐ Website: sivasub.com
๐ผ GitHub: @siva-sub
๐ง Email: hello@sivasub.com
๐ฑ LinkedIn: LinkedIn Profile
๐ Location: Singapore
Recent Publications:
Project Viridis: A Blueprint for Managing Climate-Related Financial Risk (BIS Innovation Hub, 2024)
GenAI in Action: Transforming Data Use in SupTech (Irving Fisher Committee, 2025)
Novel Approaches to Combat Money Laundering (OMFIF Sustainable Policy Institute, 2024)
๐ License
MIT License - feel free to use this project as inspiration for your own technical innovations.
Built by a Product Owner who codes โ demonstrating the intersection of business strategy and technical execution.
โญ Star this repository to show your support for product-driven development!
Available Tools
10 toolsghost_posts_bulk_deleteC
Bulk delete multiple posts (use with caution)
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter to select posts to delete (required) | |
| confirm | No | Confirmation required (must be true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing: it does not state whether deletion is permanent or recoverable, what happens to unmatched filters, or any auth/rate-limit constraints. '(use with caution)' gestures at destructiveness but conveys no concrete behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that front-loads the action and resource with no filler. The parenthetical earns marginal value, so it is efficient though not maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive bulk mutation with no annotations and no output schema, yet the description omits irreversibility, filter semantics, partial-failure behavior, and return information. For a high-blast-radius tool, the definition is materially under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents that filter selects posts and confirm must be true. The description adds no syntax, format, or filter-expression detail beyond that, which is the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (bulk delete posts) and the word 'bulk' implicitly distinguishes it from the single-item sibling ghost_posts_delete. However, it never names the single-delete alternative, so the differentiation is left to inference rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the parenthetical '(use with caution)', which is a warning rather than a when-to-use rule. It does not say when to prefer bulk_delete over ghost_posts_delete for a single post, nor what prerequisites (permissions, filter scope) apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_bulk_updateC
Bulk update multiple posts
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Data to update on matching posts (required) | |
| filter | No | Filter to select posts (required, e.g., "status:draft") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutation tool. It omits critical traits: whether updates merge or replace fields (e.g., does 'tags' append or overwrite?), what happens to non-matching posts, partial-failure behavior, and permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single four-word phrase is maximally concise and front-loaded, but it is under-specified rather than efficient; nothing beyond the title is communicated. Brevity here comes at the cost of usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk mutation with a nested object parameter, no annotations, and no output schema, the description should cover merge semantics, failure behavior, and result reporting. None of that is present, leaving significant gaps an agent needs to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'data' and 'filter' documented including a filter syntax example ('status:draft'), so the baseline is 3. The description adds no meaning beyond the schema โ it never mentions the filter-based selection model or which fields 'data' accepts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with the 'bulk' scope qualifier, which distinguishes it from the single-record sibling ghost_posts_update. It does not, however, say which fields can be updated or how posts are selected, so the differentiation is scope-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to alternatives such as ghost_posts_update (single) or ghost_posts_bulk_delete. The agent must infer that 'bulk' means many posts matched by the filter, which the description never states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_createC
Create a new post
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Post content in HTML (alternative to mobiledoc) | |
| slug | No | URL slug for the post (auto-generated from title if not provided) | |
| tags | No | Array of tag names, slugs, or {name, slug} objects | |
| tiers | No | Array of tier IDs when visibility is "tiers" | |
| title | No | Post title (required) | |
| status | No | Post status: "draft" (default) or "published" | |
| authors | No | Array of author emails or {email} objects | |
| featured | No | Whether post is featured (default: false) | |
| og_title | No | Open Graph title | |
| mobiledoc | No | Post content in Mobiledoc format (JSON string) | |
| email_only | No | Whether post is email-only | |
| meta_title | No | SEO meta title | |
| visibility | No | Post visibility: "public", "members", "paid", or "tiers" | |
| published_at | No | Publication date (ISO 8601 format) | |
| canonical_url | No | Canonical URL for SEO | |
| twitter_title | No | Twitter card title | |
| custom_excerpt | No | Custom post excerpt | |
| og_description | No | Open Graph description | |
| custom_template | No | Custom template name | |
| meta_description | No | SEO meta description | |
| codeinjection_foot | No | Code injection for post footer | |
| codeinjection_head | No | Code injection for post <head> | |
| twitter_description | No | Twitter card description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and discloses essentially nothing: no auth/permission requirements, no mention that title is required despite the schema marking zero required params, no side effects, and no clarification of the create-vs-publish relationship. Only the mutation nature is inferable from the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and waste-free, which is structurally fine, but for a 23-parameter creation tool it is under-specified rather than genuinely concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 23-parameter write tool with no annotations and no output schema needs far more than four words. Nothing about required fields, defaults, publishing behavior, or the returned resource is conveyed, leaving the agent to reconstruct intent from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 23 parameters are already documented in the schema (defaults, formats, enums). The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Create a new post'), which is unambiguous about what the tool does. It does not, however, differentiate this tool from siblings like ghost_posts_publish or ghost_posts_update, nor explain how creation interacts with the publish lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, despite a dense sibling set (publish, unpublish, update, bulk_update). The agent gets no signal about whether creating with status='published' is preferred over create-then-publish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_deleteB
Delete a post permanently
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Post ID to delete (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'Permanently' is a genuine behavioral disclosure of irreversibility, which is the most important trait here. However, it omits authorization requirements, error behavior for nonexistent IDs, and whether deletion cascades.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One four-word sentence that front-loads the verb and resource and includes only the one qualifier that matters. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema delete tool, the description covers the essential fact (irreversibility). It could be stronger by routing the agent to bulk_delete for multi-post cases, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'id' parameter, so the schema already documents the argument fully. The description adds no format, prefix, or lookup detail beyond what the schema states, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('a post'), and the qualifier 'permanently' signals this is not a soft delete. It is clearly separable from ghost_posts_get/list/create/update, though it never explicitly contrasts with the sibling ghost_posts_bulk_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus ghost_posts_bulk_delete or ghost_posts_unpublish. The agent must infer from names alone that this is the single-post irreversible path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_getC
Get a single post by ID or slug
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Post ID (UUID) | |
| slug | No | Post slug (URL-safe version of title) | |
| fields | No | Limit fields returned | |
| formats | No | Include content formats (e.g., "html,mobiledoc") | |
| include | No | Include related data (e.g., "tags,authors") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose that this is a read-only lookup, what happens if both id and slug are omitted (0 required params), or whether a missing post errors or returns null.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity leaves required behavioral detail unstated rather than being a model of concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with fully documented parameters this is close to adequate, but with no annotations and no output schema, the description should at minimum say what is returned or how missing posts are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (id, slug, fields, formats, include) are already documented in the schema with examples. The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a single post') and narrows the lookup key to ID or slug, which distinguishes it from ghost_posts_list and ghost_posts_search. It does not explicitly name those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of ghost_posts_list or ghost_posts_search, nor any note about behavior when neither id nor slug resolves. Usage is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_listC
List posts with optional filters. Returns posts with metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| limit | No | Number of posts to return (default: 15, max: 100) | |
| order | No | Sort order (e.g., "published_at desc", "title asc") | |
| fields | No | Limit fields returned (e.g., "title,slug,published_at") | |
| filter | No | Ghost filter string (e.g., "status:published", "tag:getting-started") | |
| formats | No | Include post content formats (e.g., "html,mobiledoc") | |
| include | No | Include related data (e.g., "tags,authors,count.posts") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it only states 'Returns posts with metadata.' It omits pagination semantics, default ordering, how the filter/fields/include strings combine, and whether this is a safe read. 'Returns posts with metadata' is too thin for a 7-parameter listing tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding; the verb and scope come first. It is efficient, though it is arguably terse rather than rightly sized for a 7-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, seven parameters, and nine siblings including a near-duplicate search tool, the description should clarify list-vs-search behavior and return shape. As written, key selection and invocation context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has an example-bearing description (order, fields, filter, include, formats), so the schema already does the heavy lifting. The description adds only 'optional filters,' which restates rather than extends the schema, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List posts') and notes optional filtering, which is enough to identify the operation. However, it never distinguishes itself from the sibling ghost_posts_search, which overlaps heavily with listing plus filtering, so the agent must guess which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with optional filters' implies a use case but gives no when-to-use, prerequisites, or guidance on choosing between this and ghost_posts_search or the bulk siblings. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_publishC
Publish a draft post
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Post ID to publish (required) | |
| send_email | No | Send email to subscribers (default: true) | |
| published_at | No | Publication date (optional, defaults to now) | |
| email_segment | No | Email segment filter (e.g., "status:free") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It omits that publishing is a state-changing, likely irreversible action, that it may email subscribers by default, and what preconditions apply. For a mutation tool with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, but it is arguably under-specified rather than genuinely concise given the tool's side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and four parameters controlling an irreversible publish plus email dispatch, the description is too thin to let an agent invoke it confidently. Key behavioral context about side effects and preconditions is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the send_email default and published_at behavior. The description adds nothing beyond that, which is the baseline expectation when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (publish) and resource (draft post), and the inverse sibling ghost_posts_unpublish makes the scope reasonably clear. It doesn't explicitly contrast with siblings like ghost_posts_update, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus ghost_posts_update or ghost_posts_unpublish, no prerequisites (e.g., post must be a draft), and no mention of the subscriber-email side effect that would affect a caller's decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_searchC
Search posts by query string
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return | |
| query | No | Search query (required) | |
| include | No | Include related data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. It does not state that this is a read-only operation, whether results are paginated, how 'include' changes the response shape, or what the limit default is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the key noun front-loaded and no filler. It is efficient, though its brevity edges toward under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read tool with full schema coverage and no output schema, the description is minimally viable but leaves behavioral questions open. An agent can call it, but cannot predict pagination, result shape, or the effect of 'include'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema and the baseline is 3. The description adds only 'by query string', which restates the query parameter without new syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') plus resource ('posts') and the mechanism ('by query string'), which is enough for an agent to distinguish it from ghost_posts_get or ghost_posts_create. It never explicitly contrasts with ghost_posts_list, the closest sibling, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use search versus ghost_posts_list, no prerequisites, no note on whether query is required despite the schema marking it so. The agent must infer the selection condition from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_unpublishB
Unpublish a published post (convert to draft)
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Post ID to unpublish (required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states the mutation (published -> draft) but omits whether the change is reversible, what permissions are required, and any side effects such as breaking live URLs or losing scheduled state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the core action and its effect are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter state-change tool with no output schema, the essential action is conveyed, but the absence of annotations means the description should say more about permissions, reversibility, and side effects. It is adequate but leaves real gaps for a mutation operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'id' parameter, so the schema already documents its meaning and required-ness. The description adds nothing beyond that, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (unpublish) and resource (post), and the parenthetical '(convert to draft)' disambiguates the exact semantic effect. An agent can distinguish this from the sibling ghost_posts_publish without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no mention of the alternative (ghost_posts_publish) or of what happens if the post is already a draft. Usage must be inferred from the word 'published'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ghost_posts_updateC
Update an existing post
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Post ID to update (required) | |
| html | No | New content in HTML | |
| slug | No | New URL slug | |
| tags | No | New array of tags (replaces existing) | |
| title | No | New post title | |
| status | No | New status | |
| authors | No | New array of authors (replaces existing) | |
| featured | No | Whether post is featured | |
| mobiledoc | No | New content in Mobiledoc format | |
| meta_title | No | New SEO meta title | |
| updated_at | No | Force update timestamp (for conflict resolution) | |
| visibility | No | New visibility setting | |
| published_at | No | New publication date | |
| custom_excerpt | No | New custom excerpt | |
| meta_description | No | New SEO meta description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses almost nothing: it does not state that partial updates are allowed, that tags/authors replace existing arrays, that updates may affect publication state, or what permissions are required. The only hint of behavior ('existing') is a restatement of the mutation semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no waste, but for a 15-parameter mutation tool this level of brevity is under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters, zero annotations, no output schema, and a dense sibling set, the description is far too thin to be complete. It leaves update semantics, permissions, and differentiation from bulk/publish variants entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 15 parameters is individually documented (including enum values and 'replaces existing' semantics), so the schema does the heavy lifting. The description adds no meaning beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource ('Update an existing post') is clear, but it does nothing to distinguish this tool from siblings like ghost_posts_bulk_update, ghost_posts_publish, or ghost_posts_unpublish, which are all mutations of the same resource. An agent cannot tell from the description which mutation path applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no reference to the many sibling mutation tools (bulk_update, publish, unpublish). The agent must infer that this is the single-post edit path entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.3- First observed
ghost_posts_bulk_delete - First observed
ghost_posts_bulk_update - First observed
ghost_posts_create - First observed
ghost_posts_delete - First observed
ghost_posts_get - First observed
ghost_posts_list - First observed
ghost_posts_publish - First observed
ghost_posts_search - First observed
ghost_posts_unpublish - First observed
ghost_posts_update
TDQS
Scored across 10 tools
Most tools map to distinct actions on posts (list, get, create, update, delete, publish, unpublish, bulk variants). The only minor overlap is between list_posts and search_posts, since both retrieve posts and list supports filters. Overall boundaries are clear enough for reliable selection.
All tools follow a strict ghost_posts_<verb> snake_case pattern. The verbs are conventional and predictable, with bulk operations clearly marked. No naming inconsistencies.
Ten tools is well-scoped for post management, covering CRUD plus publish lifecycle and bulk operations. Each tool earns its place without redundancy.
Post lifecycle coverage is excellent: list, get, create, update, delete, publish, unpublish, search, and bulk operations. However, as a Ghost CMS server it omits adjacent resources like pages, tags, authors, and media, which limits broader CMS workflows.
Maintenance
Related MCP Connectors
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
Create, manage, publish, and analyze Inblog content through AI agents.
Publish to self-hosted WordPress from AI agents: markdown, images, SEO, and Notion sync.
Read, write, translate and sync WordPress and Webflow blog articles from Claude.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Ghost CMS instances through the Admin API, supporting content operations (posts, tags), member management, newsletters, tiers, offers, and webhooks through natural language interactions.10 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Ghost CMS content including posts, members, users, tags, tiers, offers, newsletters, invites, roles, and webhooks via the Ghost Admin API.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Ghost CMS sites through both Content (read-only) and Admin (read/write) APIs, allowing natural language management of posts, pages, tags, and settings.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables to manage Ghost CMS instance using LLM interfaces. Supports comprehensive CRUD operations on posts, members, newsletters, offers, tags, tiers, users, and webhooks.10 npmMIT