WordPress REST API工具

一个将WordPress REST JSON API封装为MCP工具的服务,支持自动发现路由和多种认证方式。

  • by LAPSrj
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 LAPSrj/WP-MCP

使用说明

WP-MCP

包装WordPress REST JSON API的MCP服务器。它动态地发现WordPress网站上的所有可用路由,并将每个路由作为MCP工具公开。

特性

  • 从以下位置自动发现路线 /wp-json --所有核心和插件端点都已公开
  • 通过WordPress应用程序密码进行身份验证
  • 本地/开发环境的可选SSL证书验证旁路
  • 每条路线一个工具 method 作为参数(GET、POST、PUT、PATCH、DELETE)
  • 清洁工具名称: posts, posts.id, categories, media.id等等。

配置

通过MCP客户端传递的环境变量配置服务器:

变量 必填 描述
WP_URL 是 WordPress网站URL(例如。 https://example.com)
WP_USERNAME 否 经过身份验证的请求的WordPress用户名
WP_APP_PASSWORD 否 WordPress应用程序密码
WP_IGNORE_SSL 否 设置为 "true" 跳过SSL证书验证
WP_TOOL_MODE 否 工具曝光策略: all (默认), compact, allowlist,或 blocklist
WP_TOOL_FILTER 否 允许列表/块列表模式的工具名称或路线模式的逗号分隔列表
WP_DESCRIPTION_MODE 没有 verbose 或 minimal (默认)。最小化条带属性描述以减少令牌使用

生成应用程序密码

  1. 在您的WordPress管理员中,转到 用户>个人资料
  2. 滚动到 应用程序密码
  3. 输入名称(例如“wp-mcp”)并单击 添加新应用程序密码
  4. 复制生成的密码

设置

从源代码构建

npm install
npm run build

MCP客户端配置

添加到MCP客户端设置(例如Claude Desktop claude_desktop_config.json 或VS代码 settings.json):

{
  "mcpServers": {
    "wordpress": {
      "command": "node",
      "args": ["/path/to/wp-mcp/dist/index.js"],
      "env": {
        "WP_URL": "https://example.com",
        "WP_USERNAME": "admin",
        "WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx",
        "WP_IGNORE_SSL": "false"
      }
    }
  }
}

运作原理

启动时,服务器获取WordPress REST API索引 WP_URL/wp-json,它返回所有已注册的路由及其方法、参数和模式。每条路线都成为MCP工具:

WP路线 工具名称
/wp/v2/posts posts
/wp/v2/posts/(?P<id>[\d]+) posts.id
/wp/v2/categories categories
/wp/v2/media/(?P<id>[\d]+) media.id
/wc/v3/products wc.v3.products

这 wp/v2/ 前缀从核心路由中删除,以获得更清晰的名称。插件命名空间被保留以避免冲突。

每个工具都接受一个必需的 method 参数(路由支持的HTTP方法的枚举)加上路由自己的参数作为附加参数。

内置参数

这些参数由MCP服务器注入到每个工具的模式中。

_fields --添加到所有工具中。以逗号分隔的字段列表,用于包含在响应中(例如。 id,title,slug).这是一个原生的WordPress查询参数,可以减少响应大小——它被传递给WordPress。

以下参数被MCP服务器拦截,不会发送到WordPress:

_save_response --添加到所有工具中。用于保存响应而不是内联返回响应的文件路径。设置后,该工具返回一个简洁的摘要(文件路径、大小和标识字段,如id/title/type),而不是完整的响应正文。对于会浪费上下文标记的大型响应很有用。

_save_response_field --添加到所有工具中。与一起使用 _save_response在保存之前提取特定字段的点标记路径(例如。 content.rendered).只有提取的值会写入文件——字符串值是原始的(不是JSON引用的),因此您可以获得干净的HTML/text。

_file_params --添加到可写工具(POST/PUT/PATCH/DELETE)。将参数名称映射到文件路径的对象。读取每个文件,并将其内容用作该参数的字符串值。例子: {"content": "/tmp/page.html", "excerpt": "/tmp/excerpt.txt"}.

_body_file --添加到可写工具中。JSON文件的路径,其内容被解析并合并到请求正文中。优先: _file_params >显式内联参数> _body_file.

基于文件的内容工作流

当处理大型内容(例如编辑WordPress页面)时,代理可以使用这些参数将内容完全排除在对话上下文之外:

1. GET  pages.id  { "id": 42, "_save_response": "/tmp/page.json" }
   → returns: {"saved_to":"/tmp/page.json","size":"24.3KB","id":42,"title":"About Us","type":"page"}

2. Agent reads /tmp/page.json, edits it locally

3. POST pages.id  { "id": 42, "method": "POST", "_body_file": "/tmp/page.json" }
   → MCP reads the file and sends its contents as the request body

或者仅使用内容字段:

1. GET  pages.id  { "id": 42, "_save_response": "/tmp/content.html", "_save_response_field": "content.rendered" }
   → saves raw HTML to file, returns compact summary

2. Agent edits /tmp/content.html

3. POST pages.id  { "id": 42, "method": "POST", "_file_params": { "content": "/tmp/content.html" } }
   → MCP reads the HTML file and sends it as the content parameter

其他功能

  • 媒体上传:The media 工具接受 file_path 上传本地文件的参数。
  • ACF支持:检测到高级自定义字段时,核心路由上的可写工具将获得 acf 用于设置自定义字段值的对象参数。
  • refresh_tools:一个内置工具,可重新查找所有WordPress REST API路由。安装插件或注册新帖子类型后使用。