Skip to main content
Glama
pardovot

mcp-flightcheck

by pardovot

mcp-flightcheck

ユーザーに代わってあなたのMCPサーバーを破壊しようと試みます。通常のクライアント起動を実行した後、クライアントが通常行わないこと、つまりツール名なしの呼び出し、未知のメソッド、必須引数が欠落したツール呼び出しなどを送信し、クラッシュ、ハング、本来実行されるべきでないツールの実行を監視します。各発見項目にはその根拠となる仕様節が引用されたスコアカードが生成され、CI用に非ゼロの終了コードが返されます。

私は公式レジストリ内のすべてのリモートサーバー(6,892台)に対してこれを実行しました。接続を受け入れるサーバーのうち、4分の1がチェックに失敗し、7台に1台は完全に壊れています(クラッシュ、ハング、またはツール名を指定しないtools/callを実行)。公式インスペクタは対話型であり、ビルドを失敗させることはないため、これらの問題は出荷前に検出されることはありません。

$ npx mcp-flightcheck node dist/server.js

mcp-flightcheck | my-server 1.4.0 (node dist/server.js)

Protocol conformance
  PASS  Declared capabilities actually work - declared capabilities respond: tools
  PASS  Responds to ping - ping answered
  PASS  Rejects unknown methods - unknown method rejected with -32601 (method not found)
  WARN  Rejects malformed request params - malformed params surfaced as -32603, expected -32602

Tool quality
  PASS  tools/list works - listed 12 tools
  FAIL  Every tool has a valid input schema - 3 of 12 tools have missing or broken input schemas
          delete_item: no inputSchema at all (official SDK clients reject the entire tool list over this)
  PASS  Tool names are unique and well-formed - all tool names unique and well-formed

Reliability
  PASS  Responds quickly - median tools/list latency 11ms
  FAIL  Tools reject invalid arguments cleanly - invalid arguments crashed the server (probed 10 tools)
          update_config: server crashed
  FAIL  Server still healthy after all probes - server is gone after probing, it crashed somewhere above

Hygiene
  PASS  Server identifies itself - my-server 1.4.0
  WARN  Every tool has a description - 2 of 12 tools have no description

NOT READY  7 pass, 2 warn, 3 fail, 0 skip (1840ms)

インストール

npx mcp-flightcheck <your server>     # no install
npm i -D mcp-flightcheck              # or as a dev dependency

Node 20以上が必要です。

Related MCP server: mcp-test-server

使用方法

mcp-flightcheck node dist/server.js           # stdio server
mcp-flightcheck python -m my_mcp_server       # any command, any language
mcp-flightcheck https://example.com/mcp       # Streamable HTTP server

mcp-flightcheck --json node dist/server.js    # machine-readable report
mcp-flightcheck --strict node dist/server.js  # warnings also fail the run
mcp-flightcheck --no-probe node server.js     # skip invalid-argument probing
mcp-flightcheck --timeout 30000 slow-server   # per-request timeout in ms

認証(CIで独自のゲート付きサーバーをテストする)

ほとんどの本番用リモートサーバーはトークンを必要としますが、これはまさにCIでゲートしたいものです。--bearerでトークンを渡すか、--headerで任意のヘッダーを設定します(繰り返し可能)。

mcp-flightcheck --strict --bearer "$MCP_TOKEN" https://your-server/mcp
mcp-flightcheck --header "X-Api-Key: $API_KEY" --header "X-Tenant: acme" https://your-server/mcp

トークンはCIシークレットに保持し、上記のように環境変数で渡します。mcp-flightcheckはヘッダー値を出力せず、JSONレポートはURLのみでターゲットを識別します。認証フラグはリモート(http)ターゲットに適用されます。stdioサーバーは、自身のenvとargsを通じて認証情報を受け取ります。

終了コード:0はクリーン、1は発見項目あり、2は接続不能または使用法エラー。CIに直接組み込めます。

- run: npx mcp-flightcheck --strict node dist/server.js

チェック内容

プロトコル準拠

  • 未知のメソッドは、ハング、クラッシュ、または誤った成功ではなく、-32601で拒否されます。

  • 不正な形式のリクエストパラメータは、クリーンなJSON-RPCエラーとして返されます。

  • pingへの応答が必要です(仕様要件)。

  • サーバーが宣言するすべての機能(ツール、リソース、プロンプト)が実際に応答する必要があります。提供できないものを宣言するとクライアントが壊れます。

ツール品質

  • tools/listが動作し、ループなしでページネーションを行います。

  • すべてのツールは、JSON Schemaとしてコンパイル可能なinputSchemaを持ち、ルートはオブジェクトである必要があります。スキーマがないサーバーは公式SDKクライアントによって即座に拒否され、型付きスキーマを提供することは、公開サーバー間で測定された最も強力な品質分離指標です。

  • ツール名は一意で適切に形成されている必要があります。説明が存在する必要があります(モデルがそれに基づいてルーティングするため)。

信頼性

  • 無効な引数のプローブ:必須引数を持つすべてのツールが、引数なしで呼び出されます。適切に構築されたサーバーは、何かを実行する前に呼び出しを拒否します。mcp-flightcheckは、とにかく実行する、タイムアウトまでハングする、またはプロセス全体をダウンさせるツールをフラグ付けします。

  • tools/listの中央値レイテンシ(エージェントがセッションごとにこれを支払うため)。

  • 最終的なヘルスチェックにより、サーバーが自身のエラーパスを生き延びたことを証明します。

障害の分類は、実際に発生する問題(スキーマ不一致、タイムアウト、クラッシュ、プロトコル違反)に対応しています。

発見項目は仕様を引用

すべての発見項目には、それが強制する節が、そのまま引用され、リンク付きで記載されています。

WARN  Rejects malformed request params - malformed params surfaced as -32603, expected -32602
        MUST: -32602 Invalid params: Invalid method parameter(s). (JSON-RPC 2.0, which MCP messages MUST follow)
        https://www.jsonrpc.org/specification#error_object

根拠となる節がないルールにはHEURISTICとラベル付けされるため、仕様違反と判断によるものの区別が常に可能です。規範的根拠がまったくない2つのチェック(プローブ後ヘルスチェック、レイテンシ)には、偽の引用ではなく、引用は付されません。

プローブがデフォルトで有効な理由

プローブは無効な入力(必須引数の欠落)のみを送信します。入力検証があるサーバーは、副作用が発生する前にそれを拒否します。とにかく実行するサーバーには、本番環境ではなく今すぐ知りたいバグがあります。ツールが無効な入力でも副作用を起こす場合は、--no-probeを実行して修正してください。

プログラムAPI

import { runChecks } from "mcp-flightcheck";

const report = await runChecks(client, "my-server", {
  timeoutMs: 10_000,
  probe: true,
  probeLimit: 10,
});
console.log(report.summary); // { pass, warn, fail, skip }

テスト方法

mcp-flightcheckは適合性テストスイートに対して検証されています。examples/内のダミーMCPサーバーのギャラリーであり、各サーバーは1つのアーキタイプ(クリーン、スキーマ欠落、入力検証なし、呼び出し時にクラッシュ、呼び出し時にハング、機能の偽装、pingなし、ドキュメント化されていないツール、匿名、未知のメソッドでハング)を体現しています。各サーバーはmcp-flightcheckが返すべき正確な判定に固定されており、test/corpus.test.tsはmcp-flightcheckがすべてを再現することをアサートします。これはmcp-flightcheck自身の精度/再現率ゲートです。つまり、欠陥の捕捉を停止したり、クリーンなサーバーにフラグを付け始めたりする回帰が発生すると、ビルドが失敗します。

すべてのアーキタイプに対するライブ実行の全ギャラリーを参照してください。

npm run demo

ロードマップ

  • プロトコルリビジョン間のバージョンネゴシエーションチェック

  • リソースとプロンプトのコンテンツ検証

  • PRコメント用の--report md

  • outputSchemaを宣言するツールの構造化出力検証

  • 公開信頼性データセット:公式レジストリ全体でのmcp-flightcheck実行

ライセンス

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A test server implementing all features of the MCP protocol, including prompts, tools, resources, and sampling, designed for testing MCP clients rather than practical applications.
    MIT