Strapi MCP服务器

一个通用的开源MCP服务器,用于Strapi v4,通过自然语言或自动化内容创建管道管理内容。

  • by dugleelabs
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 dugleelabs/strapi-mcp-server

使用说明

@duglelabs/strapi mcp服务器

Strapi v4的通用开源MCP服务器。将Strapi CRUD和模式自检作为MCP工具公开,并通过Vercel AI SDK和可配置的网络搜索提供商提供可选的AI内容生成(研究+草稿)。将其与Claude Desktop、Cursor或任何兼容MCP的代理一起使用,通过自然语言管理内容,或完全自动化内容创建管道。


先决条件

  • Node.js 20+
  • pnpm(或npm/npx)
  • 带有API令牌的正在运行的Strapi v4实例

快速开始

复制env变量并运行 pnpm dlx:

STRAPI_URL=http://localhost:1337 \
STRAPI_API_TOKEN=your-token-here \
pnpm dlx @dugleelabs/strapi-mcp-server

服务器通过stdio启动,可以立即使用。所有配置都是通过环境变量进行的,不需要安装步骤。


Claude桌面配置

将此添加到您的 claude_desktop_config.json (通常在 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "strapi": {
      "command": "pnpm",
      "args": ["dlx", "@dugleelabs/strapi-mcp-server"],
      "env": {
        "STRAPI_URL": "http://localhost:1337",
        "STRAPI_API_TOKEN": "your-token-here",
        "AI_PROVIDER": "anthropic",
        "AI_MODEL": "claude-sonnet-4-6",
        "ANTHROPIC_API_KEY": "sk-ant-...",
        "SEARCH_PROVIDER": "tavily",
        "TAVILY_API_KEY": "tvly-..."
      }
    }
  }
}

环境变量

变量 必填 描述 示例
STRAPI_URL 是 Strapi实例的基本URL http://localhost:1337
STRAPI_API_TOKEN 是 Strapi API令牌(完全访问或作用域) abc123...
SEARCH_PROVIDER 否 启用 research_topic: tavily, brave,或 exa tavily
TAVILY_API_KEY 如果 SEARCH_PROVIDER=tavily Tavilly API密钥 tvly-...
BRAVE_API_KEY 如果 SEARCH_PROVIDER=brave 勇敢搜索API密钥 BSA...
EXA_API_KEY 如果 SEARCH_PROVIDER=exa Exa API密钥 exa-...
AI_PROVIDER 否 启用AI工具: openai, anthropic, google, mistral, ollama anthropic
AI_MODEL 如果 AI_PROVIDER set 所选提供程序的型号名称 claude-sonnet-4-6
ANTHROPIC_API_KEY 如果 AI_PROVIDER=anthropic 无烟煤API键 sk-ant-...
OPENAI_API_KEY 如果 AI_PROVIDER=openai OpenAI API密钥 sk-...
GOOGLE_GENERATIVE_AI_API_KEY 如果 AI_PROVIDER=google 谷歌人工智能API密钥 AIza...
MISTRAL_API_KEY 如果 AI_PROVIDER=mistral Mistral API密钥 ...
OLLAMA_BASE_URL 如果 AI_PROVIDER=ollama 基础 URL http://localhost:11434

工具

第1层——CRUD(始终启用)

list_entries

列出Strapi内容类型中的条目。

{
  "contentType": "articles",
  "page": 1,
  "pageSize": 25,
  "status": "draft",
  "filters": { "title": { "$contains": "AI" } }
}

退货: { entries, total, page, pageCount }


get_entry

按ID获取单个条目。

{ "contentType": "articles", "id": 42 }

退货: { entry }


create_entry

创建新条目。使用 get_content_type_schema 首先查看可用字段。

{
  "contentType": "articles",
  "data": { "title": "My Post", "content": "..." },
  "publish": false
}

退货: { id, adminUrl, entry }


update_entry

部分更新现有条目。

{
  "contentType": "articles",
  "id": 42,
  "data": { "title": "Updated Title" }
}

退货: { id, entry }


delete_entry

永久删除条目。

{ "contentType": "articles", "id": 42 }

退货: { success: true, message: "Entry 42 deleted from articles" }


list_content_types

列出Strapi实例中的所有内容类型。使用此功能在CRUD操作之前发现可用类型。

无需输入。

退货: { contentTypes: [{ uid, displayName, pluralName, kind }] }


get_content_type_schema

获取内容类型的字段架构——字段名称、类型和所需状态。

{ "uid": "api::article.article" }

退货: { uid, displayName, attributes: { [field]: { type, required, default } } }


第2层——搜索(需要 SEARCH_PROVIDER)

research_topic

在网上搜索某个主题的最新信息。

{
  "topic": "TypeScript 2026 trends",
  "context": "developer tooling",
  "maxResults": 10
}

退货: { query, results: [{ title, url, content, score }], provider }


第3层——人工智能内容(要求 AI_PROVIDER)

generate_draft

使用配置的AI提供程序生成结构化的博客文章草稿。

{
  "topic": "TypeScript 2026 trends",
  "researchResults": [...],
  "styleGuide": "Write tersely for senior engineers.",
  "targetWordCount": 800
}

退货: { title, body, metaDescription, tags, wordCount }


create_content_from_research

端到端:研究一个主题→ 生成草稿→ 拯救斯特拉皮。需要同时配置搜索和AI。

{
  "topic": "TypeScript 2026 trends",
  "contentType": "articles",
  "context": "focus on tooling and DX",
  "styleGuide": "Terse, developer-focused.",
  "fieldMapping": {
    "title": "title",
    "body": "content",
    "metaDescription": "seo_description",
    "tags": "tags"
  }
}

注意事项 fieldMapping: 每个Strapi实例都有不同的字段名。提供 fieldMapping 以匹配您的内容类型的实际字段。如果省略,则按原样使用草稿密钥(title, body, metaDescription, tags).

退货: { strapiId, adminUrl, title, wordCount, step }


MCP提示

三个提示在MCP客户端中注册为斜线命令:

提示 参数 描述
dugleelabs/create-blog-from-topic topic (必填), contentType (可选) 在Strapi中研究一个主题并创建一篇博客草稿
dugleelabs/list-drafts contentType (必填) 显示某一内容类型的所有未发布草稿
dugleelabs/review-entry contentType, id (均为必填项) 发布前获取条目并提出改进建议

搜索提供程序

塔维利

SEARCH_PROVIDER=tavily TAVILY_API_KEY=tvly-...

在获取API密钥 tavily.com.

勇敢的搜索

SEARCH_PROVIDER=brave BRAVE_API_KEY=BSA...

在获取API密钥 brave.com/search/api.

Exa

SEARCH_PROVIDER=exa EXA_API_KEY=exa-...

在获取API密钥 例如ai.


AI 提供商

仅安装所需的提供程序包:

人类学(克劳德)

pnpm add @ai-sdk/anthropic
AI_PROVIDER=anthropic AI_MODEL=claude-sonnet-4-6 ANTHROPIC_API_KEY=sk-ant-...

开放人工智能

pnpm add @ai-sdk/openai
AI_PROVIDER=openai AI_MODEL=gpt-4o OPENAI_API_KEY=sk-...

谷歌

pnpm add @ai-sdk/google
AI_PROVIDER=google AI_MODEL=gemini-1.5-pro GOOGLE_GENERATIVE_AI_API_KEY=AIza...

米斯特拉尔

pnpm add @ai-sdk/mistral
AI_PROVIDER=mistral AI_MODEL=mistral-large-latest MISTRAL_API_KEY=...

Ollama(当地)

pnpm add @ai-sdk/openai
AI_PROVIDER=ollama AI_MODEL=llama3 OLLAMA_BASE_URL=http://localhost:11434

已知限制

  • 架构自检需要完全访问令牌: 这 list_content_types 和 get_content_type_schema 工具使用Strapi的内容类型生成器API,该API可以返回403受限令牌。CRUD工具可以使用具有适当权限的任何作用域令牌。

  • pnpm dlx 延迟: 跑步通过 pnpm dlx 每次调用时都会下载该包,这会在Claude Desktop中增加约2-5秒的启动延迟。为了避免这种情况,请全局安装: pnpm add -g @dugleelabs/strapi-mcp-server.

  • 仅限Strapi v4: 以Strapi v4 REST API为目标。计划支持Strapi v5。

  • 无内容类型假设: 服务器不采用任何特定的字段名称。始终使用 get_content_type_schema 或提供 fieldMapping 以匹配您的Strapi模式。


贡献

欢迎在 github/dugleelabs/strapi-mcp-server.

git clone git@github.com:dugleelabs/strapi-mcp-server.git
cd strapi-mcp-server
pnpm install
cp .env.example .env  # fill in STRAPI_URL and STRAPI_API_TOKEN
pnpm test
pnpm build

使用 MCP检查员 对于交互式本地测试:

pnpm dlx @modelcontextprotocol/inspector pnpm start

许可证

麻省理工学院——见 许可证.