WebMCPツールアノテーション:現在のヒントと実装例

March 2, 2026
現在のreadOnlyHint、untrustedContentHint、consequentialHint、debuggingを理解し、スキャナーによる評価範囲を確認します。
WebMCPツールアノテーション:現在のヒントと実装例
webmcpツールアノテーション
readOnlyHint
destructiveHint
mcpツール

2026年10月11日更新。アノテーションは、呼び出し前にツールの動作を説明するヒントです。権限制御ではありません。コールバックとサーバーで入力と認可を検証します。

現在のWebMCPのフィールド

現在の草案は四つのbooleanフィールドを定義しています。当サイトの以前の記事はMCPのフィールドと混同していたため、この改訂で区別しました。

フィールド説明する性質
readOnlyHintデータを読み取るだけで状態を変更しないか
untrustedContentHint作者から見て出力が信頼できない内容を含むか
consequentialHint重大な現実の影響や不可逆な結果を伴うか
debugging調査や開発者向けのツールか

MCPのdestructiveHint、idempotentHint、openWorldHintをそのまま現在のWebMCPフィールドとして説明することはできません。MCPサーバーも提供する場合は、そちらで対応するプロトコルの定義に従います。

実際の動作から判断する

自分が管理するページの見出しを読むだけなら、読み取り専用の説明が適切です。見出しに信頼できないユーザー投稿などが含まれる場合は、出力内容のヒントを再検討します。レコード作成、利用枠の消費、カート変更は、無料でも純粋な読み取りではありません。

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();

入力の見出しレベルを検証し、executeで実行します。ページを離れる際にはAbortSignalで登録を解除します。実際にAPIがあるブラウザでテストしてください。

三つの判断例

商品情報の検索

公開カタログを返すだけなら読み取り専用を検討できます。データの由来を説明し、第三者の文章が含まれる場合には信頼性のヒントも判断してください。

予約や支払い

予約作成や送金では影響を明確に扱います。ヒントだけでは確認画面、権限確認、取り消し処理は提供されません。通常の画面とツール経路の両方で実装と検証が必要です。

開発診断

開発者用診断にはdebuggingを使えます。購入やアカウント変更を確認なしで進めるために、調査用と偽るべきではありません。ラベルだけで特権診断を公開できるわけでもありません。

WebMCP Verifyの判定

ルール版2026-10-05のD4は標準重み2です。捕捉した現在の命令型ツールそれぞれに、認識するbooleanフィールドがあるかを確認します。falseもbooleanです。空オブジェクト、"true"という文字列、無関係な属性は対象になりません。

一部だけが条件を満たす場合はpartialになります。現在の命令型ツールがなければスキップします。宣言型だけの実装に不要な命令型ツールを追加する必要はありません。採点方法も参照してください。

スキャナーは宣言を観察し、動作を実行して真偽を証明するものではありません。合格は安全性の認証ではありません。

公開前に確認

副作用、入力検証、返す情報を確認し、値が事実を表すようにします。対応環境で発見と実行をテストし、通常の操作も維持してください。

無料スキャンで登録証拠を確認できます。環境とライフサイクルはブラウザガイド、フォームは実装概要で説明しています。

WebMCPツールアノテーション:現在のヒントと実装例 | WebMCP Verify