Ghost MCP Server

Ghost MCP Server

通过 LLM 接口实现与 Ghost CMS 的交互,通过 JWT 认证提供安全访问,用于管理文章、用户和新闻通讯,并提供详细的输出和错误处理。

Category
访问服务器

Tools

batchly_update_post

Update multiple blog posts that match the filter criteria. Args: filter_criteria: Dictionary containing fields to filter posts by, example: { "status": "draft", "tag": "news", "featured": True } Supported filter fields: - status: Post status (draft, published, etc) - tag: Filter by tag name - author: Filter by author name - featured: Boolean to filter featured posts - visibility: Post visibility (public, members, paid) update_data: Dictionary containing the fields to update. The updated_at field is required. All fields supported by the Ghost API can be updated: - slug: Unique URL slug for the post - title: The title of the post - lexical: JSON string representing the post content in lexical format - html: HTML version of the post content - comment_id: Identifier for the comment thread - feature_image: URL to the post's feature image - feature_image_alt: Alternate text for the feature image - feature_image_caption: Caption for the feature image - featured: Boolean flag indicating if the post is featured - status: The publication status (e.g., published, draft) - visibility: Visibility setting (e.g., public, private) - created_at: Timestamp when the post was created - updated_at: Timestamp when the post was last updated (REQUIRED) - published_at: Timestamp when the post was published - custom_excerpt: Custom excerpt text for the post - codeinjection_head: Code to be injected into the head section - codeinjection_foot: Code to be injected into the footer section - custom_template: Custom template assigned to the post - canonical_url: The canonical URL for SEO purposes - tags: List of tag objects associated with the post - authors: List of author objects for the post - primary_author: The primary author object - primary_tag: The primary tag object - og_image: Open Graph image URL for social sharing - og_title: Open Graph title for social sharing - og_description: Open Graph description for social sharing - twitter_image: Twitter-specific image URL - twitter_title: Twitter-specific title - twitter_description: Twitter-specific description - meta_title: Meta title for SEO - meta_description: Meta description for SEO - email_only: Boolean flag indicating if the post is for email distribution only - newsletter: Dictionary containing newsletter configuration details - email: Dictionary containing email details related to the post Example: { "updated_at": "2025-02-11T22:54:40.000Z", "status": "published", "featured": True, "tags": [{"name": "news"}, {"name": "featured"}], "meta_title": "My Updated Title", "og_description": "New social sharing description" } ctx: Optional context for logging Returns: Formatted string containing summary of updated posts Raises: GhostError: If there is an error accessing the Ghost API or missing required fields

browse_tags

Get the list of tags from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of tags per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing tag information Raises: GhostError: If there is an error accessing the Ghost API

create_invite

Create a staff user invite in Ghost. Args: role_id: ID of the role to assign to the invited user (required) email: Email address to send the invite to (required) ctx: Optional context for logging Returns: String representation of the created invite Raises: GhostError: If the Ghost API request fails ValueError: If required parameters are missing or invalid

create_member

Create a new member in Ghost. Args: email: Member's email address (required) name: Member's name (optional) note: Notes about the member (optional) labels: List of labels to apply to the member. Each label should be a dict with 'name' and 'slug' (optional) newsletter_ids: List of newsletter IDs to subscribe the member to (optional) ctx: Optional context for logging Returns: String representation of the created member Raises: GhostError: If the Ghost API request fails ValueError: If required parameters are missing or invalid

list_posts

Get the list of posts from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of posts per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing post information Raises: GhostError: If there is an error accessing the Ghost API

create_newsletter

Create a new newsletter. Args: name: Name of the newsletter (required) description: Newsletter description status: Newsletter status ("active" or "archived") subscribe_on_signup: Whether to subscribe new members automatically opt_in_existing: Whether to subscribe existing members sender_reply_to: Reply-to setting ("newsletter" or "support") show_header_icon: Whether to show header icon show_header_title: Whether to show header title show_header_name: Whether to show header name show_feature_image: Whether to show feature image title_font_category: Font category for titles title_alignment: Title alignment body_font_category: Font category for body text show_badge: Whether to show badge ctx: Optional context for logging Returns: Formatted string containing the created newsletter details

create_offer

Create a new offer in Ghost. Args: name: Internal name for the offer (required) code: Shortcode for the offer (required) type: Either 'percent' or 'fixed' (required) cadence: Either 'month' or 'year' (required) amount: Discount amount - percentage or fixed value (required) tier_id: ID of the tier to apply offer to (required) duration: Either 'once', 'forever' or 'repeating' (required) display_title: Name displayed in the offer window (optional) display_description: Text displayed in the offer window (optional) currency: Required when type is 'fixed', must match tier's currency (optional) duration_in_months: Required when duration is 'repeating' (optional) ctx: Optional context for logging Returns: String representation of the created offer Raises: GhostError: If the Ghost API request fails ValueError: If required parameters are missing or invalid

create_post

Create a new blog post. Args: post_data: Dictionary containing post data with required fields: - title: The title of the post - lexical: The lexical content as a JSON string Additional optional fields: - status: Post status ('draft' or 'published', defaults to 'draft') - tags: List of tags - authors: List of authors - feature_image: URL of featured image Example: { "title": "My test post", "lexical": "{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Hello World","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}" "status": "draft", } ctx: Optional context for logging Returns: Formatted string containing the created post details Raises: GhostError: If there is an error accessing the Ghost API or invalid post data

create_tag

Create a new tag. Args: tag_data: Dictionary containing tag data with required fields: - name: The name of the tag Additional optional fields: - slug: URL slug for the tag - description: Description of the tag - feature_image: URL to the tag's feature image - visibility: Tag visibility ('public' or 'internal') - accent_color: CSS color hex value for the tag - meta_title: Meta title for SEO - meta_description: Meta description for SEO - canonical_url: The canonical URL - og_image: Open Graph image URL - og_title: Open Graph title - og_description: Open Graph description - twitter_image: Twitter card image URL - twitter_title: Twitter card title - twitter_description: Twitter card description - codeinjection_head: Code to inject in header - codeinjection_foot: Code to inject in footer Example: { "name": "Technology", "description": "Posts about technology", "visibility": "public" } ctx: Optional context for logging Returns: Formatted string containing the created tag details Raises: GhostError: If there is an error accessing the Ghost API or invalid tag data

create_tier

Create a new tier in Ghost. Args: name: Name of the tier (required) monthly_price: Optional monthly price in cents (e.g. 500 for $5.00) yearly_price: Optional yearly price in cents (e.g. 5000 for $50.00) description: Optional description of the tier benefits: Optional list of benefits for the tier welcome_page_url: Optional URL for the welcome page visibility: Visibility of tier, either "public" or "none" (default: "public") currency: Currency for prices (default: "usd") ctx: Optional context for logging Returns: String representation of the created tier Raises: GhostError: If the Ghost API request fails

list_roles

Get the list of roles from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of roles per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing role information

create_webhook

Create a new webhook in Ghost. Args: event: Event to trigger the webhook (required) target_url: URL to send the webhook to (required) integration_id: ID of the integration (optional - only needed for user authentication) name: Name of the webhook (optional) secret: Secret for the webhook (optional) api_version: API version for the webhook (optional) ctx: Optional context for logging Returns: String representation of the created webhook Raises: GhostError: If the Ghost API request fails ValueError: If required parameters are missing or invalid

delete_post

Delete a blog post. Args: post_id: The ID of the post to delete ctx: Optional context for logging Returns: Success message if post was deleted Raises: GhostError: If there is an error accessing the Ghost API or the post doesn't exist

delete_tag

Delete a tag. Args: tag_id: The ID of the tag to delete ctx: Optional context for logging Returns: Success message if tag was deleted Raises: GhostError: If there is an error accessing the Ghost API or the tag doesn't exist

delete_user

Delete a user from Ghost. Args: user_id: ID of the user to delete (required) ctx: Optional context for logging Returns: Success message if deletion was successful Raises: GhostError: If the Ghost API request fails or if attempting to delete the Owner ValueError: If user_id is not provided

delete_webhook

Delete a webhook from Ghost. Args: webhook_id: ID of the webhook to delete (required) ctx: Optional context for logging Returns: Success message if deletion was successful Raises: GhostError: If the Ghost API request fails ValueError: If webhook_id is not provided

get_auth_headers

Get authenticated headers for Ghost API requests. Args: staff_api_key: API key in 'id:secret' format api_version: Ghost API version to use (default: v5.109) Returns: Dictionary of request headers including authorization and version Example: >>> headers = await get_auth_headers("1234:abcd5678") >>> headers { 'Authorization': 'Ghost eyJ0eXAiOiJKV1...', 'Accept-Version': 'v5.109' }

get_close_matches

Use SequenceMatcher to return list of the best "good enough" matches. word is a sequence for which close matches are desired (typically a string). possibilities is a list of sequences against which to match word (typically a list of strings). Optional arg n (default 3) is the maximum number of close matches to return. n must be > 0. Optional arg cutoff (default 0.6) is a float in [0, 1]. Possibilities that don't score at least that similar to word are ignored. The best (no more than n) matches among the possibilities are returned in a list, sorted by similarity score, most similar first. >>> get_close_matches("appel", ["ape", "apple", "peach", "puppy"]) ['apple', 'ape'] >>> import keyword as _keyword >>> get_close_matches("wheel", _keyword.kwlist) ['while'] >>> get_close_matches("Apple", _keyword.kwlist) [] >>> get_close_matches("accept", _keyword.kwlist) ['except']

import_module

Import a module. The 'package' argument is required when performing a relative import. It specifies the package to use as the anchor point from which to resolve the relative import to an absolute import.

list_members

Get the list of members from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of members per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing member information

list_newsletters

Get the list of newsletters from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of newsletters per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing newsletter information

list_offers

Get the list of offers from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of offers per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing offer information

list_tiers

Get the list of tiers from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of tiers per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing tier information

list_users

Get the list of users from your Ghost blog. Args: format: Output format - either "text" or "json" (default: "text") page: Page number for pagination (default: 1) limit: Number of users per page (default: 15) ctx: Optional context for logging Returns: Formatted string containing user information

make_ghost_request

Make an authenticated request to the Ghost API. Args: endpoint: API endpoint to call (e.g. "posts" or "users") headers: Request headers from get_auth_headers() ctx: Optional context for logging (not used for resources) is_resource: Whether this request is for a resource http_method: HTTP method to use (GET, POST, PUT, or DELETE) json_data: Optional JSON data for POST/PUT requests Returns: Parsed JSON response from the Ghost API Raises: GhostError: For any Ghost API errors including: - Network connectivity issues - Invalid authentication - Rate limiting - Server errors ValueError: For invalid HTTP methods Example: >>> headers = await get_auth_headers("1234:abcd5678") >>> response = await make_ghost_request( ... "posts", ... headers, ... http_method=GET ... )

read_member

Get the details of a specific member. Args: member_id: The ID of the member to retrieve ctx: Optional context for logging Returns: Formatted string containing the member details

read_newsletter

Get the details of a specific newsletter. Args: newsletter_id: The ID of the newsletter to retrieve ctx: Optional context for logging Returns: Formatted string containing the newsletter details

read_offer

Get the details of a specific offer. Args: offer_id: The ID of the offer to retrieve ctx: Optional context for logging Returns: Formatted string containing the offer details

read_post

Get the full content and metadata of a specific blog post. Args: post_id: The ID of the post to retrieve ctx: Optional context for logging Returns: Formatted string containing all post details including: - Basic info (title, slug, status, etc) - Content in both HTML and Lexical formats - Feature image details - Meta fields (SEO, Open Graph, Twitter) - Authors and tags - Email settings - Timestamps Raises: GhostError: If there is an error accessing the Ghost API

read_tag

Get the full metadata of a specific tag. Args: tag_id: The ID of the tag to retrieve ctx: Optional context for logging Returns: Formatted string containing all tag details Raises: GhostError: If there is an error accessing the Ghost API

read_tier

Get the details of a specific tier. Args: tier_id: The ID of the tier to retrieve ctx: Optional context for logging Returns: Formatted string containing the tier details

read_user

Get the details of a specific user. Args: user_id: The ID of the user to retrieve ctx: Optional context for logging Returns: Formatted string containing the user details

search_posts_by_title

Search for posts by title. Args: query: The title or part of the title to search for exact: If True, only return exact matches (default: False) ctx: Optional context for logging Returns: Formatted string containing matching post information Raises: GhostError: If there is an error accessing the Ghost API

update_member

Update an existing member in Ghost. Args: member_id: ID of the member to update (required) email: New email address for the member (optional) name: New name for the member (optional) note: New notes about the member (optional) labels: New list of labels. Each label should be a dict with 'name' and 'slug' (optional) newsletter_ids: New list of newsletter IDs to subscribe the member to (optional) ctx: Optional context for logging Returns: String representation of the updated member Raises: GhostError: If the Ghost API request fails ValueError: If no fields to update are provided

update_newsletter

Update an existing newsletter. Args: newsletter_id: ID of the newsletter to update (required) name: New newsletter name description: New newsletter description sender_name: Name shown in email clients sender_email: Email address newsletters are sent from sender_reply_to: Reply-to setting ("newsletter" or "support") status: Newsletter status ("active" or "archived") subscribe_on_signup: Whether to subscribe new members automatically sort_order: Order in lists header_image: URL of header image show_header_icon: Whether to show header icon show_header_title: Whether to show header title show_header_name: Whether to show header name title_font_category: Font category for titles title_alignment: Title alignment show_feature_image: Whether to show feature image body_font_category: Font category for body text footer_content: Custom footer content show_badge: Whether to show badge ctx: Optional context for logging Returns: Formatted string containing the updated newsletter details

update_offer

Update an existing offer in Ghost. Args: offer_id: ID of the offer to update (required) name: New internal name for the offer (optional) code: New shortcode for the offer (optional) display_title: New name displayed in the offer window (optional) display_description: New text displayed in the offer window (optional) ctx: Optional context for logging Returns: String representation of the updated offer Raises: GhostError: If the Ghost API request fails ValueError: If no fields to update are provided

update_post

Update a blog post with new data. Args: post_id: The ID of the post to update update_data: Dictionary containing the updated data and updated_at timestamp. Note: 'updated_at' is required. If 'lexical' is provided, it must be a valid JSON string. The lexical content must be a properly escaped JSON string in this format: { "root": { "children": [ { "children": [ { "detail": 0, "format": 0, "mode": "normal", "style": "", "text": "Your content here", "type": "text", "version": 1 } ], "direction": "ltr", "format": "", "indent": 0, "type": "paragraph", "version": 1 } ], "direction": "ltr", "format": "", "indent": 0, "type": "root", "version": 1 } } Example usage: update_data = { "post_id": "67abcffb7f82ac000179d76f", "update_data": { "updated_at": "2025-02-11T22:54:40.000Z", "lexical": "{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Hello World","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}" } } Updatable fields for a blog post: - slug: Unique URL slug for the post. - id: Identifier of the post. - uuid: Universally unique identifier for the post. - title: The title of the post. - lexical: JSON string representing the post content in lexical format. - html: HTML version of the post content. - comment_id: Identifier for the comment thread. - feature_image: URL to the post's feature image. - feature_image_alt: Alternate text for the feature image. - feature_image_caption: Caption for the feature image. - featured: Boolean flag indicating if the post is featured. - status: The publication status (e.g., published, draft). - visibility: Visibility setting (e.g., public, private). - created_at: Timestamp when the post was created. - updated_at: Timestamp when the post was last updated. - published_at: Timestamp when the post was published. - custom_excerpt: Custom excerpt text for the post. - codeinjection_head: Code to be injected into the head section. - codeinjection_foot: Code to be injected into the footer section. - custom_template: Custom template assigned to the post. - canonical_url: The canonical URL for SEO purposes. - tags: List of tag objects associated with the post. - authors: List of author objects for the post. - primary_author: The primary author object. - primary_tag: The primary tag object. - url: Direct URL link to the post. - excerpt: Short excerpt or summary of the post. - og_image: Open Graph image URL for social sharing. - og_title: Open Graph title for social sharing. - og_description: Open Graph description for social sharing. - twitter_image: Twitter-specific image URL. - twitter_title: Twitter-specific title. - twitter_description: Twitter-specific description. - meta_title: Meta title for SEO. - meta_description: Meta description for SEO. - email_only: Boolean flag indicating if the post is for email distribution only. - newsletter: Dictionary containing newsletter configuration details. - email: Dictionary containing email details related to the post. ctx: Optional context for logging Returns: Formatted string containing the updated post details Raises: GhostError: If there is an error accessing the Ghost API or missing required fields

update_tag

Update a tag with new data. Args: tag_id: The ID of the tag to update update_data: Dictionary containing the updated data. Fields that can be updated: - name: The name of the tag - slug: URL slug for the tag - description: Description of the tag - feature_image: URL to the tag's feature image - visibility: Tag visibility ('public' or 'internal') - accent_color: CSS color hex value for the tag - meta_title: Meta title for SEO - meta_description: Meta description for SEO - canonical_url: The canonical URL - og_image: Open Graph image URL - og_title: Open Graph title - og_description: Open Graph description - twitter_image: Twitter card image URL - twitter_title: Twitter card title - twitter_description: Twitter card description - codeinjection_head: Code to inject in header - codeinjection_foot: Code to inject in footer Example: { "name": "Updated Name", "description": "Updated description" } ctx: Optional context for logging Returns: Formatted string containing the updated tag details Raises: GhostError: If there is an error accessing the Ghost API

update_tier

Update an existing tier in Ghost. Args: tier_id: ID of the tier to update (required) name: New name for the tier description: New description for the tier monthly_price: New monthly price in cents (e.g. 500 for $5.00) yearly_price: New yearly price in cents (e.g. 5000 for $50.00) benefits: New list of benefits for the tier welcome_page_url: New URL for the welcome page visibility: New visibility setting ("public" or "none") currency: New currency for prices active: New active status ctx: Optional context for logging Returns: String representation of the updated tier Raises: GhostError: If the Ghost API request fails

update_user

Update an existing user in Ghost. Args: user_id: ID of the user to update (required) name: User's full name (optional) slug: User's slug (optional) email: User's email address (optional) profile_image: URL for profile image (optional) cover_image: URL for cover image (optional) bio: User's bio (optional) website: User's website URL (optional) location: User's location (optional) facebook: Facebook username (optional) twitter: Twitter username (optional) meta_title: Meta title for SEO (optional) meta_description: Meta description for SEO (optional) accessibility: Accessibility settings (optional) comment_notifications: Enable comment notifications (optional) free_member_signup_notification: Enable free member signup notifications (optional) paid_subscription_started_notification: Enable paid subscription started notifications (optional) paid_subscription_canceled_notification: Enable paid subscription canceled notifications (optional) mention_notifications: Enable mention notifications (optional) milestone_notifications: Enable milestone notifications (optional) ctx: Optional context for logging Returns: String representation of the updated user Raises: GhostError: If the Ghost API request fails ValueError: If no fields to update are provided

update_webhook

Update an existing webhook in Ghost. Args: webhook_id: ID of the webhook to update (required) event: New event to trigger the webhook (optional) target_url: New URL to send the webhook to (optional) name: New name of the webhook (optional) api_version: New API version for the webhook (optional) ctx: Optional context for logging Returns: String representation of the updated webhook Raises: GhostError: If the Ghost API request fails ValueError: If no fields to update are provided or if the event is invalid

README

Ghost MCP 服务器

smithery badge

<a href="https://glama.ai/mcp/servers/vor63xn7ky"><img width="380" height="200" src="https://glama.ai/mcp/servers/vor63xn7ky/badge" alt="Ghost Server MCP server" /></a>

一个模型上下文协议 (MCP) 服务器,用于通过 Claude 等 LLM 接口与 Ghost CMS 交互。该服务器提供对您的 Ghost 博客的安全且全面的访问,利用 JWT 身份验证和丰富的 MCP 工具集来管理文章、用户、会员、等级、优惠和新闻通讯。

demo

特性

  • 用于 Ghost Admin API 请求的安全 JWT 身份验证
  • 全面的实体访问,包括文章、用户、会员、等级、优惠和新闻通讯
  • 具有模糊和精确匹配选项的高级搜索功能
  • Ghost 实体的详细、人类可读的输出
  • 使用自定义 GhostError 异常的强大错误处理
  • 通过 MCP 上下文集成的日志记录支持,以增强故障排除

安装

通过 Smithery 安装

要通过 Smithery 为 Claude Desktop 自动安装 Ghost MCP 服务器:

npx -y @smithery/cli install @MFYDev/ghost-mcp --client claude

手动安装

# 克隆仓库
git clone git@github.com/mfydev/ghost-mcp.git
cd ghost-mcp

# 创建虚拟环境并安装
uv venv
source .venv/bin/activate  # 在 Windows 上:.venv\Scripts\activate
uv pip install -e .

要求

  • Python ≥ 3.12
  • 运行具有 Admin API 访问权限的 Ghost 实例(建议 v5.x+)
  • Node.js(用于使用 MCP Inspector 进行测试)

用法

环境变量

GHOST_API_URL=https://yourblog.com  # 您的 Ghost Admin API URL
GHOST_STAFF_API_KEY=your_staff_api_key                 # 您的 Ghost Staff API 密钥

与 MCP 客户端一起使用

要将其与 MCP 客户端(例如 Claude Desktop)一起使用,请将以下内容添加到您的 claude_desktop_config.json

{
  "mcpServers": {
    "ghost": {
      "command": "/Users/username/.local/bin/uv",
      "args": [
        "--directory",
        "/path/to/ghost-mcp",
        "run",
        "src/main.py"
      ],
      "env": {
        "GHOST_API_URL": "your_ghost_api_url",
        "GHOST_STAFF_API_KEY": "your_staff_api_key"
      }
    }
  }
}

使用 MCP Inspector 进行测试

GHOST_API_URL=your_ghost_api_url GHOST_STAFF_API_KEY=your_staff_api_key npx @modelcontextprotocol/inspector uv --directory /path/to/ghost-mcp run src/main.py

可用工具

Ghost MCP 现在提供了一个统一的工具,可以访问所有 Ghost CMS 功能:

主要工具

  • ghost: 用于访问所有 Ghost CMS 功能的中心工具

使用 Ghost 工具

ghost 工具接受两个主要参数:

  1. action: 要执行的特定 Ghost 操作
  2. params: 指定操作的参数字典

用法示例:

# 列出文章
ghost(action="list_posts", params={"format": "text", "page": 1, "limit": 15})

# 按标题搜索文章
ghost(action="search_posts_by_title", params={"query": "Welcome", "exact": False})

# 创建文章
ghost(action="create_post", params={
    "post_data": {
        "title": "New Post via MCP",
        "status": "draft",
        "lexical": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Hello World\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}"
    }
})

可用操作

ghost 工具支持与以前相同的所有操作,但现在通过统一的界面:

文章操作

  • list_posts: 列出带有分页的博客文章
  • search_posts_by_title: 按标题搜索文章
  • read_post: 检索特定文章的完整内容
  • create_post: 创建新文章
  • update_post: 更新特定文章
  • delete_post: 删除特定文章
  • batchly_update_posts: 在单个请求中更新多个文章

标签操作

  • browse_tags: 列出所有标签
  • read_tag: 检索特定标签信息
  • create_tag: 创建新标签
  • update_tag: 更新现有标签
  • delete_tag: 删除特定标签

用户操作

  • list_roles: 列出所有可用角色
  • create_invite: 创建新的用户邀请
  • list_users: 列出所有用户
  • read_user: 获取特定用户的详细信息
  • delete_user: 删除特定用户

会员操作

  • list_members: 列出会员
  • read_member: 检索特定会员信息
  • create_member: 创建新会员
  • update_member: 更新现有会员

等级操作

  • list_tiers: 列出所有会员等级
  • read_tier: 检索特定等级信息
  • create_tier: 创建新等级
  • update_tier: 更新现有等级

优惠操作

  • list_offers: 列出促销优惠
  • read_offer: 获取特定优惠信息
  • create_offer: 创建新优惠
  • update_offer: 更新现有优惠

新闻通讯操作

  • list_newsletters: 列出所有新闻通讯
  • read_newsletter: 检索特定新闻通讯信息
  • create_newsletter: 创建新新闻通讯
  • update_newsletter: 更新现有新闻通讯

Webhooks 操作

  • create_webhook: 创建新的 webhook
  • update_webhook: 更新现有 webhook
  • delete_webhook: 删除特定 webhook

可用资源

所有资源都遵循 URI 模式:[type]://[id]

  • user://{user_id}: 用户个人资料和角色
  • member://{member_id}: 会员详细信息和订阅
  • tier://{tier_id}: 等级配置
  • offer://{offer_id}: 优惠详情
  • newsletter://{newsletter_id}: 新闻通讯设置
  • post://{post_id}: 文章内容和元数据
  • blog://info: 一般博客信息

错误处理

Ghost MCP 服务器采用自定义 GhostError 异常来处理 API 通信错误和处理问题。这确保了清晰且描述性的错误消息,以帮助进行故障排除。

贡献

  1. Fork 仓库
  2. 创建功能分支
  3. 提交更改
  4. 创建拉取请求

许可证

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选