使用说明
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 (默认)。最小化条带属性描述以减少令牌使用 |
生成应用程序密码
- 在您的WordPress管理员中,转到 用户>个人资料
- 滚动到 应用程序密码
- 输入名称(例如“wp-mcp”)并单击 添加新应用程序密码
- 复制生成的密码
设置
从源代码构建
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路由。安装插件或注册新帖子类型后使用。
