Skip to main content
Glama

wp-mcp-gateway (Cloudflare Workers 版本)

与 Node 版本思路相同:一个 MCP 端点,每个工具调用都带一个 site_id,因此一个 Claude 连接器就能覆盖你的整个 WordPress 站点群。此版本运行在 Cloudflare Workers 上,而不是 VPS 上——无需修补服务器,免费套餐足够轻松应对,并且在运行 wrangler deploy 后几分钟内即可在 workers.dev URL 上线。

它基于 Cloudflare 当前推荐的方式构建:来自 agents SDK 的无状态 createMcpHandler(较旧的有状态 McpAgent / Durable Objects 方式已弃用,不适用于新服务器——而且这个网关本来就不需要会话状态,因为每个工具调用都是独立的)。

交接前已在本地完成端到端验证:Worker 能正常启动,/health 正常响应,MCP initialize 握手成功,bearer-token 认证能正确拒绝缺失/错误的 token 并放行正确的 token,list_sites 从测试用的 SITES_JSON 返回真实数据。

1. 前提条件

npm install -g wrangler   # or just use npx wrangler as shown below
wrangler login            # opens a browser to authenticate with your Cloudflare account

如果你还没有 Cloudflare 账户,可以免费注册:https://dash.cloudflare.com/sign-up——免费套餐(每天 100,000 次请求)对此绰绰有余。

2. 安装依赖

cd wp-mcp-gateway-cf
npm install

3. 配置你的站点

与 Node 版本不同,Workers 没有文件系统,因此站点注册表不是保存在文件中,而是保存在一个 secret(SITES_JSON)中。结构与之前相同——每个站点一条记录:

{
  "town-green": {
    "label": "Town Green",
    "baseUrl": "https://town-green.org",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "wpengine"
  },
  "cra": {
    "label": "CRA",
    "baseUrl": "https://cra.com",
    "username": "mcp-agent",
    "appPassword": "xxxx xxxx xxxx xxxx xxxx xxxx",
    "host": "gridpane"
  }
}

为所有站点构建这个 JSON(一旦你为每个站点生成好 Application Passwords,用脚本把电子表格转成 JSON 是很容易的事——如果你需要,可以问我),然后把它设置为一个 secret:

npx wrangler secret put SITES_JSON
# paste the whole JSON blob when prompted, then press Ctrl+D

Application Passwords: 在 wp-admin 中,路径为 Users → your user → Application Passwords。建议与之前相同——每个站点使用一个专用的低权限 WP 用户,而不是你的个人管理员账户,这样即使 token 泄露,也只能在该角色允许的范围内操作。

4. 设置你的网关认证令牌

npx wrangler secret put GATEWAY_TOKEN
# paste a long random value, e.g. output of: openssl rand -hex 32

如果不设置此项,端点将以无认证方式运行——用于首次本地测试没问题,但绝不能用于部署后的版本。

5. 在本地测试

npx wrangler dev

这会启动一个本地开发服务器(默认 http://localhost:8787)。在本地测试时,请把 secrets 放在 .dev.vars 文件中(切勿提交它):

GATEWAY_TOKEN=some-local-test-token
SITES_JSON={"town-green":{"label":"Town Green","baseUrl":"https://town-green.org","username":"mcp-agent","appPassword":"xxxx"}}

检查它是否正常运行:

curl http://localhost:8787/health

6. 部署

npx wrangler deploy

Wrangler 会打印出你的线上 URL,类似这样:

https://wp-mcp-gateway.<your-subdomain>.workers.dev

你的 MCP 端点是 https://wp-mcp-gateway.<your-subdomain>.workers.dev/mcp。

7. 在 Claude 中添加为连接器

添加一个自定义连接器,指向该 /mcp URL,并附带请求头 Authorization: Bearer <GATEWAY_TOKEN>(与你在第 4 步中设置的值相同)。

从那时起,要执行“列出 cra.com 上的草稿文章”,Claude 只需要调用 list_sites(或已经知道 id),然后使用 site_id: "cra" 调用 list_posts——与 Node 版本行为相同,只是托管在边缘网络上。

之后更新站点

要添加新站点或更改凭据,请重新运行:

npx wrangler secret put SITES_JSON

无需重新部署——secrets 独立于 Worker 代码更新。

本次部署的注意事项

  • 无文件系统,无长时间运行的进程——整个注册表都存放在 SITES_JSON secret 中,每次请求时重新解析。即使有 ~80 个站点,成本也微不足道。

  • 设计上无状态——每个 MCP 请求都会创建一个全新的服务器实例(依据 Cloudflare 当前的指南);无需担心会丢失跨请求会话。

  • 托管主机上的 WAF 标记——与 Node 版本相同的注意事项:尤其是 WP Engine,可能会标记来自陌生 IP 段调用 REST API 的流量。如果某个站点仅通过此网关访问时返回 403,这是需要与 WP Engine 支持团队核对的第一件事——如有必要,值得将 Cloudflare 的出站 IP 范围加入白名单。

  • 工具范围——此网关只与 WordPress 核心 REST API(/wp/v2/...)通信。不支持 WP-CLI、SSH 或数据库级操作——反正 Workers 无法发起 SSH 连接,如果你以后需要,那需要另一个完全不同的组件。

在将 Claude 连接到已部署 URL 之前的安全检查清单

  • 已通过 wrangler secret put 设置 GATEWAY_TOKEN,且足够长、随机

  • SITES_JSON 为每个站点使用专用的低权限 WP 用户

  • .dev.vars(如果你在本地使用过)已在 .gitignore 中,且永远不会被提交

  • 在将 secret 扩展到全部 ~80 个站点之前,你已经对 2–3 个站点进行了测试

Related MCP Connectors