mcpField
A
agent-protocols

agent-protocols

github.com/bartwaardenburg開発0182 回インストール1 週間前に更新
リポジトリ

agent-protocols について

agent-protocols は、IsAgentReady.com の Agent Protocols の検査項目を修正するスキルです。WebMCP、MCP、A2A、OpenAPI などの標準プロトコルを通じて、サイト機能をエージェントが発見・利用できるようにする設定と検証の手順を提供します。

主な機能

  1. 01WebMCP フォームとツール注釈の設定
  2. 02A2A Agent Card の公開
  3. 03MCP の検出情報とサーバーカードの提供
  4. 04OpenAPI ドキュメントの公開と改善
  5. 05プロトコルエンドポイントと API 応答の検証

活用シーン

  1. 01Agent Protocols のスキャン失敗への対応
  2. 02OpenAPI によるサイト API の記述
  3. 03エージェントによるサイトの MCP サーバーの検出

MCP 対応

MCP の検出ファイルとサーバーカードの公開、および MCP エンドポイントの検証を支援します。スキャナーは同一オリジンの Streamable HTTP エンドポイントに接続して検出と一覧取得を行い、ツールは呼び出しません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bartwaardenburg/isagentready-skills --skill agent-protocols

インストール後、Claude Code で/agent-protocolsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
a2a-mcp-guide.md
checkpoints.md
gotchas.md
webmcp-guide.md

詳細

エージェントプロトコル

IsAgentReady.com のエージェントプロトコルカテゴリを修正します。このチェックポイントでは、標準プロトコルを通じてエージェントがサイトの機能を発見し、利用できるかをテストします。

多くのチェックポイントは、検出されたサーフェス(API、MCP、コマース)にのみ適用されます。API のないコンテンツサイトでは、それらのチェックポイントはスキップされます。WebMCP の結果は実験的なエビデンスであり、総合スコアには影響しません。

使用する場合

  • スキャンでエージェントプロトコル(旧 ID 4.x)の失敗が表示される場合。
  • エージェントが利用するフォーム、API、MCP サーバー、エージェントまたはショップがサイトにある場合。
  • ユーザーが WebMCP、A2A、MCP、OpenAPI、API カタログ、NLWeb またはエージェント決済を求めている場合。

使用しない場合

  • インタラクティブな機能や API のない静的コンテンツサイト。
  • セキュリティヘッダーまたは OAuth メタデータ:security-trust を使用してください。
  • JSON-LD:structured-data を使用してください。
  • robots.txt、llms.txt または AGENTS.md:ai-content-discovery を使用してください。

手順

  1. スキャン結果から失敗したチェックポイントを取得します。各結果には旧 ID(4.3)と安定 ID(ia.a2a-agent-card)があります。
  2. 安定 ID と同じアンカーを使って、修正ワークフローに移動します。
  3. 例をサイトに合わせて調整します。example.com をサイトのドメインに置き換えてください。
  4. 各 /.well-known/* ドキュメントを application/json として配信します。WAF と CDN がブロックしないことを確認してください。
  5. 検証コマンドを実行します。検証コマンドはすべて読み取り専用です。その後、isagentready results <domain> --checkpoint <stable-id> で再スキャンします。

$ARGUMENTS が指定されている場合は、修正する URL またはチェックポイントとして使用します。

チェックポイント

Strength は agentready.org の仕様レベル(MUST、SHOULD、MAY)です。Strength はスコアに影響しません。

LegacyStable IDNameAR IDsStrength
4.1ia.webmcp-declarativeWebMCP 宣言型 APIAR-ACT-07SHOULD
4.3ia.a2a-agent-cardA2A Agent CardAR-READ-06MAY
4.4ia.mcp-discoveryMCP ディスカバリーAR-ACT-03, AR-ACT-10MAY
4.5ia.openapiOpenAPI / API ドキュメントAR-ACT-02SHOULD
4.6ia.agents-jsonagents.jsonnoneMAY
4.7ia.webmcp-form-quality宣言型フォームの品質AR-ACT-07SHOULD
4.9ia.interactive-surface-coverageインタラクティブなサーフェスのカバレッジAR-ACT-07SHOULD
4.10ia.api-catalogAPI カタログ(RFC 9727)AR-READ-06, AR-ACT-02SHOULD
4.11ia.agent-skills-indexAgent Skills インデックスAR-ACT-06MAY
4.12ia.x402x402 決済AR-ACT-08MAY
4.13ia.mppMPP (x-payment-info)AR-ACT-08MAY
4.14ia.ucpUCPAR-ACT-08, AR-READ-06MAY
4.15ia.acp-manifestACP マニフェストAR-ACT-08, AR-READ-06MAY
4.16ia.ap2AP2AR-ACT-08MAY
4.17ia.openapi-qualityOpenAPI のアクション実行性の品質AR-ACT-02SHOULD
4.18ia.mcp-server-cardMCP サーバーカードの品質AR-ACT-04MAY
4.19ia.openapi-liveOpenAPI のライブ検証AR-ACT-02SHOULD
4.20ia.mcp-liveMCP のライブ検証AR-ACT-03SHOULD
4.21ia.ai-catalogAI カタログAR-FIND-04MAY
4.22ia.api-errorsAPI エラーレスポンスAR-ACT-02SHOULD
4.23ia.api-rate-limitsAPI レート制限ヘッダーAR-ACT-02MAY
4.24ia.developer-docs-link開発者向けドキュメントの見つけやすさAR-FIND-02, AR-READ-04MAY
4.25ia.mcp-appsMCP Apps UI リソースAR-ACT-05MAY
4.26ia.nlweb-askNLWeb ask エンドポイントAR-ACT-09MAY
4.27ia.agent-checkoutエージェントのチェックアウトAR-ACT-08MAY
4.28ia.sdk-cliSDK と CLIAR-ACT-06SHOULD
4.29ia.agent-task-accessエージェントのタスクアクセスAR-ACT-10MUST
4.30ia.docs-answer回答を提供するドキュメントページAR-READ-04, AR-FIND-02, AR-READ-05SHOULD

修正ワークフロー:WebMCP

4.1 WebMCP 宣言型 API

フォームまたはフィールドに toolname と tooldescription がある場合、または document.modelContext.registerTool() を使う場合に合格します。ハイフン区切りの属性(tool-name)または navigator.modelContext のみの場合は、部分的な評価になります。

  1. エージェントが必要とするフォームに注釈を付けます:
    <form action="/search" method="get" toolname="search_products"
          tooldescription="Search the product catalog by keyword and category">
      <label for="q">Search</label>
      <input id="q" name="q" toolparamdescription="Search keywords">
    </form>
    
  2. または、スクリプトでツールを登録します。references/webmcp-guide.md を参照してください。

検証:curl -sf https://example.com/ | grep -oE '<form[^>]*toolname="[^"]*"'

4.7 宣言型フォームの品質

toolname と tooldescription を持つフォームに適用されます。このチェックでは、snake_case の toolname、10 文字以上の tooldescription、各フィールドの name と <label>、および入力要素の toolparamdescription が求められます。

  1. 4.1 のフォームをパターンとして使用します。各フィールドに name、id、<label for>、toolparamdescription を指定します。

検証:curl -sf https://example.com/ | grep -oE 'tool(name|description|paramdescription)="[^"]*"'

4.9 インタラクティブ要素のカバレッジ

表示されているフォーム、検索入力、アクションボタン、フィルターコントロールの数を数えます。ツールのアノテーションでそれらがカバーされていれば合格です。非表示のコンテンツ、inert コンテンツ、template コンテンツはカウントされません。

  1. 4.1 と同様に、各検索フォーム、フィルターフォーム、メインアクションフォームにアノテーションを付けます。カバレッジ50%以上を目指してください。

確認:curl -sf https://example.com/ | grep -c '<form'(4.1 のツールフォームの数と比較します)

修正ワークフロー:エージェントと API の検出

4.3 A2A エージェントカード

/.well-known/agent-card.json(または /.well-known/agent.json)に、name、description、version、capabilities、完全な supportedInterfaces エントリーを含む A2A 1.0 カードがあれば合格です。レガシーな0.3カードは部分点です。

  1. カードを公開します:
    {
      "name": "Example Support Agent",
      "description": "Answers order and product questions",
      "version": "1.0.0",
      "capabilities": { "streaming": false, "pushNotifications": false },
      "supportedInterfaces": [
        { "url": "https://example.com/a2a/v1", "protocolBinding": "JSONRPC", "protocolVersion": "1.0" }
      ],
      "skills": [{ "id": "order_status", "name": "Order status", "description": "Get the status of an order" }]
    }
    

確認:curl -sf https://example.com/.well-known/agent-card.json | jq -e '.name and .description and .version and .capabilities and (.supportedInterfaces | length > 0)'

4.4 MCP の検出

/.well-known/mcp.json、/.well-known/mcp/server-card.json、または /.well-known/mcp/server-cards.json に name または serverInfo.name があれば合格です。レガシーな mcpServers マップも合格となります。

  1. サーバーカードを公開します(SEP-1649):
    {
      "name": "com.example/catalog",
      "title": "Example catalog",
      "version": "1.0.0",
      "description": "Search products and read order status",
      "remotes": [{ "type": "streamable-http", "url": "https://example.com/mcp" }]
    }
    

確認:curl -sf https://example.com/.well-known/mcp/server-card.json | jq -e '.name // .serverInfo.name'

4.18 MCP サーバーカードの品質

4.4 でカードが見つかった場合に適用されます。このチェックでは、識別情報とバージョン、トランスポートタイプとエンドポイント、機能、認証メタデータ、説明または手順を求めます。

  1. 4.4 のカードに capabilities(例:{ "tools": {} })と remotes[].headers の認証ヘッダーを追加します。references/a2a-mcp-guide.md を参照してください。

確認:curl -sf https://example.com/.well-known/mcp/server-card.json | jq -e '.version and .description and (.remotes | length > 0)'

4.20 MCP のライブ検証

スキャナーは、同一オリジンの Streamable HTTP エンドポイントに接続します。検出リクエストとリストリクエストのみを送信し、ツールは呼び出しません。

  1. 例として https://example.com/mcp のように、カードと同じオリジンで MCP エンドポイントを提供します。
  2. server/discover(MCP 2026-07-28)または initialize をサポートします。不明なメソッドには method-not-found(HTTP 404、JSON-RPC エラー)を返します。

確認:MCP には POST リクエストが必要なため、読み取り専用のシェルチェックはありません。再スキャンコマンドを使用してください。

4.25 MCP Apps UI リソース

4.20 で MCP エンドポイントが検証された場合に適用されます。tools/list のツールに _meta.ui.resourceUri があるか、resources/list に text/html;profile=mcp-app を返す ui:// リソースがあれば合格です。

  1. ツールを UI リソースにリンクします:
    { "name": "show_order", "description": "Show an order", "_meta": { "ui": { "resourceUri": "ui://orders/detail" } } }
    
  2. resources/read から ui://orders/detail を MIME タイプ text/html;profile=mcp-app で提供します。

確認:MCP には POST リクエストが必要なため、読み取り専用のシェルチェックはありません。再スキャンコマンドを使用してください。

4.5 OpenAPI/API ドキュメント

/openapi.json、/openapi.yaml、/swagger.json、/api-docs、または /.well-known/openapi に OpenAPI 3.x があれば合格です。Swagger 2.x は部分点です。HTML(例:Swagger UI)はカウントされません。

  1. 仕様を JSON として提供します。完全な例は references/a2a-mcp-guide.md にあります。
    { "openapi": "3.1.0", "info": { "title": "Example API", "version": "1.0.0" },
      "servers": [{ "url": "https://example.com/api" }], "paths": {} }
    

確認:curl -sf https://example.com/openapi.json | jq -e '.openapi | startswith("3.")'

4.17 OpenAPI の操作性の品質

有効な OpenAPI JSON に適用されます。各オペレーションには operationId、概要または説明、型指定されたパラメーター、2xx レスポンススキーマ、エラーモデルが必要です。

  1. 各オペレーションを完成させます:
    "/products": { "get": { "operationId": "listProducts", "summary": "List products",
      "parameters": [{ "name": "q", "in": "query", "schema": { "type": "string" } }],
      "responses": { "200": { "description": "Products", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductList" } } } },
        "default": { "description": "Error", "content": { "application/problem+json": { "schema": { "$ref": "#/components/schemas/Problem" } } } } } } }
    

確認:curl -sf https://example.com/openapi.json | jq '[.paths[][] | objects | select(.operationId == null)] | length'(0 を想定)

4.19 OpenAPI のライブ検証

スキャナーは、認証、パスパラメーター、必須入力、本文がない、同一オリジンの GET を1つ選択します。ドキュメントに記載された 2xx ステータスとメディアタイプを確認します。

  1. ドキュメントに、GET /api/status のような、ドキュメントに記載された 2xx レスポンスとコンテンツタイプを返す公開 GET を1つ記載します。

確認:curl -sf https://example.com/openapi.json | jq -r '.paths | to_entries[] | select(.value.get) | .key' | head -5

4.22 API エラーレスポンス

4.5 で OpenAPI が見つかった場合に適用されます。スキャナーは API ベース配下の存在しないパスにリクエストを送ります。404 または 410 と、title、detail、error、message、code、type、status のいずれかを含む JSON ボディがあれば合格です。

  1. 不明な API パスに対して問題詳細を返します:
    { "type": "about:blank", "title": "Not Found", "status": 404, "detail": "No route for /api/unknown" }
    

確認:curl -s -H 'Accept: application/json' https://example.com/api/isagentready-missing-check

4.23 API レート制限ヘッダー

4.19 と 4.22 のレスポンスを検査します。RateLimit、RateLimit-Policy、RateLimit-Limit のいずれかがあれば合格です。X-RateLimit-* または Retry-After のみの場合は部分点となります。

  1. API レスポンスに標準ヘッダーを送信します:RateLimit-Policy: "default";q=60;w=60 および RateLimit: "default";r=59;t=60。

確認:curl -sfI https://example.com/api | grep -iE '^(ratelimit|ratelimit-policy|ratelimit-limit):'

4.10 API カタログ(RFC 9727)

/.well-known/api-catalog が linkset 配列を返すと合格です。各エントリーには anchor と、item、service-desc、service-doc、status のいずれか1つ以上が必要です。

  1. リンクセットを application/linkset+json として公開します:
    { "linkset": [{ "anchor": "https://example.com/api",
      "service-desc": [{ "href": "https://example.com/openapi.json", "type": "application/openapi+json" }],
      "service-doc": [{ "href": "https://example.com/docs", "type": "text/html" }] }] }
    

確認:curl -sf -H 'Accept: application/linkset+json' https://example.com/.well-known/api-catalog | jq -e '.linkset | length > 0'

4.21 AI カタログ

同一オリジンの Link リレーション、または /.well-known/ai-catalog.json から見つけられます。このチェックでは、specVersion、メディアタイプと URL またはインラインデータのいずれかを含む、件数が上限内の entries リスト、および同一オリジンの URL が求められます。

  1. カタログを公開します:
    { "specVersion": "1.0", "entries": [
      { "identifier": "urn:air:example.com:mcp:catalog", "displayName": "Example MCP server",
        "type": "application/mcp-server-card+json", "url": "https://example.com/.well-known/mcp/server-card.json" } ] }
    

確認:curl -sf https://example.com/.well-known/ai-catalog.json | jq -e '.specVersion and (.entries | length > 0)'

4.11 Agent Skills インデックス

/.well-known/agent-skills/index.json(または /.well-known/skills/index.json)に skills 配列があると合格です。各エントリーには name、type、description、url、digest が必要です。

  1. インデックスを公開します(v0.2.0):
    { "$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
      "skills": [{ "name": "place-order", "type": "skill-md", "description": "Place an order",
        "url": "https://example.com/.well-known/agent-skills/place-order/SKILL.md", "digest": "sha256:<64 hex>" }] }
    

確認:curl -sf https://example.com/.well-known/agent-skills/index.json | jq -e '.skills | all(.name and .type and .description and .url and .digest)'

4.6 agents.json

/.well-known/agents.json または /agents.json に有効な空でない JSON ドキュメントがあれば合格です。

  1. エージェントリストを公開します:
    { "agents": [{ "name": "Support agent", "url": "https://example.com/a2a/v1", "protocol": "a2a" }] }
    

確認:curl -sf https://example.com/.well-known/agents.json | jq -e 'length > 0'

4.24 開発者向けドキュメントの見つけやすさ

サイトに API、MCP、A2A のいずれかのサーフェスがある場合に適用されます。ホームページから /docs、/developers、/api、/api-docs、/documentation、/reference のいずれかにリンクしているか、rel="service-doc" を含む Link ヘッダーを送信すると合格です。

  1. メインナビゲーションにドキュメントへのリンクを追加します:<a href="/docs">Developer docs</a>。

確認:curl -sf https://example.com/ | grep -oE 'href="/(docs|developers|api|api-docs|documentation|reference)[/"]'

4.30 回答につながるドキュメントページ

4.24 でドキュメントへのリンクが見つかった場合に適用されます。スキャナーはドキュメントページを1~3ページ読み取ります。ステータス 200、サーバー側でレンダリングされたテキスト、見出し、十分な量のテキスト、言語クラス付きのフェンス付きコードが求められます。

  1. ドキュメントをサーバー側で HTML にレンダリングします。各コードブロックに言語を指定します:
    <h2>Create a project</h2>
    <pre><code class="language-bash">curl https://example.com/api/projects</code></pre>
    

確認:curl -sf https://example.com/docs | grep -cE '<code[^>]*class="[^"]*language-'

4.28 SDK と CLI

ドキュメントから npm、PyPI、crates.io または Homebrew へのリンクがある、ドキュメントにインストールコマンドが記載されている、または llms.txt か AI Catalog に CLI が記載されている場合、合格です。

  1. SDK または CLI を公開します。インストールコマンドをドキュメントと llms.txt に追加します。
    ## Tools
    - [CLI](https://www.npmjs.com/package/@example/cli): `npm install -g @example/cli`
    

確認方法:curl -sf https://example.com/llms.txt | grep -iE 'npm|pypi|crates.io|brew|cli'

4.29 タスクサイト向け MCP サーバーまたは CLI

トランザクションサイトとタスクサイトに適用されます。4.20 で MCP サーバーが確認されるか、4.28 で CLI が見つかった場合、合格です。

  1. エージェントがサイトのタスクにアクセスできる直接的な方法を1つ用意します。検証済みの MCP サーバー(4.4 および 4.20)または CLI(4.28)を使用します。

確認方法:このチェックでは、4.20 と 4.28 の結果を使用します。再スキャンコマンドを使用してください。

4.26 NLWeb ask エンドポイント

実験的機能です。スキャナーは固定の無害な GET リクエストを /ask?query= に送信し、/mcp に NLWeb の ask ツールがあるかを確認します。schema.org の results を含む JSON が必要です。

  1. NLWeb ask エンドポイントを提供します。
    { "query": "help", "results": [{ "@type": "Article", "name": "Getting started", "url": "https://example.com/docs/start" }] }
    

確認方法:curl -sf 'https://example.com/ask?query=help' | jq -e '.results | type == "array"'

ワークフローの修正:エージェントコマース

これらのチェックポイントは、サイトにコマースのシグナル(Offer または Product の JSON-LD)が表示される場合にのみ適用されます。プローブは読み取り専用です。スキャナーがコマースエンドポイントに POST リクエストを送信することはありません。

4.12 x402 決済

/api、/api/v1 または / が、有効な x402 v2 チャレンジを含む HTTP 402 を Payment-Required ヘッダーで返す場合(Base64 JSON)、合格です。

  1. 有料エンドポイントでは、HTTP 402 を返し、次の JSON を Base64 エンコードして Payment-Required ヘッダーに設定します。
    { "x402Version": 2, "resource": { "url": "https://example.com/api/report" },
      "accepts": [{ "scheme": "exact", "network": "eip155:8453", "amount": "10000",
        "asset": "0xUSDCAddress", "payTo": "0xYourAddress", "maxTimeoutSeconds": 60 }] }
    

確認方法:curl -s -D - -o /dev/null https://example.com/api | grep -iE '^(HTTP/|payment-required:)'

4.13 MPP(x-payment-info)

/openapi.json 内の操作に有効な x-payment-info 拡張がある場合、合格です。

  1. 有料操作に拡張を追加します。"x-payment-info": { "price": "0.01", "currency": "USD", "protocols": ["x402"] }。

確認方法:curl -sf https://example.com/openapi.json | jq -e '[.paths[][] | objects | has("x-payment-info")] | any'

4.14 UCP

/.well-known/ucp が、version と空でない capabilities リストを含むプロファイルを返す場合、合格です。

  1. プロファイルを公開します。{ "version": "2026-01-11", "capabilities": [{ "name": "dev.ucp.shopping.checkout" }] }。

確認方法:curl -sf https://example.com/.well-known/ucp | jq -e '.version and (.capabilities | length > 0)'

4.15 ACP マニフェスト

/.well-known/acp.json に空でない flows リストと capabilities オブジェクトがある場合、合格です。

  1. ドキュメントを公開します。{ "flows": ["checkout"], "capabilities": { "checkout_sessions": "https://example.com/acp/checkout_sessions" } }。

確認方法:curl -sf https://example.com/.well-known/acp.json | jq -e '(.flows | length > 0) and (.capabilities | type == "object")'

4.16 AP2

4.3 の A2A Agent Card が AP2 拡張を宣言している場合、合格です。

  1. カードに追加します。"extensions": [{ "uri": "https://google.github.io/A2A/extensions/ap2", "required": false }]。

確認方法:curl -sf https://example.com/.well-known/agent-card.json | jq -e '[.extensions[]?.uri] | any(test("ap2"))'

4.27 エージェントのチェックアウト(Link、ACP チェックアウト)

実験的機能です。チェックアウトページに Stripe Link または Shared Payment Token のマーカーがある場合、または 4.15 の ACP ドキュメントに checkout_sessions エンドポイントがある場合、合格です。

  1. Payment Element で Stripe Link を有効にするか、Shared Payment Token を受け入れます。
  2. /.well-known/acp.json で ACP の checkout_sessions エンドポイントを宣言します。

確認方法:curl -sf https://example.com/.well-known/acp.json | jq -e '.. | strings | select(test("checkout_sessions"))'

重要な注意点

  1. tool-name(ハイフンあり)だけでは部分点しか得られません。toolname を使用してください。
  2. トップレベルに url があり、supportedInterfaces がない A2A 0.3 カードでは、部分点しか得られません。
  3. /api-docs の Swagger UI HTML は OpenAPI として認められません。
  4. 空の {} ドキュメントは、すべての検出チェックで不合格になります。
  5. WebMCP マニフェストファイルは認められません。これを定義する仕様はなく、これを読み取るエージェントもありません。

正しい例と誤った例については、references/gotchas.md を参照してください。

参考資料

コメント