WebMCP — Make Any Website Agent-Ready について
WebMCPは、ブラウザーエージェント向けにウェブサイトのツール登録と実行・認可の制御を行うTypeScriptツールキットです。Reactのライフサイクル対応と、外部ウォレットでユーザーが操作ごとに確認・承認する取引デモを備えます。
主な機能
- 01ブラウザーツールの登録と実行
- 02入力スナップショット検証と並行数制限
- 03確認・セキュリティ監査ラッパー
- 04Reactプロバイダーとツールフック
- 05宣言的フォームからのツール登録
- 06非カストディ型取引デモ
活用シーン
- 01ウェブサイトに構造化ツールを公開
- 02Reactアプリでツール登録を管理
- 03機密操作にユーザー確認を要求
- 04Baseチェーンのウォレット取引を練習
MCP 対応
ブラウザー側のWebMCPツール登録を提供しますが、stdio MCPサーバーや実行トランスポートは含みません。Expressミドルウェアは発見メタデータを提供できますが、認証や操作実行は担いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
webmcp-sdk
ブラウザーエージェント向けの TypeScript ツールです。明示的な認可、制限付きの実行、React のライフサイクル対応、および非カストディアル型トランザクションのリファレンスアプリを備えています。
**0.6.0 はセキュリティ上の破壊的変更を含むリリース候補です。**既存のレジストリリリースには、これらの修正は含まれていません。移行ガイドをお読みください。リリース候補は未公開です。このプロジェクトは、資産を保管せず、攻撃を受けないことも保証しません。
トランザクションスタジオを試す
Node 22.22.2 以降(22 LTS)、または 24.15 以降(24 LTS)と npm を用意し、リポジトリをチェックアウトして、次のコマンドを実行します。
npm ci --ignore-scripts
npm run build
npm run studio:dev
Vite の localhost URL を開きます。練習モードでは架空の残高、価格、レシートを使用し、署名やブロードキャストは行いません。ライブウォレットモードでは、Base チェーン 8453 上の注入された EIP-1193 ウォレットを使用します。このリリース候補では、ETH、Base ネイティブ USDC、WETH の送金、および設定済みの Uniswap V3 ルーターと手数料ティア 500 を介した USDC/WETH の exact-input スワップに対応しています。エージェントは状態を読み取り、アクションを提案します。人間が個々の正確な承認またはトランザクションを別途確認し、外部ウォレットで認可します。
提案には、アカウント、チェーン、保存済みポリシーバージョン、正確な金額、最小出力額、有効期限 120 秒が紐付けられます。スリッページの上限は 1%です。提案ごとの上限では、支出の総額は制限されません。キー/シードの入力、エージェントによる任意の calldata、無制限の承認、エージェントによる署名ツールは提供されません。保存済みポリシーはモードを変更しても保持されます。メモリー上のアクティビティは、再読み込みまたはモード変更時に消去されます。
送信されたハッシュは保留中の状態です。確認する前に、一致するトランザクションフィールド、レシート、トークンイベントを検証する必要があります。送信結果が曖昧な場合や RPC が失敗した場合は、保留中の状態が維持されます。マイニング済みブロックへの取り込みは、取り消し不能なファイナリティではありません。再試行する前に、ウォレットの保留中のアクティビティを確認してください。脅威モデルとリリース手順書を参照してください。
SDK のクイックスタート
公開後にレビュー済みパッケージをインストールするか、このブランチをローカルでビルドしてください。公開サブパスは CommonJS、ES Modules、TypeScript の宣言ファイルを提供します。
import { createKit, defineTool } from "webmcp-sdk";
const kit = createKit({ prefix: "demo" });
kit.register(
defineTool(
"hello",
"Return a greeting for the supplied name.",
{
type: "object",
properties: { name: { type: "string", maxLength: 100 } },
required: ["name"],
additionalProperties: false,
},
({ name }) => ({ message: `Hello, ${name}!` }),
),
);
console.log(await kit.invoke("demo.hello", { name: "Bill" }));
// { message: 'Hello, Bill!' }
await kit.ready();
// Later: kit.unregisterAll();
ネイティブブラウザー API がなくても、直接呼び出せます。デフォルトのアダプターは document.modelContext、execute、非同期登録、登録用 AbortSignal を使用します。登録エラーを確認するには、ready() を待機してください。ネイティブ WebMCP は実験的な機能であり、ブラウザーとオリジンに依存します。ローカル実行とネイティブの準備完了状態を区別するには、標準のブラウザーサンプルを使用してください。レガシーの navigator アダプターを使用するには、browserAdapter: 'legacy' の明示的な指定と、別途の互換性テストが必要です。アノテーションは助言的なメタデータであり、認可ではありません。
実行と認可
入力は有限な独自データの JSON スナップショットであり、非同期フックの前に再帰的に凍結されます。危険なキー、循環参照、任意のプロトタイプ、アクセサー、無効なスキーマは拒否されます。検証は unsafe-eval なしで動作します。対応するスキーマの制限は、意図的な互換性上の制約です。
デフォルト値:同時実行数 10、キューに追加/受け入れ可能な待機数 100、期限 30 秒、入力サイズ 65,536 バイト、ノード数 1,000、深さ 10。ハンドラーには省略可能な第 2 引数 { signal } が渡されます。キャンセルを伝播させ、操作境界で現在の権限を確認してください。期限を過ぎても同期 JavaScript の実行を中断したり、協調しない Promise を強制停止したりすることはできません。未解決の処理は、解決するまで容量/リースを保持します。
import { withConfirmation, withSecurity } from "webmcp-sdk/security";
// reviewedTool, showReviewDialog and writeAuditEvent are application-owned.
const secured = withSecurity(
withConfirmation(
reviewedTool,
"Approve these reviewed terms?",
showReviewDialog,
),
{
rateLimit: { maxInvocations: 10, windowMs: 60_000 },
audit: true,
onAudit: writeAuditEvent,
},
);
kit.register(secured);
withConfirmation では、明示的なプロバイダーがリテラル値 true を返す必要があります。kit.requestUserInteraction では、別途、キット設定の confirmationProvider が必要です。金融取引の確認では、変更不能な条件を紐付ける必要があります。汎用的な真偽値のダイアログだけでは不十分です。audit: true を使用する場合は、信頼できる同期シンクが必要です。セキュリティ監査ではデフォルトで入力を省略し、ハンドラーの生の結果やエラーを記録することはありません。明示的に許可されたフィールドには、認証情報キーのレダクションが適用されます。キットの一般的なコールバック/ログには入力が含まれる場合があり、レダクションされた監査ストアではありません。blockedPatterns は数が制限されたリテラル部分文字列であり、包括的なプロンプトインジェクションフィルターではありません。
React と宣言的フォーム
webmcp-sdk/react の WebMCPProvider を使って、セッションポリシーの適用範囲を設定します。ツールフックは確定済みのハンドラー/メタデータを公開し、コールバックの権限が変わると古い登録を取り消し、自身が所有する登録のみを削除します。設定を所有するプロバイダーでは、設定の変更は拒否されます。ポリシーを置き換えるには再マウントしてください。指定されたキットは置き換えられる場合があります。安定したコールバックは不要な登録解除を避けますが、すべてのアカウント/ポリシー依存関係を保持する必要があります。
registerDeclarativeTools(kit, root, { handlers }) は、明示的な信頼済みハンドラーマップを通じて、注釈付きフォームを登録し、クリーンアップ関数を返します。HTML で実行可能なハンドラーを定義することはできません。サポートされるフィールドと認可の責任については、宣言的ツールを参照してください。
x402 とディスカバリー
x402 決済: セキュリティメンテナンスのため一時停止中です。本番環境では使用しないでください。
webmcp-sdk/middleware/express はディスカバリーメタデータを提供するものであり、実行トランスポートでも認証システムでもありません。カタログはデフォルトで拒否します。true を返す認可関数を指定するか、意図的に publicManifest: true を選択してください。カタログのレスポンスには private, no-store が適用されます。実際の操作には、別途認証と認可が必要です。
Python のディスカバリーは独立したソースディストリビューションです。npm では Python のインポートはインストールされません。stdio サーバー、webmcp-sdk serve、ProxyRelay クラス、AuditLog クラスは提供されていません。
検証
npm run verify:release
リリース記録では、過去のエビデンスと新たに再構築されたチェックを区別しています。完全なゲートには、フォーマット、型チェック、SDK/Studio のテストとビルド、パッケージ化した利用側での検証、ネイティブブラウザー/CSP、決定論的なウォレットフロー、アクセシビリティ/モバイルのチェック、Python のテスト、依存関係の監査が含まれます。Python のインストールには、別途 wheel のインポートチェックがあります。自動チェックによって公開、デプロイ、実際の資金の送金が行われることはありません。報告については SECURITY.md を参照してください。MIT ライセンス。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。