乐于分享
好东西不私藏

网站要给 AI 打工了?WebMCP 让浏览器成为 Agent 的工具箱

网站要给 AI 打工了?WebMCP 让浏览器成为 Agent 的工具箱

1. 概述

WebMCP(Web Model Context Protocol) 是一个提议中的浏览器级 Web 标准,由 Google Chrome 团队与 Microsoft Edge 团队联合推进,目前处于 W3C 孵化阶段。它允许任何网页将其功能声明为结构化的、可调用的工具,供 AI 代理(Agent)直接发现和执行。

一句话定义:WebMCP 让网站从”可读的”升级为”可执行的”——不仅让 AI 能找到并推荐你的产品,更能让 AI 代理直接在你的网站上完成操作。

项目
详情
全称
Web Model Context Protocol
发起方
Google Chrome 团队 + Microsoft Edge 团队
孵化组织
W3C
当前状态
早期预览(Early Preview)
支持浏览器
Chrome 146+(需启用功能标志)
预期广泛支持
2026 年中后期

2. 背景与动机

2.1 当前痛点

当前 AI 代理与网页交互面临以下核心问题:

痛点
说明
计算成本高
AI 需要处理整个 HTML 文档来理解页面,消耗大量 Token
速度慢
每次浏览器交互(点击、滚动、截图)都增加延迟
不可靠
代理通过模拟点击操作,界面变化即导致失败
安全风险
直接暴露 API 密钥或进行屏幕抓取存在安全隐患
集成碎片化
每个 AI 提供商有自己的 API 和 SDK,缺乏统一标准

2.2 WebMCP 的解决思路

传统方式下,AI 代理需要爬取页面 → 猜测输入字段 → 希望表单接受输入 → 祈祷成功

WebMCP 的思路是:网站主动声明”我有一个叫 searchFlights 的函数,需要出发地、目的地和日期参数,调用它即可获得结构化结果。”

传统方式:
  网页 → 完整 HTML 文档 → AI 解析全量 DOM → 理解元素 → 执行操作
  (计算量大、耗时、成本高、不可靠)

WebMCP 方式:
  网页(内嵌结构化元数据) → AI 直接读取交互数据 → 执行操作
  (计算量大幅减少、快速、成本低、可靠)

2.3 性能数据

根据 arXiv 论文(2508.09171)的评估数据:

指标
传统方法
WebMCP
变化
处理需求
基准
降低 67.6%
任务成功率
98.8%
97.9%
仅下降 0.9%
成本
基准
降低 34%–63%
响应时间
基准
显著降低

以极小的成功率代价(0.9%),换取大幅的效率和成本提升。


3. 核心概念

3.1 结构化工具发现

提供机器可读的方式,让代理询问”你能做什么?”并获得清晰的可用工具列表,包含参数和用途。无需代理自行解析页面结构来推断可用操作。

3.2 可预测的执行

使用明确的函数调用取代猜测。代理调用已定义的工具,传入结构化参数,获得可预测的结构化结果。不再需要模拟可能变化的点击模式。

3.3 意图明确

网站明确声明其功能,代理确切知道特定功能应如何运作,无需从界面元素中推断操作方式。

3.4 临时性生命周期

WebMCP 工具只有在网页处于打开状态时才会存在。用户离开网站或关闭标签页后,代理将无法再访问网站的工具。这确保了工具始终与当前页面状态一致。

3.5 上下文感知

工具可根据页面状态动态注册和注销。代理永远只能看到与当前上下文相关的工具。

页面状态
可见工具
购物车为空
无结算工具
购物车有商品
显示结算工具
日期已选择
显示预订工具

4. 架构设计

4.1 整体架构

┌───────────────────────────────────────────────────────────┐
│                       浏览器                              │
│                                                           │
│  ┌─────────────────┐              ┌─────────────────────┐ │
│  │                 │   WebMCP     │                     │ │
│  │   AI 代理       │ ◄──────────► │   网页应用           │ │
│  │   (Agent)       │  标准化通信   │                     │ │
│  │                 │  工具发现/调用 │  - 声明式工具(HTML) │ │
│  │  - 工具发现     │              │  - 命令式工具(JS)    │ │
│  │  - Schema 获取  │              │  - 会话数据          │ │
│  │  - 工具调用     │              │  - Cookie / DOM     │ │
│  └─────────────────┘              └─────────────────────┘ │
│                                                           │
│              浏览器充当通信桥梁                              │
│         通信几乎即时,无需远程往返                           │
└───────────────────────────────────────────────────────────┘

4.2 核心角色

角色
职责
网页应用
声明和注册工具,定义输入 Schema 和执行逻辑
浏览器
充当网站与代理之间的通信桥梁,管理工具生命周期
AI 代理
发现可用工具、获取 Schema、调用工具并处理结果

4.3 通信机制

  • 浏览器使用内部系统进行通信,客户端与工具之间的通信几乎即时
  • 无需等待往返远程服务器
  • 代理可访问实时会话数据、Cookie 和 DOM 元素
  • 继承浏览器会话认证(SSO、Cookies),无需单独设置认证

4.4 AI 可见性技术栈

WebMCP 处于扩展中的可见性栈的最上层

┌─────────────────────────────────────┐
│   Agentic Readiness (WebMCP)        │  ← 网站功能对 AI 代理可执行
├─────────────────────────────────────┤
│   AI Visibility                     │  ← 品牌在 AI 回答中被提及/引用
├─────────────────────────────────────┤
│   SEO Foundations                   │  ← 传统搜索优化基础
└─────────────────────────────────────┘

5. API 规范

WebMCP 提供双轨制 API,覆盖不同复杂度的场景:

API 类型
实现方式
适用场景
改造成本
声明式 API
HTML 属性
已有标准 HTML 表单的网站
极低
命令式 API
JavaScript
复杂、动态交互场景
中等

5.1 声明式 API(Declarative API)

定位:低成本接入方案,在现有 HTML 表单上添加属性即可。

核心属性

属性
说明
toolname
工具名称,供 AI 代理识别
tooldescription
工具描述,向代理说明工具用途

工作原理

  1. 开发者在现有 <form> 元素上添加 toolname 和 tooldescription 属性
  2. 浏览器自动将表单字段翻译为 AI 代理可解读的结构化 Schema
  3. 当代理调用工具时,浏览器自动填充字段并提交表单

代码示例

<formtoolname="reserveTable"tooldescription="在餐厅预订座位">
<labelfor="date">日期</label>
<inputid="date"name="date"type="date" />

<labelfor="time">时间</label>
<inputid="time"name="time"type="time" />

<labelfor="party_size">人数</label>
<inputid="party_size"name="party_size"type="number"min="1"max="20" />

<buttontype="submit">预订</button>
</form>

要点:浏览器自动从 <input> 的 typenamemin/max 等属性推断参数类型和约束,生成结构化 Schema。


5.2 命令式 API(Imperative API)

定位:复杂、动态交互场景,通过 JavaScript 编程式注册工具。

核心接口navigator.modelContext

5.2.1 注册工具

const toolHandle = navigator.modelContext.registerTool({
name"searchFlights",
description"搜索可用航班",
inputSchema: {
type"object",
properties: {
origin: {
type"string",
description"出发城市"
      },
destination: {
type"string",
description"到达城市"
      },
date: {
type"string",
format"date",
description"出发日期"
      }
    },
required: ["origin""destination""date"]
  },
executeasync (inputs) => {
// 执行搜索逻辑,返回结构化结果
const results = await fetchFlights(inputs);
return {
flights: results.map(f => ({
flightNumber: f.id,
departure: f.departureTime,
arrival: f.arrivalTime,
price: f.price
      }))
    };
  }
});

5.2.2 注销工具

// 当页面状态变化时,注销不再可用的工具
toolHandle.unregister();

5.2.3 动态注册示例

// 根据购物车状态动态注册结算工具
functionupdateCheckoutTool(cart{
if (checkoutToolHandle) {
    checkoutToolHandle.unregister();
  }

if (cart.items.length > 0) {
    checkoutToolHandle = navigator.modelContext.registerTool({
name"checkout",
description"结算购物车中的商品",
inputSchema: {
type"object",
properties: {
shippingAddress: {
type"string",
description"配送地址"
          },
paymentMethod: {
type"string",
enum: ["credit_card""paypal"],
description"支付方式"
          }
        },
required: ["shippingAddress""paymentMethod"]
      },
executeasync (inputs) => {
returnawait processCheckout(cart.id, inputs);
      }
    });
  }
}

// 监听购物车变化
cart.onUpdate(() => updateCheckoutTool(cart));

5.2.4 API 参数说明

参数
类型
必填
说明
name
string
工具的唯一标识符
description
string
工具功能描述,供 AI 理解用途
inputSchema
object
输入参数的 JSON Schema 定义
execute
function
工具执行函数,接收输入参数,返回结果

6. 工作流程

WebMCP 的工作流分为三步:

Discover → Schema → Execute

步骤详解

步骤
描述
示例
1. Discover
AI 代理发现页面上声明的可用工具
代理发现 searchFlights 工具可用
2. Schema
代理获取工具的输入参数结构定义
获取 origin(string)、destination(string)、date(date) 参数
3. Execute
代理调用工具,传入参数,获取结构化结果
传入 {origin: "北京", destination: "上海", date: "2026-04-20"},获得航班列表

效率对比

传统方式(无 WebMCP):
  1. 截图页面 → 2. 解析 DOM → 3. 找到搜索表单 → 4. 识别输入字段
  → 5. 模拟输入 → 6. 点击搜索 → 7. 等待加载 → 8. 截图结果
  → 9. 解析结果页面 → 10. 提取数据
  (10+ 步操作,每步消耗 Token 和时间)

WebMCP 方式:
  1. 发现 searchFlights 工具 → 2. 获取 Schema → 3. 调用工具
  (3 步操作,一次结构化调用完成)

7. WebMCP vs MCP

7.1 核心定位

MCP = 公司客户服务呼叫中心(随时随地可用,处理核心任务)WebMCP = 实体店专家(仅在特定网站可用,帮助代理更好地了解界面)

WebMCP 不是 MCP 的扩展或替代品,而是一组受 MCP 启发的浏览器 API。两者是合作伙伴,而非竞争对手

7.2 详细对比

维度
MCP
WebMCP
协议
JSON-RPC
浏览器原生 API
运行环境
独立服务器 / 守护进程
浏览器标签页
用途
让代理随时随地获取数据和执行操作
让实时网站在用户访问时可立即与代理互动
生命周期
持久(服务器和守护程序)
临时(标签页绑定)
连接性
全球(桌面、移动端、云端)
特定于环境(浏览器代理)
界面互动
无头和外部
集成到浏览器中,可访问 DOM
认证方式
需单独设置
继承浏览器会话(SSO、Cookies)
发现机制
代理专用注册流程
用户访问网页期间在网页上注册的工具
功能范围
工具 + 资源 + 提示
仅工具

(当前版本)
实现语言
Rust、Python、TypeScript SDK
JavaScript / HTML 属性
用例
执行后台 API 操作
在实时网页界面上导航和操作
页面状态访问
无直接访问
完全访问
成熟度
广泛采用
早期预览

7.3 互补使用模式

最有效的智能体应用会同时使用 MCP 和 WebMCP

┌──────────────────────────────────────────────────────┐
│                  AI 智能体架构                        │
│                                                      │
│  ┌──────────────────┐    ┌────────────────────────┐  │
│  │   MCP Server     │    │      WebMCP            │  │
│  │   (基础服务层)    │    │   (情境化界面层)        │  │
│  │                  │    │                        │  │
│  │  - 核心业务逻辑   │    │  - 浏览器内交互        │  │
│  │  - 数据检索       │    │  - 实时页面操作        │  │
│  │  - 后台任务       │    │  - 上下文感知执行      │  │
│  │  - 跨平台服务     │    │  - 会话继承认证        │  │
│  └──────────────────┘    └────────────────────────┘  │
└──────────────────────────────────────────────────────┘
  • MCP 作为基础服务层:处理核心业务逻辑、数据检索和后台任务,确保服务与平台无关且始终可用
  • WebMCP 作为情境化界面层:让代理在用户打开网站时快速可靠地代表用户执行操作

8. 代码示例

8.1 电商网站 — 商品搜索与结算

<!-- 声明式:商品搜索表单 -->
<formtoolname="searchProducts"tooldescription="搜索商品">
<inputname="keyword"type="search"placeholder="搜索关键词" />
<selectname="category">
<optionvalue="electronics">电子产品</option>
<optionvalue="clothing">服装</option>
<optionvalue="books">图书</option>
</select>
<inputname="maxPrice"type="number"placeholder="最高价格" />
<buttontype="submit">搜索</button>
</form>
// 命令式:购物车结算
let checkoutHandle = null;

functionregisterCheckoutTool(cartId, itemCount{
if (checkoutHandle) checkoutHandle.unregister();

if (itemCount > 0) {
    checkoutHandle = navigator.modelContext.registerTool({
name"checkout",
description`结算购物车中的 ${itemCount} 件商品`,
inputSchema: {
type"object",
properties: {
shippingAddress: { type"string"description"配送地址" },
paymentMethod: {
type"string",
enum: ["credit_card""alipay""wechat_pay"],
description"支付方式"
          }
        },
required: ["shippingAddress""paymentMethod"]
      },
executeasync ({ shippingAddress, paymentMethod }) => {
const result = await fetch("/api/checkout", {
method"POST",
headers: { "Content-Type""application/json" },
bodyJSON.stringify({ cartId, shippingAddress, paymentMethod })
        });
returnawait result.json();
      }
    });
  }
}

8.2 旅行预订 — 航班搜索

navigator.modelContext.registerTool({
name"searchFlights",
description"搜索可用航班,支持单程和往返",
inputSchema: {
type"object",
properties: {
origin: { type"string"description"出发城市或机场代码" },
destination: { type"string"description"到达城市或机场代码" },
departDate: { type"string"format"date"description"出发日期" },
returnDate: { type"string"format"date"description"返程日期(往返时必填)" },
passengers: { type"integer"minimum1maximum9description"乘客人数" },
cabinClass: {
type"string",
enum: ["economy""business""first"],
description"舱位等级"
      }
    },
required: ["origin""destination""departDate""passengers"]
  },
executeasync (inputs) => {
const response = await fetch("/api/flights/search", {
method"POST",
headers: { "Content-Type""application/json" },
bodyJSON.stringify(inputs)
    });
returnawait response.json();
  }
});

8.3 内容管理 — 文章发布

let publishHandle = null;

// 仅在编辑器加载完成后注册发布工具
editor.onReady(() => {
  publishHandle = navigator.modelContext.registerTool({
name"publishArticle",
description"发布当前编辑的文章",
inputSchema: {
type"object",
properties: {
title: { type"string"description"文章标题" },
tags: {
type"array",
items: { type"string" },
description"文章标签"
        },
scheduleTime: {
type"string",
format"date-time",
description"定时发布时间(可选)"
        }
      },
required: ["title"]
    },
executeasync ({ title, tags = [], scheduleTime }) => {
const content = editor.getContent();
const result = await api.publish({ title, content, tags, scheduleTime });
return { articleId: result.id, url: result.url, status"published" };
    }
  });
});

// 离开编辑页面时注销
editor.onLeave(() => {
if (publishHandle) publishHandle.unregister();
});

9. 安全性考虑

9.1 安全模型

特性
说明
浏览器沙箱
在浏览器安全模型内运行,保护用户数据
临时性
工具仅在标签页打开时存在,关闭即失效
会话继承
继承浏览器现有认证,无需额外暴露凭证
用户控制
工具执行需要用户上下文,代理不可在用户不知情时操作

9.2 安全最佳实践

实践
说明
⛔ 不在客户端存储 API 密钥
所有敏感操作应在服务器端执行
🚦 实施速率限制
防止滥用和意外的高额 API 费用
✅ 验证用户输入
对所有传入参数进行严格验证
🔒 使用 HTTPS
确保所有通信都经过加密
🛡️ 最小权限原则
仅注册必要的工具,避免暴露过多内部逻辑
📝 审计日志
记录工具调用行为,便于追踪和排查

10. 性能与优化

10.1 性能优势来源

优势
原因
通信即时
浏览器内部通信,无需远程服务器往返
Token 消耗低
结构化 Schema 替代完整 DOM 解析,减少 67.6% 处理需求
执行可靠
明确的函数调用替代模拟点击,不受 UI 变化影响
持久耐用
工具连接到应用逻辑而非设计,重新设计网站不影响代理交互

10.2 优化建议

建议
说明
📦 实现缓存机制
对频繁请求的数据进行缓存
🌊 使用流式响应
对于长文本响应,使用流式传输提升用户体验
📨 批量处理请求
合并多个小请求以减少网络开销
⏱️ 设置超时
为工具执行设置合理的超时时间
🎯 精简 Schema
仅声明必要的参数,避免过大的 inputSchema

11. 浏览器启用与调试

11.1 启用 WebMCP(Chrome 146+)

步骤
操作
1
确保 Chrome 版本 ≥ 146.0.7672.0(可能需下载 Chrome Beta/Canary)
2
导航至 chrome://flags/#enable-webmcp-testing,设置为 “Enabled”
3
重启 Chrome
4
安装 Model Context Tool Inspector 扩展(从 Chrome Web Store)

11.2 调试工具

工具
说明
Model Context Tool Inspector
检查任何页面上注册的工具,并使用自定义参数测试调用
Chrome DevTools Console
查看 WebMCP 相关消息和日志
Network 面板
监控工具调用通信

11.3 验证工具注册

// 在 DevTools Console 中检查已注册的工具
// 具体API可能随版本变化
console.log(navigator.modelContext);

12. 应用场景

12.1 典型场景

场景
说明
推荐API
电商购物
商品搜索、加入购物车、结算
声明式 + 命令式
旅行预订
航班/酒店搜索、预订、支付
命令式
内容管理
文章发布、编辑、审核
命令式
客户服务
订单查询、工单提交、退款
声明式 + 命令式
身份认证
登录、注册、密码重置
声明式
数据分析
数据查询、图表生成、报告导出
命令式
SaaS 仪表板
项目管理、配置修改、通知设置
命令式

12.2 行业影响

WebMCP 对 Web 生态的范式意义:

  • SEO → AEO:优化不再仅关乎”被发现”,更关乎”被可用”(being usable)
  • 移动端响应式的类比:早期实现 Agent-Ready 的网站将获得复合优势,与移动端响应式设计的先发优势逻辑一致
  • 从内容思维到操作思维:WebMCP 奖励事务性清晰度,而非仅信息性内容

13. 最佳实践

13.1 接入策略

优先级
行动
要点
1
审计关键用户操作
识别 5–10 个最重要操作(表单/预订/搜索/结算/工单)
2
确保表单卫生
清晰标签、可预测输入、稳定重定向、洁净 HTML
3
从声明式开始
改造成本最低,先让核心表单 Agent-Ready
4
逐步添加命令式工具
为复杂交互场景添加 JavaScript 工具注册
5
动态管理工具生命周期
根据页面状态注册/注销工具

13.2 Schema 设计原则

// ✅ 好的 Schema:清晰、明确、有约束
{
name"searchHotels",
description"搜索指定城市的可用酒店",
inputSchema: {
type"object",
properties: {
city: { type"string"description"城市名称" },
checkIn: { type"string"format"date"description"入住日期" },
checkOut: { type"string"format"date"description"退房日期" },
guests: { type"integer"minimum1maximum10description"入住人数" }
    },
required: ["city""checkIn""checkOut""guests"]
  }
}

// ❌ 差的 Schema:模糊、缺少约束
{
name"search",
description"搜索",
inputSchema: {
type"object",
properties: {
q: { type"string" }
    }
  }
}

13.3 错误处理

navigator.modelContext.registerTool({
name"queryOrder",
description"查询订单状态",
inputSchema: {
type"object",
properties: {
orderId: { type"string"description"订单编号" }
    },
required: ["orderId"]
  },
executeasync ({ orderId }) => {
try {
const order = await fetch(`/api/orders/${orderId}`).then(r => r.json());

if (!order) {
return { error"NOT_FOUND"message`未找到订单: ${orderId}` };
      }

return {
orderId: order.id,
status: order.status,
estimatedDelivery: order.estimatedDelivery
      };
    } catch (error) {
return {
error"INTERNAL_ERROR",
message"查询订单时发生错误,请稍后重试"
      };
    }
  }
});

14. 常见问题

Q1: WebMCP 会取代 MCP 吗?

不会。 两者互补而非竞争。MCP 适用于后端/AI 操作,WebMCP 适用于浏览器内实时交互。最有效的方案是同时使用两者。

Q2: WebMCP 可以在生产环境使用吗?

目前处于早期预览阶段,建议先在测试环境评估。生产使用需关注官方更新和安全公告。

Q3: WebMCP 支持哪些浏览器?

当前仅 Chrome 146+ 支持且需启用功能标志。预期 2026 年中后期获得更广泛的浏览器支持。

Q4: 声明式和命令式 API 如何选择?

场景
推荐
已有标准 HTML 表单
声明式(改造成本极低)
复杂交互、动态状态
命令式(灵活可控)
混合场景
两者结合使用

Q5: WebMCP 与传统 REST API 的区别?

WebMCP 专为 AI 模型交互设计,支持工具发现、动态参数绑定和结构化响应;REST API 更适合传统客户端-服务器通信。WebMCP 不是替代 REST API,而是在其之上增加 AI 代理可理解的结构化层。

Q6: 如何调试 WebMCP?

  • 使用 Model Context Tool Inspector 扩展检查已注册工具
  • 使用 Chrome DevTools Console 查看 WebMCP 消息
  • 使用 Network 面板 监控工具调用通信

Q7: 现有网站改造需要多少工作量?

  • 声明式 API:仅需在表单上添加 toolname 和 tooldescription 属性,改动极小
  • 命令式 API:需要编写 JavaScript 代码注册工具,工作量取决于交互复杂度
  • 无论哪种方式,都无需修改服务端

15. 参考资源

资源
链接
Chrome Developers 博客
何时使用 WebMCP 和 MCP
arXiv 论文
webMCP: Efficient AI-Native Client-Side Interaction
Awesome WebMCP
GitHub 资源列表
MCP 官方文档
modelcontextprotocol.io
MCP GitHub
github.com/modelcontextprotocol
W3C 社区组
W3C Web Machine Learning Community Group