今天,我们在 Cloudflare 上推出 WebMCP 的开发者预览版。只需打开开关,浏览器智能体就能开始与你的网站协作,无需编写代码,源站也无需任何改动。Cloudflare 会在你的页面中加入一个小型桥接脚本,为访客的智能体注册一组可用的工具。
网络建立在这样一个假设之上:另一端有一个人,会阅读页面、点击按钮、填写表单。但如今,越来越多的访问来自 AI 智能体,而它们面对的是一个为人类打造的互联网。常见的做法是爬虫,它们把内容复制回服务器,却往往不给原站带来任何流量,也很少给予署名。有一种更好的方式,而且不需要抓取。
WebMCP 是一项新的浏览器标准,在 Chrome 146 中以实验性方式提供,在页面中表现为 document.modelContext。网站可以选择向在浏览器中运行的智能体暴露一组工具,这意味着智能体不再需要在为人类打造的页面里摸索着猜测路径。这让智能体可以拥有与用户不同的浏览体验,把 token 花在任务上,而不是导航上。问题在于:网站必须自己实现它。
Cloudflare 一直在两端同时建设。我们的远程浏览器 BrowserRun 已经加入了 WebMCP 支持,因此智能体可以发现并调用网站暴露的工具。Cloudflare Radar 也将很快提供它自己的 WebMCP 工具。这次预览则着眼于另一端:让 Cloudflare 上的任何网站只需一个开关、无需代码,就能获得这些工具。
Cloudflare 上的 WebMCP 开发者预览版
手工实现 WebMCP 是个不小的工程:要设计需要暴露的工具,把它们接入你的界面,并随着标准演进保持其可用。我们希望事情更简单:只需切换一个设置就能启用工具。

这些工具以工具包的形式提供,即一组可以一起开启的相关工具。它们的设计便于扩展:随着我们新增工具包,网站只需打开开关就能启用更多工具,无需重新部署。这次开发者预览版包含两个工具包,二者都完全在浏览器中运行。
它做了什么,又是如何工作的
我们的实现由两部分组成,都位于你的源站之前。两者都不会触及你网站的代码,并且无论你的网站是静态站点还是单页应用,工作方式都相同。
第一部分是在边缘注入。当你在 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 或社区论坛告诉我们使用体验。
