Chrome 146 WebMCP 早期预览:浏览器支持与当前 API

February 21, 2026
区分历史 Chrome 146 预览和当前 document.modelContext 草案,在实际浏览器中验证工具发现、调用和不支持时的回退。
Chrome 146 WebMCP 早期预览:浏览器支持与当前 API
chrome 146
webmcp
google
浏览器
devtrial

更新于 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.modelContextdocument.modelContext
handler 或 callbackexecute
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观察注册与页面信号,不调用目标工具。模拟捕获与原生捕获分别标记;模拟结果不能证明扫描浏览器原生支持,也不能证明代理能够完成业务流程。

查看评分指南理解跳过项和规则版本。历史分数与当前分数比较时,还应考虑规则是否变化。

实际浏览器验收清单

  1. 确认安全上下文和真实 API 可用性。
  2. 注册一个无害工具,检查发现到的定义。
  3. 在支持的客户端调用,核对返回值及错误。
  4. 检查无效输入与生命周期清理。
  5. 关闭实验能力后验证人类操作仍正常。

声明式方案见WebMCP 实现概览。上述来源没有公布所有浏览器统一支持的日期,也不能用预览状态承诺搜索排名。

Chrome 146 WebMCP 早期预览:浏览器支持与当前 API | WebMCP Verify