订阅以接收新文章的通知:

代码模式:仅需 1000 个令牌,即可支持智能体访问完整 API 端点

2026-02-20

6 分钟阅读时间
这篇博文也有 EnglishItaliano日本語한국어Tiếng Việt繁體中文版本。

模型上下文协议 (MCP) 已成为 AI 智能体使用外部工具的标准方式。但其中存在一种核心矛盾:智能体需要很多工具来做有用的工作,但添加的每个工具都会填充模型的上下文窗口,导致为实际任务留下的空间更少。

代码模式是我们最初提出的一种技术,旨在减少使用智能体工具过程中占用的上下文窗口。不必将每个操作描述为单独的工具,而是让模型针对类型化 SDK 编写代码,并在 Dynamic Worker Loader 中安全地执行代码。代码充当一个紧凑的计划。模型可以探索工具操作,组成多个调用,并仅返回其所需的数据。Anthropic 在其使用 MCP 执行代码的博客文章中独立探讨了相同的模式。

今天,我们推出使用代码模式的全新 MCP 服务器,适用于整个 Cloudflare API(从 DNSZero TrustWorkersR2)。服务器只需使用 search() 和 execute() 两个工具,即可通过 MCP 提供对整个 Cloudflare API 的访问,同时仅消耗大约 1000 个令牌。无论存在多少个 API 端点,其占用空间始终保持不变。

对于像 Cloudflare API 这样的大型 API,代码模式可将输入令牌的使用量减少 99.9%。不使用代码模式的同等 MCP 服务器将消耗 117 万个令牌,这超过了最先进的基础模型的整个上下文窗口。

images/BLOG-3184 3

代码模式与原生 MCP 的资源节省对比,使用 tiktoken 衡量

您可以立即开始使用这款全新的 Cloudflare MCP 服务器。此外,我们还将在 Cloudflare Agents SDK 中开源一个新的代码模式 SDK,支持用户在自有 MCP 服务器和 AI 智能体中使用相同的方法。

服务器端代码模式

images/BLOG-3184 2

这款全新的 MCP 服务器在服务器端应用了代码模式。服务器仅导出 search()execute() 这两个工具,而不是数千个工具。这两个工具均由代码模式提供支持。如下是加载到模型上下文中的完整工具界面区域:

[
  {
    "name": "search",
    "description": "Search the Cloudflare OpenAPI spec. All $refs are pre-resolved inline.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "JavaScript async arrow function to search the OpenAPI spec"
        }
      },
      "required": ["code"]
    }
  },
  {
    "name": "execute",
    "description": "Execute JavaScript code against the Cloudflare API.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "JavaScript async arrow function to execute"
        }
      },
      "required": ["code"]
    }
  }
]

为了了解代码模式的功能,智能体会调用 search()。它根据 OpenAPI 规范的类型化表示编写 JavaScript。智能体可以按产品、路径、标记或任何其他元数据筛选端点,并将数千个端点缩减到所需的少数几个。完整的 OpenAPI 规范永远不会进入模型上下文。智能体仅通过代码与之交互。

当智能体准备好执行操作时,它会调用 execute()。智能体编写的代码可以发出 Cloudflare API 请求、处理分页、检查响应,并将多项操作串联起来,一次性执行。

这两个工具在 Dynamic Worker 隔离环境内运行生成的代码。这是一个轻量级 V8 沙盒,没有文件系统,不会通过提示词注入泄露环境变量,并且默认情况下禁用外部获取。必要时,可以使用出站提取处理程序,明确控制出站请求。

示例:保护源服务器免受 DDoS 攻击

假设用户对其智能体说:“保护我的源服务器免受 DDoS 攻击。”智能体执行的第一步操作是查阅文档。它可能会调用 Cloudflare Docs MCP 服务器,使用 Cloudflare 技能,或直接在网络上搜索。从文档中,它了解到:应在源服务器前端部署 Cloudflare WAFDDoS 保护规则。

第 1 步:搜索正确的端点 search 工具向模型提供一个 spec 对象:包含所有预解析 $refs 的完整 Cloudflare OpenAPI 规范。模型根据该规范编写 JavaScript 代码。在这里,智能体会查找区域中的 WAF 和规则集端点:

async () => {
  const results = [];
  for (const [path, methods] of Object.entries(spec.paths)) {
    if (path.includes('/zones/') &&
        (path.includes('firewall/waf') || path.includes('rulesets'))) {
      for (const [method, op] of Object.entries(methods)) {
        results.push({ method: method.toUpperCase(), path, summary: op.summary });
      }
    }
  }
  return results;
}

服务器在 Workers 隔离环境中运行此代码并返回:

[
  { "method": "GET",    "path": "/zones/{zone_id}/firewall/waf/packages",              "summary": "List WAF packages" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}", "summary": "Update a WAF package" },
  { "method": "GET",    "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}/rules", "summary": "List WAF rules" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}/rules/{rule_id}", "summary": "Update a WAF rule" },
  { "method": "GET",    "path": "/zones/{zone_id}/rulesets",                           "summary": "List zone rulesets" },
  { "method": "POST",   "path": "/zones/{zone_id}/rulesets",                           "summary": "Create a zone ruleset" },
  { "method": "GET",    "path": "/zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint", "summary": "Get a zone entry point ruleset" },
  { "method": "PUT",    "path": "/zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint", "summary": "Update a zone entry point ruleset" },
  { "method": "POST",   "path": "/zones/{zone_id}/rulesets/{ruleset_id}/rules",        "summary": "Create a zone ruleset rule" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/rulesets/{ruleset_id}/rules/{rule_id}", "summary": "Update a zone ruleset rule" }
]

完整的 Cloudflare API 规范包含超过 2,500 个端点。模型将范围缩减至其需要的 WAF 和规则集端点,而无需将任何规范信息输入上下文窗口。

模型还可以在调用特定端点之前深入查看其架构。在这里,它会检查区域规则集中可用的阶段:

async () => {
  const op = spec.paths['/zones/{zone_id}/rulesets']?.get;
  const items = op?.responses?.['200']?.content?.['application/json']?.schema;
  // Walk the schema to find the phase enum
  const props = items?.allOf?.[1]?.properties?.result?.items?.allOf?.[1]?.properties;
  return { phases: props?.phase?.enum };
}

{
  "phases": [
    "ddos_l4", "ddos_l7",
    "http_request_firewall_custom", "http_request_firewall_managed",
    "http_response_firewall_managed", "http_ratelimit",
    "http_request_redirect", "http_request_transform",
    "magic_transit", "magic_transit_managed"
  ]
}

智能体现在知道它需要的确切阶段:ddos_l7 用于 DDoS 防护,http_request_firewall_managed 用于 WAF。

第 2 步:执行 API 操作 智能体切换到使用 execute。沙盒获取一个 cloudflare.request() 客户端,该客户端可以对 Cloudflare API 进行经过身份验证的调用。首先,智能体检查区域中已经存在哪些规则集:

async () => {
  const response = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets`
  });
  return response.result.map(rs => ({
    name: rs.name, phase: rs.phase, kind: rs.kind
  }));
}

[
  { "name": "DDoS L7",          "phase": "ddos_l7",                        "kind": "managed" },
  { "name": "Cloudflare Managed","phase": "http_request_firewall_managed", "kind": "managed" },
  { "name": "Custom rules",     "phase": "http_request_firewall_custom",   "kind": "zone" }
]

智能体发现已存在托管的 DDoS 和 WAF 规则集。现在,它可以进行链式调用,在一次执行中检查这些规则并更新敏感度级别:

async () => {
  // Get the current DDoS L7 entrypoint ruleset
  const ddos = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/ddos_l7/entrypoint`
  });

  // Get the WAF managed ruleset
  const waf = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/http_request_firewall_managed/entrypoint`
  });
}

从搜索规范、检查模式到列出规则集、获取 DDoS 和 WAF 配置,整个操作需要调用四次工具。

Cloudflare MCP 服务器

我们从单个产品的 MCP 服务器开始。想要管理 DNS 的智能体?添加 DNS MCP 服务器。需要记录 Workers 日志的智能体?添加 Workers Observability MCP 服务器。每个服务器会导出一组固定的工具,这些工具已映射到 API 操作。当工具集较小时,这种方式行之有效,但 Cloudflare API 拥有超过 2,500 个端点。任何手动维护的服务器集合都无法跟上速度。

Cloudflare MCP 服务器将简化这个流程。只需两个工具,大约 1,000 个令牌,即可覆盖 API 中的每个端点。添加新产品时,相同的 search()execute() 代码路径会发现并调用它们,无需新的工具定义,也无需新的 MCP 服务器。它甚至支持 GraphQL Analytics API

Cloudflare MCP 服务器根据最新的 MCP 规范构建。它符合 OAuth 2.1 标准,使用 Workers OAuth 提供商将令牌范围缩减至用户在连接时已获批准的选定权限。智能体只能获得用户明确授予的权限。

对于开发人员而言,这意味着您可以使用简单的智能体循环,并让智能体凭借内置的渐进式功能来发现和访问完整的 Cloudflare API。

images/BLOG-3184 4

比较上下文缩减方法

目前已经出现了几种减少 MCP 工具消耗令牌数量的方法:

客户端代码模式是我们的第一个实验。模型为 TypeScript 编写有类型的 SDK,并在客户端的 Dynamic Worker Loader 中运行。这种方法的缺点是,它要求智能体提供安全的沙盒访问权限。代码模式在 Goose 和 Anthropic Claude SDK 中以程序化工具调用 (Programmatic Tool Calling) 的方式实施。

命令行界面是另一种方法。CLI 是自编文件程序,并且会在智能体探索过程中逐步揭示其功能。OpenClawMoltworker 等工具使用 MCPorter 将 MCP 服务器转换为命令行界面,从而逐步揭示智能体。这种方法的局限性显而易见:智能体需要一个外壳,但并非每种环境都会提供外壳,而且这会引入比沙盒隔离环境更广泛的攻击面。

动态工具搜索(例如 Anthropic 在 Claude Code 中所使用的工具),显示一组与当前任务相关的较小工具集。虽然它缩减了上下文使用,但目前需要一个必须维护和评估的搜索功能,并且每个匹配的工具仍然会使用令牌。

images/BLOG-3184 5

以上每种方法都解决了一个实际问题。但对于 MCP 服务器而言,服务器端代码模式结合了这些方法各自的优势:无论 API 大小,令牌成本是固定的;无需修改智能体端;内置渐进式发现功能;以及在沙盒隔离环境中安全执行。智能体只需利用代码来调用两个工具。其他操作均在服务器端完成。

立即开始使用

Cloudflare MCP 服务器现已上线。将 MCP 客户端指向服务器 URL,您将被重定向到 Cloudflare 进行授权并选择要授予智能体的权限。将以下配置添加到您的 MCP 客户端:

{
  "mcpServers": {
    "cloudflare-api": {
      "url": "https://mcp.cloudflare.com/mcp"
    }
  }
}

对于 CI/CD、自动化,或者如果您更喜欢自行管理令牌,请创建一个具有所需权限的 Cloudflare API 令牌。用户令牌和帐户令牌均受支持,并且可以作为持有者令牌在 Authorization 标头中传递。

如需获取不同 MCP 设置配置的更多信息,请访问 Cloudflare MCP 存储库

展望未来

代码模式解决了单个 API 的上下文成本问题。但智能体极少只与一项服务通信。开发人员使用的智能体可能需要 Cloudflare API,以及 GitHub、数据库和内部文档服务器。每增加一个 MCP 服务器,都会带来与最初遇到的上下文窗口相同的压力。

Cloudflare MCP 服务器门户支持客户在单个网关后组合多个 MCP 服务器,并实现统一的身份验证和访问控制。我们将为客户的所有 MCP 服务器构建一流的代码模式集成,并将它们揭示给具有内置渐进式发现功能和相同固定令牌数量的智能体,无论有多少网关后端服务。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
开发人员开发人员平台AIWorkers AICloudflare WorkersOptimization开源

在 X 上关注

Matt Carey|mattzcarey
Cloudflare|@cloudflare

相关帖子