Skip to main content
Glama

Ghost CMS MCP Server

NPM Version License Node.js Version TypeScript CI Status

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, Singapore

This 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-server

Add 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.json

For 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-key

Getting Your Ghost API Keys

  1. Go to your Ghost Admin panel โ†’ Integrations

  2. Click Add custom integration

  3. Copy the Admin API Key (format: id:secret)

  4. Copy the Content API Key

  5. 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:

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 tools
ghost_posts_bulk_deleteC

Bulk delete multiple posts (use with caution)

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter to select posts to delete (required)
confirmNoConfirmation required (must be true)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoData to update on matching posts (required)
filterNoFilter to select posts (required, e.g., "status:draft")

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNoPost content in HTML (alternative to mobiledoc)
slugNoURL slug for the post (auto-generated from title if not provided)
tagsNoArray of tag names, slugs, or {name, slug} objects
tiersNoArray of tier IDs when visibility is "tiers"
titleNoPost title (required)
statusNoPost status: "draft" (default) or "published"
authorsNoArray of author emails or {email} objects
featuredNoWhether post is featured (default: false)
og_titleNoOpen Graph title
mobiledocNoPost content in Mobiledoc format (JSON string)
email_onlyNoWhether post is email-only
meta_titleNoSEO meta title
visibilityNoPost visibility: "public", "members", "paid", or "tiers"
published_atNoPublication date (ISO 8601 format)
canonical_urlNoCanonical URL for SEO
twitter_titleNoTwitter card title
custom_excerptNoCustom post excerpt
og_descriptionNoOpen Graph description
custom_templateNoCustom template name
meta_descriptionNoSEO meta description
codeinjection_footNoCode injection for post footer
codeinjection_headNoCode injection for post <head>
twitter_descriptionNoTwitter card description

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPost ID to delete (required)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPost ID (UUID)
slugNoPost slug (URL-safe version of title)
fieldsNoLimit fields returned
formatsNoInclude content formats (e.g., "html,mobiledoc")
includeNoInclude related data (e.g., "tags,authors")

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoNumber of posts to return (default: 15, max: 100)
orderNoSort order (e.g., "published_at desc", "title asc")
fieldsNoLimit fields returned (e.g., "title,slug,published_at")
filterNoGhost filter string (e.g., "status:published", "tag:getting-started")
formatsNoInclude post content formats (e.g., "html,mobiledoc")
includeNoInclude related data (e.g., "tags,authors,count.posts")

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPost ID to publish (required)
send_emailNoSend email to subscribers (default: true)
published_atNoPublication date (optional, defaults to now)
email_segmentNoEmail segment filter (e.g., "status:free")

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_unpublishB

Unpublish a published post (convert to draft)

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPost ID to unpublish (required)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPost ID to update (required)
htmlNoNew content in HTML
slugNoNew URL slug
tagsNoNew array of tags (replaces existing)
titleNoNew post title
statusNoNew status
authorsNoNew array of authors (replaces existing)
featuredNoWhether post is featured
mobiledocNoNew content in Mobiledoc format
meta_titleNoNew SEO meta title
updated_atNoForce update timestamp (for conflict resolution)
visibilityNoNew visibility setting
published_atNoNew publication date
custom_excerptNoNew custom excerpt
meta_descriptionNoNew SEO meta description

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

  1. 10 tool updatesv1.0.3
    • First observedghost_posts_bulk_delete
    • First observedghost_posts_bulk_update
    • First observedghost_posts_create
    • First observedghost_posts_delete
    • First observedghost_posts_get
    • First observedghost_posts_list
    • First observedghost_posts_publish
    • First observedghost_posts_search
    • First observedghost_posts_unpublish
    • First observedghost_posts_update

TDQS

B3.2/5.0

Scored across 10 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Ten tools is well-scoped for post management, covering CRUD plus publish lifecycle and bulk operations. Each tool earns its place without redundancy.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers