WordPress MCP Server 是一个把 AI 客户端与 WordPress 原生 REST API 连接起来的内容管理服务。连接完成后,Cursor、ChatGPT、Codex、Claude 等支持 MCP 的客户端可以读取文章、创建草稿、发布内容、管理分类标签、上传媒体和审核评论,而不需要为基础内容管理再安装一个 WordPress 插件。
本文基于当前 WordPress MCP Server 项目的源码、Docker 配置和实际接入流程整理。它也是一次真实的“自举”示例:这篇文章本身就是通过该 MCP 服务创建并发布到 WordPress 的。
一、为什么要给 WordPress 接入 MCP
直接让 AI 操作数据库风险很高,使用浏览器自动化又容易受到后台界面、主题和编辑器变化影响。WordPress REST API 提供了稳定的内容接口,MCP 则把这些接口包装成带参数校验、权限说明和风险属性的标准工具。
Cursor / ChatGPT / Codex / Claude
│
│ MCP(HTTP 或 stdio)
▼
WordPress MCP Server
│
│ HTTPS + REST API
▼
WordPress
AI 不需要知道每个 REST 路径和请求格式,只需要选择合适的工具并填写标题、正文、状态等参数。WordPress 仍负责用户权限、内容存储、固定链接、媒体库和评论系统。
二、项目的核心特点
1. 基础内容管理零 WordPress 插件
推荐鉴权方式是 WordPress 5.6 以后内置的 Application Password。管理员在“用户 → 个人资料 → 应用程序密码”中创建一个专用密码,MCP 服务使用 HTTPS Basic Auth 调用原生 REST API。
这里的“零插件”指基础文章、页面、分类、标签、媒体和评论管理不需要安装本项目的 WordPress 插件。若站点使用主题私有字段,例如某些主题的外链封面或独立 SEO 元数据,则需要主题自己开放 REST 字段或增加受权限保护的扩展接口。
2. Docker 一键部署
项目提供 Dockerfile、docker-compose.yml 和 deploy.sh。默认只监听本机 127.0.0.1:3000,适合 Codex、Cursor 或反向代理本地调用。
cp .env.example .env
vim .env
./deploy.sh
docker compose ps
curl http://127.0.0.1:3000/health
3. HTTP 与 stdio 双传输
远程场景使用 Streamable HTTP,默认路径为 /mcp;本地客户端也可以使用 stdio 直接启动进程或 Docker 容器。Codex 当前支持本地 STDIO 和远程 Streamable HTTP MCP,并可为 HTTP 服务配置 Bearer Token 或 OAuth。
4. Application Password 与 JWT 两种 WordPress 鉴权
application_password 是推荐默认值,由 WordPress Core 提供。jwt 只适用于站点已经通过现有插件、反向代理或身份网关接受 JWT 的情况。WordPress Core 本身不会为通用 REST 请求签发 JWT,本项目也不会伪装它是原生能力。
三、支持哪些 MCP 工具
内容检索
search:按关键词搜索文章或页面,返回可引用的永久链接。fetch:读取搜索结果的完整内容。wp_site_info:检查站点和 REST API 能力。wp_list_content:按状态、作者、分类、标签和时间列出内容。wp_get_content:读取单篇文章或页面的可编辑字段。
文章与页面管理
wp_create_content:创建文章或页面,默认状态为草稿。wp_update_content:修改标题、正文、摘要、状态、分类、标签和置顶状态。wp_delete_content:默认移入回收站,只有显式 force 才永久删除。
分类与标签
wp_list_terms;wp_create_term;wp_update_term;wp_delete_term。
媒体库
wp_list_media:查找已有媒体。wp_upload_media:上传 Base64 编码的图片或文件。wp_update_media:修改标题、说明、替代文本和附件关系。wp_delete_media:删除媒体,永久删除必须显式确认。
评论管理
wp_list_comments:查看待审、已批准、垃圾或回收站评论。wp_update_comment:修改评论内容和审核状态。wp_delete_comment:软删除或永久删除评论。
四、环境变量配置
复制示例文件后,至少填写 WordPress 地址、用户名和 Application Password。
WP_URL=https://example.com
WP_AUTH_METHOD=application_password
WP_USERNAME=your-wordpress-username
WP_APPLICATION_PASSWORD=xxxx-xxxx-xxxx
WP_CONTENT_TYPES=posts,pages
TRANSPORT=http
PORT=3000
BIND_ADDRESS=127.0.0.1
MCP_PATH=/mcp
ALLOWED_HOSTS=localhost,127.0.0.1
REQUEST_TIMEOUT_MS=30000
MAX_MEDIA_BYTES=10485760
LOG_LEVEL=info
WP_URL 不要包含 /wp-json。WP_CONTENT_TYPES 是内容类型白名单,服务只访问这里声明的 REST 类型。自定义 Post Type 还必须在 WordPress 中以 show_in_rest=true 注册。
五、Docker 的安全默认值
Compose 配置不仅负责启动,还包含多项基础加固:
- 默认把端口绑定到 127.0.0.1;
- 容器根文件系统只读;
- 仅为临时文件提供小型 tmpfs;
- 启用 no-new-privileges;
- 移除全部 Linux capabilities;
- 使用健康检查验证 HTTP 服务;
- 异常退出后自动重启。
如果要通过公网域名提供 MCP,应使用 Caddy、Nginx、Traefik 或云负载均衡终止 TLS,只代理 /mcp 和 /health,并设置正确的 Host 白名单。
六、连接 Codex
Codex 的桌面应用、CLI 和 IDE 扩展可以共享同一 Codex 主机上的 MCP 配置。既可以使用命令添加服务器,也可以在设置里的 MCP servers 页面添加并重启客户端。
远程 HTTP
codex mcp add wordpress --url https://mcp.example.com/mcp
如果 MCP 服务启用了共享 Bearer Token,应把值放进本地环境变量,不要直接写进命令历史或仓库。
export WORDPRESS_MCP_TOKEN=your-mcp-token
codex mcp add wordpress --url https://mcp.example.com/mcp --bearer-token-env-var WORDPRESS_MCP_TOKEN
本地 stdio
本地模式可以让 Codex 直接启动 Docker 容器,并通过标准输入输出通信。真实 env 文件必须使用绝对路径,并保持在 Git 忽略列表中。
{
"mcpServers": {
"wordpress": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--env-file", "/absolute/path/to/.env",
"-e", "TRANSPORT=stdio",
"wordpress-mcp-server:local"
]
}
}
}
连接后可使用 codex mcp list 查看服务器,在 Codex 交互界面中使用 MCP 列表确认工具是否加载。
七、连接 Cursor
Cursor 可以在项目的 MCP 配置中填写远程地址:
{
"mcpServers": {
"wordpress": {
"url": "https://mcp.example.com/mcp"
}
}
}
如果只在本机使用,也可以采用与上面相同的 Docker stdio 方式。团队项目不要提交包含真实密码和 Token 的配置文件。
八、连接 Claude
Claude Desktop 可通过 stdio 启动本地服务;支持远程 MCP 的 Claude 客户端可连接 Streamable HTTP 地址。不同版本的配置入口可能不同,应以客户端当前的 MCP 管理界面或帮助命令为准。
九、连接 ChatGPT
ChatGPT Web 不会读取本地 Codex 的 config.toml,也不能直接访问你的 localhost。要在托管的 ChatGPT 环境中使用,必须把 MCP 部署到稳定的公网 HTTPS 地址,并通过当前可用的插件、App 或连接器机制提供远程 MCP 工具。
生产连接优先使用标准 OAuth 身份网关。项目提供的 MCP_API_KEY 适合支持自定义 Authorization Header 的客户端,是轻量共享令牌,并不等同于完整 OAuth。
十、两层鉴权不能混淆
这个项目有两条独立的安全链路:
- AI 客户端 → MCP Server:由 MCP_API_KEY、Bearer Token 或上游 OAuth 保护。
- MCP Server → WordPress:由 Application Password 或站点已有 JWT 保护。
只配置 WordPress Application Password,并不代表公网 /mcp 已经安全;反过来,给 MCP 加了 Bearer Token,也不能替代 WordPress 用户权限。
十一、推荐的最小权限方案
- 新建专用 WordPress 用户,不使用超级管理员日常密码。
- 只授予发布、上传或评论审核所需权限。
- 生产环境全程使用 HTTPS。
- 定期撤销并重新生成 Application Password。
- 限制
WP_CONTENT_TYPES白名单。 - 默认创建草稿,由人工确认后发布。
- 永久删除必须保留显式确认和审计记录。
十二、典型使用示例
整理旧文章
先用 wp_list_content 列出已发布文章,再用 wp_get_content 获取正文。AI 可以检查失效链接、图片、标题层级和摘要,然后只更新确认过的文章。
批量发布项目文档
AI 读取本地仓库的 README、Compose、源码和部署脚本,生成结构化文章,调用 wp_create_content 创建内容,并设置分类、标签、状态和置顶。
媒体与封面管理
先查找媒体库中是否已有素材,必要时上传新图,再将 attachment ID 设置为特色图片。使用主题私有的外链特色图像时,应通过主题提供的受保护接口处理。
评论审核
列出待审评论,识别垃圾信息和正常反馈,再由管理员确认批准、标记垃圾或移入回收站。
十三、主题私有字段的边界
WordPress REST API 能稳定管理核心字段,但不同主题可能把外链封面、独立 SEO、付费阅读和自定义布局保存在私有 meta 中。此时有三种扩展方式:
- 主题将 meta 注册为
show_in_rest; - 子主题增加仅授权用户可访问的 REST 路由;
- 在 MCP Server 中增加对应的专用工具。
扩展接口必须继续执行 current_user_can 权限判断、参数清洗和缓存清理,不能因为是 AI 调用就绕过 WordPress 权限系统。
十四、健康检查与故障排查
docker compose ps
docker compose logs -f wordpress-mcp
curl http://127.0.0.1:3000/health
codex mcp list
若健康接口正常但工具调用失败,按顺序检查:MCP 客户端是否加载服务器、HTTP 地址和路径是否正确、Bearer Token 是否匹配、WordPress Application Password 是否有效、用户角色是否拥有对应权限,以及站点 REST API 是否被安全插件或反向代理拦截。
十五、总结
WordPress MCP Server 把成熟的 WordPress REST API 转换成 AI 可以安全调用的标准工具。它保留 WordPress 原有用户权限和内容模型,同时通过 Docker、白名单、软删除、请求限制和双层鉴权控制风险。
对于需要长期维护博客、项目文档、媒体库和评论的站点,它比直接操作数据库更安全,也比依赖后台页面点击更稳定。连接完成后,Cursor、ChatGPT、Codex 和 Claude 就能在明确权限范围内参与选题、写作、发布、更新和巡检。













暂无评论内容