字节笔记本
2026年7月19日
Cloudflare MCP 到底能不能管 Tunnel?翻了源码给你答案
很多人装完 Cloudflare 官方的 Agent Setup 之后,会冒出一个疑问:那些 MCP server 到底能不能管 Tunnel?我翻了三个官方仓库的源码和 OpenAPI 规范,把答案和完整能力清单整理了出来。
结论先放前面:能操作 Tunnel,但入口只有一个——主 API MCP server(mcp.cloudflare.com/mcp)。Cloudflare 那 15 个领域专用 server 里没有任何一个能管 Tunnel。
一、两套 MCP server 的真相
Cloudflare 实际上有两类 MCP server,分别来自两个仓库:
| 仓库 | 类型 | 机制 | 数量 | 能否操作 Tunnel |
|---|---|---|---|---|
cloudflare/mcp | Code Mode 主 server | 2 个通用工具 (search / execute) + OpenAPI spec(2108 端点)在沙箱里动态调用 | 1 个 | 能(覆盖 20 个 tunnel 端点) |
cloudflare/mcp-server-cloudflare | 领域专用 server | 每个 product 一个独立 server,typed 工具 | 15 个 | 不能(无 tunnel 专用 server) |
很多人以为官方文档里说的"5 个 MCP server"就是全部,其实领域专用 server 已经扩到 15 个了。其中唯一跟 Zero Trust 沾边的是 cloudflare-one-casb,但它只做 CASB(SaaS 安全配置审计),完全不碰 Tunnel。
二、主 server 是怎么操作 Tunnel 的
主 server 不导出固定工具,而是把整个 Cloudflare OpenAPI 规范(2108 个端点)注入隔离沙箱,靠两个通用工具干活:
| 工具 | 作用 |
|---|---|
search | 在 2108 个端点中按 tag / 路径搜索 tunnel 相关端点 |
execute | 在隔离 isolate 里执行模型写的 JS,通过受限的 outbound proxy(只允许 *.cloudflare.com 主机)自动注入 API Token 发起真实请求 |
工具名按 pathToToolName(method, path) 规则动态生成,例如 POST /accounts/{id}/cfd_tunnel → post_accounts_cfd_tunnel。源码就在 cloudflare/mcp/src/openapi.ts。
这套机制的好处是:Cloudflare API 每加一个端点,主 server 自动就能用,不用等 MCP server 更新。
三、Tunnel 操作能力完整表格
下面这 20 个端点全部存在于 cloudflare/api-schemas 的 openapi.json 里,因此都能通过主 server 的 execute 调用:
| 操作类别 | HTTP 方法 + 路径 | 生成的工具名 | 能力说明 |
|---|---|---|---|
| 列出 / 筛选 Tunnel | GET /accounts/{id}/cfd_tunnel | get_accounts_cfd_tunnel | 列出所有 cloudflared tunnel |
| 创建 Tunnel | POST /accounts/{id}/cfd_tunnel | post_accounts_cfd_tunnel | 新建 tunnel(含 remotely-managed) |
| 获取单个 Tunnel | GET /accounts/{id}/cfd_tunnel/{tunnel_id} | get_accounts_cfd_tunnel_by_tunnel_id | 查看详情 |
| 更新 Tunnel | PATCH /accounts/{id}/cfd_tunnel/{tunnel_id} | patch_accounts_cfd_tunnel_by_tunnel_id | 改名称 / 状态 |
| 删除 Tunnel | DELETE /accounts/{id}/cfd_tunnel/{tunnel_id} | delete_accounts_cfd_tunnel_by_tunnel_id | 清理 tunnel |
| 🔑 获取 Tunnel Token | GET /accounts/{id}/cfd_tunnel/{tunnel_id}/token | get_accounts_cfd_tunnel_token_by_tunnel_id | 拿到 cloudflared tunnel run 用的 token |
| 📝 读 Tunnel Configuration | GET /accounts/{id}/cfd_tunnel/{tunnel_id}/configurations | get_accounts_cfd_tunnel_configurations_by_tunnel_id | 读取 ingress rules |
| 📝 写 Tunnel Configuration | PUT /accounts/{id}/cfd_tunnel/{tunnel_id}/configurations | put_accounts_cfd_tunnel_configurations_by_tunnel_id | 设置 ingress rules / 路由 |
| 查看 Connections | GET /accounts/{id}/cfd_tunnel/{tunnel_id}/connections | get_accounts_cfd_tunnel_connections_by_tunnel_id | 查活跃连接 |
| 清理 Connections | DELETE /accounts/{id}/cfd_tunnel/{tunnel_id}/connections | delete_accounts_cfd_tunnel_connections_by_tunnel_id | 强制断开 |
| 管理 Connectors | GET /accounts/{id}/cfd_tunnel/connectors/{connector_id} | get_accounts_cfd_tunnel_connectors_by_connector_id | WARP Connector 信息 |
| Tunnel 管理动作 | POST /accounts/{id}/cfd_tunnel/{tunnel_id}/management | post_accounts_cfd_tunnel_management_by_tunnel_id | cleanup 等动作 |
| 🌐 列出 Virtual Networks | GET /accounts/{id}/teamnet/virtual_networks | get_accounts_teamnet_virtual_networks | 列出虚拟网络 |
| 🌐 创建 Virtual Network | POST /accounts/{id}/teamnet/virtual_networks | post_accounts_teamnet_virtual_networks | 新建虚拟网络 |
| 改 / 删 Virtual Network | PATCH/DELETE .../virtual_networks/{virtual_network_id} | patch/delete_accounts_teamnet_virtual_networks_by_virtual_network_id | 编辑 / 删除 |
| 🔗 列出 Tunnel Routes | GET /accounts/{id}/tunnels | get_accounts_tunnels | 公共 hostname / IP 路由表 |
| 🔗 创建 Tunnel Route | POST /accounts/{id}/tunnels | post_accounts_tunnels | 给 tunnel 加路由 |
| WARP Connector 全套 | .../warp_connector/... | *_warp_connector* | WARP Connector CRUD |
cfd_tunnel 就是 cloudflared tunnel 的资源名(原 Argo Tunnel),日常说的"管 Tunnel"基本都指它。
四、Skills 仓库里有什么
cloudflare/skills 一共 11 个 skill,跟 Tunnel / 网络直接相关的有 2 个:
| Skill | 内容 | 性质 |
|---|---|---|
cloudflare-one | Access / Gateway / WARP / Tunnel / Cloudflare WAN / DLP / CASB 的设计、配置、排障指南 | 📖 指导性知识,不是工具 |
cloudflare-one-migrations | 从 Zscaler / Palo Alto / legacy VPN / SWG / SASE 迁移到 Cloudflare One(含 tunnel 迁移) | 📖 指导性知识 |
注意 Skills 本身不直接操作 API,它给 agent 的是教科书式指导,告诉它该调哪个 MCP 工具 / 哪个端点。真正落地还是要靠主 Code Mode MCP server。
五、最小安装建议
想用 Agent 管 Tunnel,最少装这几样就够了:
# 1. 必装:主 Code Mode server(操作 tunnel 的唯一入口)
# 添加到你的 agent MCP 配置:
"cloudflare": { "url": "https://mcp.cloudflare.com/mcp" }
# 2. 推荐:文档检索(免登录,写 ingress 时查最新语法)
"cloudflare-docs": { "url": "https://docs.mcp.cloudflare.com/mcp" }
# 3. 推荐:tunnel 相关的 skill 知识(教 agent 怎么配)
npx -y skills add cloudflare/skills --skill 'cloudflare-one' --yes --global首次使用时 OAuth 会自动触发登录授权,连上之后就能让 Agent 直接创建 tunnel、拿 token、写 ingress rules。
六、一句话总结
Cloudflare 把整个 API 规范丢进沙箱让 Agent 自己写代码调用,这种"Code Mode"设计绕开了"每个产品做一个 MCP server"的笨办法。代价是工具列表不直观、调试时看不到具体调了哪个端点;好处是 API 一更新就能用,Tunnel、Virtual Network、WARP Connector 全覆盖。
只要记住一点:装 MCP 时一定带上主 server mcp.cloudflare.com,否则那些领域专用 server 帮不上 Tunnel 任何忙。