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年2月10日の発表は宣言型・命令型の方式と早期プレビュープログラムを紹介しました。試作できることと、すべてのブラウザで標準有効になることは異なります。呼び出し可能なエージェントが自動的に付属するわけでもありません。

元の記事以降にインターフェースは変わりました。現在の編集者草案と実際のブラウザ設定を確認してください。当サイトの10月10日の検証記録では、WebMCPを有効にしたChrome 154でネイティブ発見を確認しています。これは特定の検証環境の結果です。

コードをコピーする前に確認

安全なコンテキストで次を確認します。

console.log({
  secureContext: window.isSecureContext,
  modelContextAvailable: Boolean(document.modelContext)
});

APIがなければ通常の操作を維持し、そのビルドのプレビュー手順を確認します。実験機能の有効化は開発環境の設定であり、すべての訪問者に仮定できません。HTTPSとローカル開発の条件をそれぞれ検証してください。

過去の名前と現在の名前

古い例に見られるもの現在の草案
navigator.modelContextdocument.modelContext
handlerまたはcallbackexecute
listTools()getTools()
unregisterTool()登録時のAbortSignalによる解除

これは移行の手掛かりです。過去のすべてのビルドが表の全メソッドを実装したという意味ではありません。草案と実装に差がある場合もあるため、能力を確認してから呼び出します。

小さなツールから登録

外部サービスを使わない読み取り専用例から始め、未対応環境でもページを使えることを確認します。

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とエージェント連携は別の要素です。

スキャナーから分かること

WebMCP Verifyは登録とページの情報を観察し、対象ツールを呼び出しません。シミュレーションによる捕捉とネイティブ捕捉は区別します。前者だけではブラウザのネイティブ対応や業務操作の完了は証明できません。

スコアガイドでスキップ項目とルール版を確認してください。過去のスコアとの比較ではルールの違いも考慮します。

ブラウザ検証の手順

  1. 安全なコンテキストと実際のAPIを確認する。
  2. 無害なツールを登録し、発見した定義を確認する。
  3. 対応クライアントで実行し、返り値とエラーを見る。
  4. 無効入力と登録解除を検証する。
  5. 実験機能を無効にし、人が使う操作も確認する。

フォーム方式は実装の概要を参照してください。これらの資料には全ブラウザ共通の対応日は示されておらず、プレビューを根拠に検索順位も約束できません。

Chrome 146 WebMCP早期プレビュー:ブラウザ対応と現在のAPI | WebMCP Verify