WordPress MCP Server:让Cursor、ChatGPT、Codex和Claude直接管理网站

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-jsonWP_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。

十、两层鉴权不能混淆

这个项目有两条独立的安全链路:

  1. AI 客户端 → MCP Server:由 MCP_API_KEY、Bearer Token 或上游 OAuth 保护。
  2. 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 中。此时有三种扩展方式:

  1. 主题将 meta 注册为 show_in_rest
  2. 子主题增加仅授权用户可访问的 REST 路由;
  3. 在 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 就能在明确权限范围内参与选题、写作、发布、更新和巡检。

THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容