WebMCP 页面工具¶
Site tools 是桌面应用对 WebMCP 提案的实现,让 Agent 调用网站现有能力,与用户共享正在打开的页面和登录会话。它不是远程 MCP Server,也不需要为了发现页面工具先安装一个 MCP 插件。接口依据与限制见参考资料。
适用范围¶
| 状态属于哪里 | 优先入口 |
|---|---|
| 远程已保存对象,页面是否打开不影响操作 | MCP / 产品 CLI |
| 当前编辑草稿、选择、视口、筛选或画布 | WebMCP |
| 用户对选区的意见与参数提议 | Browser Annotation API |
| 最终外观、图片内容或拖拽行为 | 浏览器视觉核验,必要时人工接管 |
官方当前限定 Site tools 在桌面应用内置浏览器运行,需要支持的模型、提供工具的页面及账号或工作区策略允许。普通 Chrome、CLI 或仅支持远程 MCP 的宿主不能据此宣称兼容。
WebMCP 可在顶层页面、同源与跨源 iframe 中被发现,各 frame 都需安全上下文,并按提供工具的来源检查权限。Browser Annotation API 的顶层文档限制与此不同。
发现与执行¶
sequenceDiagram
participant P as 页面
participant H as 内置浏览器
participant A as Agent
participant B as 原业务用例
P->>P: DOM 就绪后检测注册API
P->>H: 注册窄工具与输入Schema
H-->>A: 发现当前frame的工具
A->>H: 读取上下文与精确对象
H->>H: 逐调用安全审查及站点权限
H->>P: 调用当前注册
P-->>A: 对象、修订、草稿与可用动作
A->>H: 执行已获准操作
H->>P: 调用工具
P->>B: 重查身份、修订和原操作
B-->>P: 当前回执
P-->>A: 结构化结果与核验位置
A->>H: 按需检查渲染结果
Note over P,H: 离页或注册变化后重新发现,不沿用旧作用域
页面工具名、说明和结果均是不可信网站内容。只读提示不是授权证明,注册存在也不代表站点已允许调用。
注册一个上下文读取工具¶
以下片段展示命令式注册和精简输出。应用中的正式上下文应由当前状态容器提供;示例使用 DOM 数据说明边界,不提供业务写接口。
<section
id="review"
data-resource-id="document-42"
data-revision="7"
data-selected-id="paragraph-3"
aria-label="文档审核"
>
<h1>文档审核</h1>
</section>
<script type="module">
const panel = document.getElementById("review");
const modelContext = document.modelContext;
if (typeof modelContext?.registerTool === "function") {
try {
await modelContext.registerTool({
name: "get_review_context",
description: "读取当前文档、修订及选中段落,不保存或批准内容。",
inputSchema: {
type: "object",
properties: {},
additionalProperties: false,
},
annotations: { readOnlyHint: true },
execute: async () => {
if (!panel.isConnected) throw new Error("Review page is no longer active");
return {
resource_id: panel.dataset.resourceId,
revision: panel.dataset.revision,
selected_id: panel.dataset.selectedId || null,
};
},
});
} catch (error) {
// 页面本身继续可用,错误交给应用现有诊断入口。
console.warn("Review site tool registration failed", error.name);
}
}
</script>
document.modelContext.registerTool 是官方当前示例的检测入口,不是 navigator.modelContext。工具描述、Schema与实际行为一致;不依赖 CSS 类、坐标或完整页面抓取来识别业务对象。
WebMCP 也提供声明式表单方向。表单属性、取消、注册替换与撤销 API 属所冻结的 WebMCP/宿主版本,采用方必须按对应文档实现和测试;不要凭空假定 registerTool() 返回某种 dispose() 句柄。
让第一次调用就定位正确¶
上下文读取保留当前账号/项目范围、对象ID、修订、草稿状态、选区、能力缺口和精确下一步。列表只给与当前目标有关的摘要,精确内容再按ID读取。
| 动作示例 | 输入约束 | 可核验结果 |
|---|---|---|
get_review_context |
无任意查询或脚本参数 | 当前文档、修订、选区 |
get_review_region |
精确对象和区域ID | 区域内容、当前状态、来源修订 |
stage_review_comment |
原修订、区域ID、明确文字 | 草稿修订、已暂存意见、未提交状态 |
save_review_comments |
草稿修订、原操作键 | 已保存修订、操作引用或冲突 |
get_review_operation |
原操作引用 | 当前结果、未知或恢复入口 |
这些是产品动作设计示例,不是浏览器内置方法或新增 AXI 标准方法。业务操作名称应使用产品已有合同。
并发、草稿与生命周期¶
- 进入页面时注册;同一组件重挂载、热更新和重复初始化不能累积重复工具。
- 调用时读取当前状态,不捕获首次渲染时的旧账号、对象或修订。
- 路由、账号或对象改变时使旧操作失效;执行后核对响应仍属于当前上下文。
- 用户未保存内容、Agent暂存内容与服务端已保存内容分别表示。不能用工具返回“成功”掩盖实际未提交。
- 保存继续使用业务 CAS 和原操作键;迟到回执不覆盖用户新草稿。
- 取消页面调用不证明远程副作用已取消;未知时查询原操作。
- 页面销毁时按所冻结 API 清理拥有的注册、监听和任务;不移除其他模块注册。
权限与开启引导¶
flowchart TD
N[需要页面能力] --> F{注册API存在?}
F -->|否| D[继续结构化工具或普通页面]
F -->|是| R{工具注册成功?}
R -->|否| E[报告注册原因并保留页面]
R -->|是| P{宿主允许当前站点与调用?}
P -->|否| U[按当前宿主说明引导授权或接管]
P -->|是| C[执行窄工具并回读结果]
U --> K[用户选择后恢复原任务]
官方提供地址栏 Site tools 菜单查看 Available site tools 与近期调用;设置中的 Enable site tools 控制可用性。引导应按实际宿主版本显示,仅在当前任务需要时出现。组织策略禁止时不能要求用户绕过。
WebMCP不要求完整CDP、桌面Accessibility权限或任意站点权限。开发者模式的full CDP是另一个需明确批准的诊断能力,不是普通页面集成的安装步骤。
性能与验收¶
已知工具和对象直接调用,避免每轮重读全目录。动作返回小回执、真实修订和结果位置;大图和长文提供可精确取得的资源,不在结果中重复base64。高频拖拽和缩放留在本地交互,不逐帧经过模型。
分别统计工具发现、模型往返、页面执行、业务网络、视觉检查和用户等待。Site tools 每次调用仍有宿主审查,不能宣传“跳过浏览器审查所以更快”。
至少验证:API不存在、被拒绝、重复注册、SPA切换、iframe来源、用户并发编辑、失权、取消、回执丢失、页面关闭及正常语义控件路径。完整矩阵见验证。