更新于 2026-10-11。本文保留原有 Chrome 146 URL,便于继续使用旧链接。初始预览属于历史背景;以下示例面向当前草案,不保证所有 Chrome 146 及更新版本都支持它。
早期预览说明了什么
Google 的 2026-02-10 公告介绍了声明式、命令式两种方式和早期预览计划。能够制作原型,不代表已在所有浏览器默认上线,也不代表浏览器自动配有可调用工具的代理。
原文发布后,接口已经变化。请阅读当前编辑草案,并验证准确的浏览器配置。本站 10 月 10 日验收记录包含启用 WebMCP 的 Chrome 154 原生发现测试;这是一个实测配置,不是整个发行版本的兼容性保证。
复制代码前先检测
在安全上下文检查:
console.log({
secureContext: window.isSecureContext,
modelContextAvailable: Boolean(document.modelContext)
});
接口不存在时,保持正常网站流程,并查所用构建的预览说明。实验功能配置是开发环境条件,不能假定所有访客都满足。分别验证 HTTPS 和本地开发上下文。
当前与历史 API 名称
| 较早示例可能出现 | 当前草案 |
|---|---|
navigator.modelContext | document.modelContext |
handler 或 callback | execute |
listTools() | getTools() |
unregisterTool() | 通过注册时的 AbortSignal 清理 |
这是一份迁移提示,不表示过去每个构建都提供过所有方法。实现可能落后于草案,调用前先检查能力。
先注册一个小工具
用不依赖外部服务的只读示例开始,并检查 API 缺失时普通页面仍可使用。
async function registerPageTools() {
const context = document.modelContext;
if (!context) return; // Keep the normal page available.
const registration = new AbortController();
await context.registerTool({
name: "getPageHeading",
description: "Read the first h1 or h2 heading on this page. No data is changed.",
inputSchema: {
type: "object",
properties: {
level: { type: "string", enum: ["h1", "h2"], description: "Heading level to read" }
},
additionalProperties: false
},
annotations: { readOnlyHint: true, untrustedContentHint: false, consequentialHint: false },
execute: async ({ level = "h1" }) => {
if (!["h1", "h2"].includes(level)) throw new Error("Invalid heading level");
return { heading: document.querySelector(level)?.textContent?.trim() || "" };
}
}, { signal: registration.signal });
window.addEventListener("pagehide", () => registration.abort(), { once: true });
}
void registerPageTools();
真实业务必须在回调中校验值,并保留服务端权限。所属视图卸载时清理注册。注解指南介绍如何准确描述工具效果。
发现和执行分别验证
在所测实现支持时,可这样发现注册工具:
async function findHeadingTool() {
const context = document.modelContext;
if (!context || typeof context.getTools !== "function") return null;
return (await context.getTools()).find(tool => tool.name === "getPageHeading") || null;
}
void findHeadingTool().then(console.log);
找到工具只说明该环境能发现定义。另用兼容客户端,以相同工具名和有效输入验证调用,记录浏览器构建、功能配置、结果和错误。代理集成与页面 API 是两件事,拥有 API 不意味着自动拥有代理。
网站扫描能说明什么
WebMCP Verify观察注册与页面信号,不调用目标工具。模拟捕获与原生捕获分别标记;模拟结果不能证明扫描浏览器原生支持,也不能证明代理能够完成业务流程。
查看评分指南理解跳过项和规则版本。历史分数与当前分数比较时,还应考虑规则是否变化。
实际浏览器验收清单
- 确认安全上下文和真实 API 可用性。
- 注册一个无害工具,检查发现到的定义。
- 在支持的客户端调用,核对返回值及错误。
- 检查无效输入与生命周期清理。
- 关闭实验能力后验证人类操作仍正常。
声明式方案见WebMCP 实现概览。上述来源没有公布所有浏览器统一支持的日期,也不能用预览状态承诺搜索排名。
