mcpreflight について
mcpreflight は、MCP と x402 のエンドポイントを読み取り専用で事前検査するツールです。CLI、GitHub Action、MCP サーバーとして利用でき、接続前にハンドシェイクやツールスキーマ、支払い文書を確認したいエージェント利用者や CI 向けです。ツール呼び出しや支払いは行いません。
主な機能
- 01MCP 初期化とツールスキーマの確認
- 02x402 支払い文書の形式検証
- 03PASS、FAIL、UNKNOWN の判定
- 04CLI、GitHub Action、MCP サーバーでの実行
- 05CI 向けの安定した終了コード
活用シーン
- 01接続前に第三者の MCP エンドポイントを確認
- 02プルリクエストでスキーマ変更を検出
- 03支払いなしで x402 チャレンジを検査
MCP 対応
stdio MCP サーバーとして `schema_check` と `x402_inspect` を提供し、クライアント接続前のエンドポイント検査にも使えます。読み取り専用で、対象ツールの呼び出しや支払いの署名・決済は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcpreflight
任意の MCP または x402 エンドポイントを指定すると、1 つのコマンドで判定結果が得られます。読み取り専用です。API キー、ウォレット、ツール呼び出しは不要です。
npx -y @eidonze/mcpreflight schema https://your-mcp-server.example/mcp
Status: PASS | FAIL | UNKNOWN exit 0 | 1 | 2, so CI can gate on it
エージェントのクライアント、購入者、または CI ジョブが、ソースを確認できないエンドポイント(自分が所有していないエンドポイントも含む)に依存しようとしているときにお使いください。匿名の呼び出し元にエンドポイントがすでに送信している情報、つまり initialize ハンドシェイク、tools/list、HTTP 402 / x402 支払いドキュメントのみを読み取ります。
| 形式 | 実行方法 | 用途 |
|---|---|---|
| CLI | npx -y @eidonze/mcpreflight ... | その場でのチェックやスクリプト |
| GitHub Action | uses: xka0085-byte/mcpreflight@v1 | ハンドシェイク、ツールスキーマ、x402 チャレンジに変更があった場合に PR を失敗させる |
| stdio MCP サーバー | npx -y -p @eidonze/mcpreflight mcpreflight-mcp | エージェントが接続前にエンドポイントをチェックできるようにする |
インストール不要でお試しいただけます。ブラウザーで無料、登録なしでチェックを実行できます:check-your-mcp-endpoint
公式 MCP Registry には io.github.xka0085-byte/mcpreflight として掲載されており(一覧を見る)、GitHub Marketplace にも掲載されています。
概要
読み取り専用の MCP および x402 の事前チェックです。initialize と tools/list、x402 支払いドキュメントを読み取ります。API キー、ウォレット、支払い、ツール呼び出しは不要です。
これはエンドポイントの事前チェックであり、ソース監査ではありません。リポジトリを読み取るツールや、起動したサーバーにファジングを行うツールには、チェックアウトと起動コマンドが必要です。一方、このツールに必要なのは URL だけなので、自分が所有していないものも含め、エージェントがこれから接続するデプロイ環境をチェックできます。
自分が所有していないエンドポイントをチェックする
同じ読み取り専用チェックを、公式 MCP Registry に掲載されているすべてのリモートエンドポイントに対して毎週実行し、その結果をページと JSON で公開しています。
- Trust Directory — 35,325 個のエンドポイントに、それぞれ 1 件のレポートを掲載しています。ステータス、プロトコルのバージョン、ツール数、検出事項、認証情報が必要かどうかを確認できます。
- JSON API — 各エンドポイントの
/trust/api/{slug}.jsonに加え、バッチインデックスと JSON Schema を提供しています。API キー、登録、レート制限はありません。 - x402 census dataset — 同じスキャンのうち、支払いに関するデータです。35,327 個のエンドポイントのうち 1,583 個が x402 または HTTP-402 を告知しています。週次推移、レジストリ全体を基準とするステータス分布、ダウンロード可能な CSV/JSON を掲載しています。
数値を引用する前に、用語の意味を確認してください。2026-11-02 のスキャンでは、20,701 個のエンドポイントが匿名の要求に応答し(PASS)、10,236 個は設計上認証情報を必要とするため 401 で拒否し(AUTH_GATED)、167 個は到達可能でしたが無効で(FAIL)、4,223 個は匿名のハンドシェイクに応答しませんでした(UNKNOWN。通常、こちらから確認できない認証画面が原因です)。このデータから「停止している MCP サーバー」の数を算出すると誤りになります。レジストリの 41% は、認証情報なしではまったくチェックできません。
MCP サーバーとして使う
stdio エントリーポイントは bin/mcpreflight-mcp.mjs で、同じ npm パッケージの mcpreflight-mcp bin として公開されています。クライアントが期待する MCP のライフサイクルを実装しています。initialize はパッケージのバージョンを含む serverInfo mcpreflight を返し、notifications/initialized を受け付け、tools/list は 2 つのツールを返します。
| ツール | 内容 |
|---|---|
schema_check | サーバー URL に対して読み取り専用の事前チェックを実行します。initialize ハンドシェイク、tools/list の後、ツール入力スキーマを検証します。検出結果とともに PASS/FAIL/UNKNOWN を返します。ツールを呼び出すことも、データを読み取ることもありません。 |
x402_inspect | 支払いを行わずに HTTP 402 チャレンジを読み取ります。支払いドキュメントの形式、accepts[] エントリー、ディスカバリーマニフェストを検証します。署名も決済も行いません。 |
MCP クライアントに追加します:
{
"mcpServers": {
"mcpreflight": {
"command": "npx",
"args": ["-y", "-p", "@eidonze/mcpreflight", "mcpreflight-mcp"]
}
}
}
どちらのツールも CLI と同じ処理を行い、同じ検出結果を返すため、エージェントはエンドポイントに接続する前にチェックできます。設計上、読み取り専用です。トランスポートは指定した URL に GET と POST のみを送信し、キーを保持せず、ウォレットも持ちません。
使用例
- joxo は、設計上、認証で保護された MCP エンドポイントを提供しています。メンテナーは 0.2.0 のソースを読んで、チェックが依存関係のない単純な POST 2 回であることを確認した後、
npx @eidonze/[email protected] schema https://joxo.ai/api/mcpを実行し、意図的に設けられた OAuth 2.1 ゲートに対してUNKNOWN: MCP initialize returned HTTP 401という結果を得ました(#50)。この報告を受けて 0.3.0 では、OAuth チャレンジを応答のないエンドポイントとして扱うのではなく、RFC 9728 のリソースメタデータを検証したうえでAUTH_GATEDに分類します。2026-11-01 に再確認して問題をクローズしました:「このエンドポイントはサインインが必要なため、匿名でのハンドシェイクは想定されていません。AUTH_GATED の処理をありがとうございます。クローズします。」(#50)。 - cueframe-mcp のメンテナーは修正後にスキャンを再実行し、結果を報告しました。以前の npm 名である
@eidonze/[email protected]は、現在そのエンドポイントで終了コード 0 を返し、匿名のtools/listペイロードは 1,399,189 バイトから 550,377 バイトに減少しました。これはスキャナーの 1 MiB 制限を下回っています(#11)。 - awesome-mcp-lists の MCP ツールキット/テストツールに掲載されています(#226)。
これらはチェックの実行例であり、推奨を示すものでも、PASS によってサーバーの安全性が保証されるという主張でもありません。
まずはこちら
終了コードは CI 向けに固定されています:0 は PASS、1 は FAIL、2 は UNKNOWN/ネットワーク、3 は使用方法のエラーです。Node.js 18+ が必要です。
mode は schema(MCP ハンドシェイクとツールスキーマ)、inspect(x402 の単発の事前チェック)、baseline(現在の 402 チャレンジの形状を記録)、または drift(形状がコミット済みのベースラインから変化した場合にジョブを失敗させる)です。レポートはジョブのサマリーにも追加され、steps.<id>.outputs.status には終了コードが格納されます。そのため、後続のステップではログを解析せずに処理を分岐できます。
適切なガイドを探す
- 公開ドキュメントサイト
- MCP スキーマチェッカー
- x402 エンドポイントインスペクター
- MCP Registry における x402 決済:センサスデータセット
- MCP セキュリティ CI
- トラブルシューティング
- OAuth スコープと現在の制限
今すぐ実行
ツールを呼び出さずに MCP サーバーをチェックします:
npx @eidonze/mcpreflight schema https://your-mcp-server.example/mcp --json
支払いを行わずに x402 エンドポイントをチェックします:
npx @eidonze/mcpreflight inspect https://your-api.example/paid --method=POST --json
npx @eidonze/mcpreflight inspect https://your-api.example/paid --x402 # payment layer only, one request
Node.js 18+ が必要です。API キーもウォレットも不要です。
稼働中のエンドポイントに対するスキーマ実行例:
$ npx @eidonze/mcpreflight schema https://your-mcp-server.example/mcp
MCP Tool Schema Report
- Status: FAIL
- Endpoint: https://your-mcp-server.example/mcp
- Protocol: 2025-06-18
- Tools: 12
- FAIL REQUIRED_PROPERTY_UNDEFINED: tools[3] requires undeclared property query
- WARN PROPERTY_DESCRIPTION_MISSING: tools[7].limit has no description
正常なサーバーに対してまったく同じ実行をすると、Status: PASS が出力され、終了コード 0 で終了するため、CI でゲートとして使用できます。
どのコマンドを使うべきですか?
| コマンド | チェックする内容 | チェックしない内容 |
|---|---|---|
schema | MCP の initialize、tools/list、ツール名、説明、JSON スキーマ | ツールは呼び出さないため、実行時の動作は検証しません |
inspect | HTTP 402、x402 v1/v2 の支払いドキュメント、accepts[]、ディスカバリーマニフェスト、レイテンシ、レスポンスダイジェスト | 署名、支払い、決済、再試行、配信確認は行いません |
inspect --x402 | 支払いレイヤーのみ:1 回のリクエスト、402 チャレンジとその accepts[] エントリー。MCP ハンドシェイクやディスカバリープローブは行いません | 同じ制限があり、支払いの背後にある MCP エンドポイントについては何も示しません |
終了コードは自動化向けに安定しています:0 PASS、1 FAIL、2 UNKNOWN/ネットワークエラー、3 使用方法エラー。
チェックしない内容
mcpreflight はプロトコルおよびスキーマレベルの事前チェックであり、セキュリティ監査ではありません。次の項目はチェックしません。
- サーバー実装に含まれる悪意のあるコード、プロンプトインジェクション、サプライチェーンリスクを検出する
- ツールを呼び出さないため、実行時の動作、データの取り扱い、権限の範囲を検証する
- 認証と認可を回避、テスト、評価する
- x402 エンドポイントの支払い決済または配信を検証する
- 検査対象のレスポンス形式を超える仕様への準拠を認定する
PASS は、スキャン時に観測されたハンドシェイクとスキーマが適切な形式だったことを意味します。それ以上の意味はありません。
GitHub Actions
プルリクエストに読み取り専用のチェックを追加します。
name: MCP Trust Check
on: [pull_request]
jobs:
mcp-trust:
runs-on: ubuntu-latest
steps:
- uses: xka0085-byte/mcpreflight@v1
with:
endpoint: https://your-mcp-server.example/mcp
mode: schema
format: markdown
x402 の事前チェックには mode: inspect を使用してください。デフォルトでは FAIL または UNKNOWN の場合にアクションが失敗します。情報提供のみのチェックにするには、fail-on: false を設定してください。Marketplace で探す場合は、「MCP Trust Preflight」または「mcp server test」で検索するか、mcp-trust-preflight の掲載ページをご覧ください。
スターターテンプレート
このチェックがあらかじめ組み込まれた状態で、新しい MCP プロジェクトを始められます。
このチェックは読み取り専用で、公開テストエンドポイントを対象にしてください。ワークフローの入力に秘密鍵や認証情報を記載しないでください。
レポートの意味
PASS は、観測されたレスポンスがこのバージョンのチェックに適合したことを意味します。セキュリティ監査、プロトコル認証、支払い成功の保証、エンドポイントが安全であることの証明ではありません。UNKNOWN は、タイムアウトまたはレスポンスサイズの上限内にエンドポイントを観測できなかったことを意味します。
スキーマチェック失敗の例:
FAIL REQUIRED_PROPERTY_UNDEFINED tools[0] requires undeclared property query
x402 チェック失敗の例:
FAIL NO_402 Expected HTTP 402, received 400
開発の背景
このチェックは、ReceiptRail の開発中に確認された障害パターンをもとにしています。たとえば、x402 チャレンジを妨げる本文の検証、複数のヘッダー形式や本文形式で返される支払いドキュメント、実際の accepts[] ドキュメントを隠すことがあるベンダーヒントヘッダーなどです。
mcpreflight は、読み取り専用のコードベースを 3 つの形態で提供します。CLI、GitHub Action、そして schema_check と x402_inspect を公開する stdio MCP サーバー(bin/mcpreflight-mcp.mjs、npm の bin mcpreflight-mcp)です。mcpreflight.dev とは提携していません。npm のスコープが @eidonze/mcpreflight であることを確認してください。
フィードバック
誤検知や、サポートすべきプロトコル形式を見つけましたか?issue を作成してください。コマンド、機密情報を除いた出力、Node のバージョン、エンドポイントが MCP か x402 かを記載してください。トークン、支払い署名、非公開 URL は絶対に記載しないでください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。