返回 文章 apply CMS 文章

Cloudflare 推出 WebMCP 开发者预览:一键为任意网站添加 AI 代理接口

了解 Cloudflare 如何通过 WebMCP 让网站与 AI 代理协作,无需新 API 或源站更改。

WebMCPCloudflareAI代理浏览器标准
成长分 / 100 65 综合收获、行动、留存与影响

Cloudflare 推出 WebMCP 开发者预览:一键为任意网站添加 AI 代理接口
为什么值得读了解 WebMCP 标准及 Cloudflare 的实现方式,对网站所有者和技术决策者有直接参考价值。

预览版提供两个工具包,展示如何在不改变源站的情况下为代理提供结构化交互。

关键洞察
  1. WebMCP 是浏览器标准,在 Chrome 146 中实验性推出,通过 document.modelContext 暴露工具。
  2. Cloudflare 在边缘注入桥接器,无需更改源站代码,支持静态和单页应用。
  3. 工具包包括 Content Credentials 和 Site MCP Server,完全在浏览器中运行,无服务器往返。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:8655

今天,我们在 Cloudflare 上推出 WebMCP 的开发者预览版。只需打开开关,浏览器智能体就能开始与你的网站协作,无需编写代码,源站也无需任何改动。Cloudflare 会在你的页面中加入一个小型桥接脚本,为访客的智能体注册一组可用的工具。

网络建立在这样一个假设之上:另一端有一个人,会阅读页面、点击按钮、填写表单。但如今,越来越多的访问来自 AI 智能体,而它们面对的是一个为人类打造的互联网。常见的做法是爬虫,它们把内容复制回服务器,却往往不给原站带来任何流量,也很少给予署名。有一种更好的方式,而且不需要抓取。

WebMCP 是一项新的浏览器标准,在 Chrome 146 中以实验性方式提供,在页面中表现为 document.modelContext。网站可以选择向在浏览器中运行的智能体暴露一组工具,这意味着智能体不再需要在为人类打造的页面里摸索着猜测路径。这让智能体可以拥有与用户不同的浏览体验,把 token 花在任务上,而不是导航上。问题在于:网站必须自己实现它。

Cloudflare 一直在两端同时建设。我们的远程浏览器 BrowserRun 已经加入了 WebMCP 支持,因此智能体可以发现并调用网站暴露的工具。Cloudflare Radar 也将很快提供它自己的 WebMCP 工具。这次预览则着眼于另一端:让 Cloudflare 上的任何网站只需一个开关、无需代码,就能获得这些工具。

Cloudflare 上的 WebMCP 开发者预览版

手工实现 WebMCP 是个不小的工程:要设计需要暴露的工具,把它们接入你的界面,并随着标准演进保持其可用。我们希望事情更简单:只需切换一个设置就能启用工具。

BLOG-3460 2.png

这些工具以工具包的形式提供,即一组可以一起开启的相关工具。它们的设计便于扩展:随着我们新增工具包,网站只需打开开关就能启用更多工具,无需重新部署。这次开发者预览版包含两个工具包,二者都完全在浏览器中运行。

它做了什么,又是如何工作的

我们的实现由两部分组成,都位于你的源站之前。两者都不会触及你网站的代码,并且无论你的网站是静态站点还是单页应用,工作方式都相同。

第一部分是在边缘注入。当你在 Cloudflare 控制台中为网站开启 WebMCP 后,我们会用 HTMLRewriter 在每个 HTML 响应中添加一行内容:对一个桥接脚本的小型引用,这个脚本同样由我们提供。该标签及其加载的脚本都来自边缘、与页面同源,所以页面的其他部分不会有任何变化:

<!-- Cloudflare injects this at the edge. Same origin, and your HTML is otherwise untouched. -->
<script type="module"
        src="/.webmcp/bridge.js"
        data-packs="c2pa,mcp-server-client"
        data-mcp-url="/mcp"></script>

data-packs 属性是要激活的工具包列表。如果你已有现成的模型上下文协议(Model Context Protocol,MCP)服务器,data-mcp-url 会指向你自己的 MCP 服务器(默认为同源的 /mcp)。

第二部分是桥接脚本。它在页面中运行,并查找 WebMCP 接口。如果浏览器不具备该接口,它会直接返回、什么也不做,因此页面的行为与之前完全一致。

此后,桥接脚本会把 data-packs 中列出的工具包组合成一份工具列表,并用 .registerTool 逐个注册。工具包其实就是一组 MCP 工具描述符及其处理函数。静态工具包(例如 Content Credentials)预先声明自己的工具;动态工具包(例如 Site MCP Server 工具包)则在启动时先发现自己的工具,再进行注册。

在这个预览版中,每个工具都完全在访客的浏览器中运行,不需要与我们的服务器往返通信。Content Credentials 工具包会获取一张图片,并在本地解析其开头几千字节的内容出处元数据。Site MCP Server 工具包则直接从页面向你的 MCP 服务器端点发起请求,在访客的源上、使用他们已有的会话。

桥接脚本的代码由运行在边缘的 Worker 提供。这为我们日后扩展服务留出了空间:未来的工具包将能够调用这个 Worker 来完成页面自身无法完成的任务,比如用 Workers AI 为站点地图生成摘要,或查询 AI Search 索引。

对智能体来说,所有这些都是普通的 MCP 工具。我们使用模型上下文协议自身的 Tool 和 CallToolResult 类型,所以已经能与 MCP 服务器通信的智能体,无需额外适配就能驱动页面。浏览器只是 MCP 运行的又一个场所。下面的示例展示了桥接脚本如何把你自己的某个 MCP 工具变成访客的智能体可以调用的工具。

// For each tool the site's own MCP server advertises (via tools/list),
// registering a proxy whose execute() calls the site back on the
// visitor's origin, with their session.
document.modelContext.registerTool({
  name: tool.name,                 // e.g. "search_products"
  description: tool.description,
  inputSchema: tool.inputSchema,   // taken straight from tools/list
  execute: async (args) => {
    const res = await fetch(mcpUrl, {   // same-origin /mcp
      method: "POST",
      credentials: "same-origin",
      headers: { "content-type": "application/json" },
      body: JSON.stringify({
        jsonrpc: "2.0", id: 1, method: "tools/call",
        params: { name: tool.name, arguments: args },
      }),
    });
    const { result } = await res.json();
    return result;   // an MCP CallToolResult, passed straight through
  },
});

查看内容元数据

我们也在开发用于读取不同类型元数据的工具包。例如,C2PA 计划参与者的凭证可以通过 Content Credentials 工具包获取。scan_images_c2pa 会扫描每张图片,并为每张图片返回一段简短摘要:

{
  "imageCount": 12,
  "scanned": 12,
  "withC2pa": 8,
  "results": [
    {
      "src": "https://example.com/hero.jpg",
      "hasC2pa": true,
      "format": "image/jpeg",
      "manifestCount": 1,
      "claimGenerator": "Adobe Firefly",
      "title": "sunrise over the bay",
      "signedBy": "Adobe Inc."
    },
    { "src": "https://example.com/logo.png", "hasC2pa": false, "format": "image/png" }
  ]
}

如需更仔细地查看,inspect_image_c2pa 会解码单张图片的完整清单(manifest):其编辑历史、声明的作者以及签名证书。它是一个纯 TypeScript 读取器,只读取图片开头几千字节的元数据,而不读取图片本身。目前它只读取并报告凭证,而不做密码学验证:每个结果都带有 signatureVerified: false,这样智能体就不会把解码出的声明误当成已经验证过的结论。

动手试试

要开始使用 WebMCP,请前往 Cloudflare 控制台中的 Agent Readiness > WebMCP。在这里你可以为某个域名开启 WebMCP,并选择要添加的工具包:Content Credentials 和 Site MCP Server 默认都是开启的,更多工具包发布后也会出现在这里。设置就是这么简单。无需部署任何东西,源站也无需任何改动,你网站发出的下一个 HTML 就会包含桥接脚本。

要确认它已生效,请向你的网站请求任意一个 HTML 页面,并查找 Cloudflare 注入的那一行:

curl -s https://your-site.example | grep webmcp

你不需要自己的智能体就能看到这些工具的效果。把 Cloudflare 的远程浏览器 BrowserRun 指向你的 URL,它就会发现并调用你的工具包所注册的工具,与访客的智能体完全一样。这就是完整的闭环:BrowserRun 给智能体一个可以操作的浏览器,这个预览版给你的网站提供可被操作的工具,双方通过开放标准对接。无论浏览器是在某人的笔记本电脑上,还是在云端以无头模式运行,这些工具的行为都是一样的。

我们为什么要做这件事

我们的使命是帮助让互联网变得更好。随着互联网的变化,我们需要为域名所有者提供工具,让新的访客——AI 智能体——无需完全重建网站就能与之交互。这是迈向这样一个网络的一步:即使访客并不总是人类,它依然能够繁荣。

这是一个开发者预览版,我们希望听到你的反馈。请打开它,在你自己的网站上试用,并通过 Cloudflare Developers Discord 或社区论坛告诉我们使用体验。