## 什么是 WebMCP？

WebMCP 是 W3C Community Group 草案提案,允许 AI 代理*通过用户的浏览器*而不是通过单独的 API 与网站交互。网站使用属性注释现有 HTML 表单,将它们声明为可调用的工具;浏览器通过新的 `navigator.modelContext` API 将这些工具公开给代理。该提案由 Google 和 Microsoft 支持,目前在 Chrome Canary 的实验性标志后可用。

这个名字是对 [MCP](/kb/zh/mcp)（Anthropic 的 Model Context Protocol）的有意呼应,但两者是解决不同问题的不同规范。MCP 定义了代理调用服务器上工具的 JSON-RPC 协议。WebMCP 定义了浏览器 API,让代理调用页面上已经作为表单存在的工具。

## 为什么 WebMCP 重要

代理-网站集成的传统路径是：网站发布 API（[OpenAPI](/kb/zh/openapi)）或 MCP 服务器,代理单独认证,调用在后通道上运行。这对第一方代理集成有效,但对具有有价值功能但没有 API 团队构建并行表面的网站长尾来说失效。

WebMCP 采取相反的方法：网站已经有做这件事的表单,用户已经登录,浏览器已经有会话。为什么要构建并行 API？用一些属性注释现有的表单,浏览器中的代理就可以直接调用它——免费继承用户的认证、网站的 CSRF 保护和浏览器的权限模型。

## WebMCP 与 [MCP](/kb/zh/mcp) 的区别

| | MCP | WebMCP |
|---|---|---|
| 谁调用谁 | 代理 → 服务器 | 代理 → 浏览器 → 服务器 |
| 代理运行位置 | 浏览器外 | 浏览器内或旁边 |
| 认证 | OAuth 2.1 / API 密钥 | 用户现有的浏览器会话 |
| 传输 | HTTP/SSE 上的 JSON-RPC | 浏览器内部 API（`navigator.modelContext`） |
| 在网站上构建什么 | 专用 MCP 端点 | 现有 HTML 表单上的属性注释 |
| 连接生命周期 | 跨会话持久 | 标签关闭时结束 |
| 发现 | MCP 注册表 / well-known | DOM 扫描 + `/.well-known/webmcp.json` 清单 |

架构几乎相反。MCP 为外部代理提供稳定的后端接口;WebMCP 为浏览器内代理提供对现有前端的访问。

## WebMCP 如何工作

有两个协作部分：**DOM 注释**（每页）和可选的**清单**（每站点）。

**1. 注释表单。** 网站使用三个自定义属性将任何 HTML 表单标记为代理可调用：

```html
<form tool-name="search-products" tool-description="Search the catalog by keyword">
  <input type="text" name="q" tool-param-description="Search query, e.g. 'red shoes'">
  <button type="submit">Search</button>
</form>
```

浏览器端 WebMCP 运行时扫描 DOM 中的 `tool-name` 元素,构建工具列表并公开给代理。

**2. 清单。** 网站可以发布 `/.well-known/webmcp.json` 声明可能不在每页可见的工具：

```json
{
  "spec": "webmcp/0.1",
  "tools": [
    {
      "name": "search-products",
      "description": "Search the product catalog",
      "url": "/search",
      "method": "GET",
      "parameters": [
        {
          "name": "q",
          "type": "string",
          "description": "Search query"
        }
      ]
    }
  ]
}
```

## WebMCP 与其他代理互操作层

| 规范 | 代理在哪里 | 公开什么 | 认证 |
|---|---|---|---|
| **WebMCP** | 浏览器内 | 注释的 HTML 表单 | 用户的会话 |
| **[MCP](/kb/zh/mcp)** | 浏览器外 | 服务器上的 JSON-RPC 工具 | OAuth / API 密钥 |
| **[A2A](/kb/zh/a2a)** | 任何地方 | 具有命名技能的整个代理 | 代理级认证 |
| **[OpenAPI](/kb/zh/openapi)** | 任何地方 | 带 schema 的 REST 端点 | 每端点方案 |
| **[SKILL.md](/kb/zh/skills)** | 任何地方 | 散文操作手册 | 不适用 |

WebMCP 是唯一在用户浏览器内运行的。

## 当前状态

WebMCP 是 W3C Web Machine Learning Community Group 下的**草案 Community Group 报告**。截至 2026 年中：

- 规范在 [webmachinelearning.github.io/webmcp](https://webmachinelearning.github.io/webmcp/) 发布。
- 参考实现在 Chrome Canary 的实验性标志后。
- **没有**在任何生产浏览器中发布。
- 规范预计在达到 W3C Working Draft 状态之前会改变。

今天发布 WebMCP 的网站是早期的——他们押注规范稳定和浏览器发布。

## 谁支持 WebMCP

- **Google**——Chrome 团队发布提案并发布原型。
- **Microsoft**——规范的共同编辑。
- **W3C Web Machine Learning Community Group**——治理机构。

## 如何将 WebMCP 添加到你的网站

1. **选择重要的表单。**
2. **添加属性。** `tool-name`、`tool-description`、`tool-param-description`。
3. **使用小写连字符名称。** `search-products`,不是 `searchProducts`。
4. **为代理而不是人类编写描述。**
5. **发布清单。** `/.well-known/webmcp.json`。
6. **在 Chrome Canary 中测试** 启用实验性标志。

## 扫描器标记的常见错误

- **没有清单**——`/.well-known/webmcp.json` 返回 404。
- **清单返回 HTML**——SPA 通配路由。
- **没有描述的表单注释。**
- **无效的工具名称。**
- **非表单元素上的注释。**

## FAQ

**WebMCP 是 [MCP](/kb/zh/mcp) 的分支吗？**
不是。它们是来自不同工作组的独立规范,具有独立的架构。

**Chrome 的 WebMCP 会在 Firefox 或 Safari 中工作吗？**
目前不会。

**如果我已经有 MCP,我应该添加 WebMCP 吗？**
如果你的服务有用户今天填写表单的网站,是的。

**AgentGrade 会惩罚没有 WebMCP 的网站吗？**
不会。

**WebMCP 安全吗？**
安全模型继承自浏览器：same-origin 强制、用户的现有会话、CSRF 保护。

**如果我在 iframe 中托管我的表单,什么取代了 `/.well-known/webmcp.json`？**
Same-origin 规则适用。

**WebMCP 适用于 SPAs 吗？**
是的,但在代理扫描时表单必须存在于 DOM 中。

**WebMCP 何时发布到稳定 Chrome？**
没有公开时间表。

## 规范成熟度

**草案,未发布。** WebMCP 是 W3C Community Group 草案,仅在 Chrome Canary 的实验性标志后可用。

## 了解更多

- [WebMCP 规范](https://webmachinelearning.github.io/webmcp/) — W3C 草案
- [WebMCP GitHub 仓库](https://github.com/webmachinelearning/webmcp)
- [Chrome: 何时使用 WebMCP 和 MCP](https://developer.chrome.com/blog/webmcp-mcp-usage)
- [MCP](/kb/zh/mcp) — 服务器端对应物
- [A2A](/kb/zh/a2a) — 代理对代理协议
