Gauntlet について
Gauntletは、デプロイ前にMCPサーバーのセキュリティと信頼性を検証するRust製ツールキットです。スキーマ駆動のファジングと並行負荷テストをCLIで実行し、CIにも組み込めます。
主な機能
- 01スキーマ対応の入力ファジング
- 02SARIF形式の検出結果出力
- 03MCPサーバーへの並行負荷テスト
- 04ツール別のレイテンシとスループット計測
- 05CI向けレイテンシ・エラーしきい値
- 06stdioとStreamable HTTPに対応
活用シーン
- 01リリース前のクラッシュや検証漏れの発見
- 02GitHub code scanningへの検出結果の送信
- 03CIでのレイテンシとエラー予算の確認
MCP 対応
共有の非同期MCPクライアントで、stdioまたはStreamable HTTP経由でサーバーに接続します。mcp-fuzzはMCPからツールとスキーマを取得し、mcp-stormは並行リクエストを送信します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
StudioMeyer MCP Stack の一部 — マヨルカで開発 🌴 · お使いの場合は ⭐ をお願いします
mcp-gauntlet
Model Context Protocol サーバー向けの信頼性・セキュリティツールキットです。 高速な非同期 MCP クライアントコアを共有する、2 つのシングルバイナリ CLI です。
| ツール | 機能 |
|---|---|
🔬 mcp-fuzz | スキーマ対応ファザーです。各ツールの inputSchema を読み取り、悪意のあるデータ、境界値、不正形式のペイロードを大量に送信して、クラッシュ、ハング、内部エラー、検証漏れを検出します。GitHub のコードスキャン向けに SARIF を出力します。 |
🌩️ mcp-storm | 負荷テスター(「MCP 向けの k6」)です。サーバーに N 個の同時ワーカーからリクエストを送り、ツールごとのレイテンシー p50/p95/p99 とスループットを報告し、レイテンシーやエラー率のしきい値に基づいて CI の合否を判定します。 |
どちらも Rust で記述されており、それぞれ単一の静的バイナリで、ランタイムは不要です。あらゆる CI にそのまま導入できます。stdio(サブプロセス)または Streamable HTTP で MCP 通信を行います。
StudioMeyer が開発しました。
mcp-armor(ランタイム防御)の姉妹プロジェクトです。mcp-gauntletはデプロイ前の攻撃ツール兼負荷ジェネレーターです。
選ばれる理由
MCP サーバーは何も通知せずに失敗する一方で、開発は急速に進んでいます。その多くは、不正な入力に対するテストがなく、レイテンシー予算もありません。mcp-gauntlet を使えば、サーバー自身のスキーマからペイロードを生成するため、テストを手作業で一つも書かずに、今日から CI に組み込める 2 つのコマンドで両方に対応できます。
インストール
# from crates.io
cargo install mcp-fuzz mcp-storm
# or from source
git clone https://github.com/studiomeyer-io/mcp-gauntlet
cd mcp-gauntlet && cargo build --release
# binaries in target/release/{mcp-fuzz,mcp-storm}
MSRV:Rust 1.86。
mcp-fuzz — ユーザーより先にクラッシュを検出
# fuzz a stdio server (everything after -- is the launch command)
mcp-fuzz run --stdio -- node my-server.js
# fuzz a remote HTTP endpoint, write SARIF for GitHub code scanning
mcp-fuzz run --http https://example.com/mcp --sarif findings.sarif
# only one tool, more payloads, fail CI on any HIGH finding
mcp-fuzz run --stdio --tool search --iterations 300 --fail-on high -- ./server
接続して tools/list を呼び出し、すべてのツールに対してスキーマに基づくペイロードを生成します。
- 型の混同(数値が必要な場所に文字列を指定する、など)
- 境界値(空文字列/10 万文字の文字列、
i64::MAX、負数、ゼロ、巨大な浮動小数点数) - インジェクション(パストラバーサル、SQLi、コマンド/テンプレート/書式文字列、プロンプトインジェクション、CRLF、NUL バイト、右書き/ゼロ幅 Unicode)— 純粋に データ として送信し、実行はしません
- 必須フィールドの欠落、型が誤った
arguments、深いネスト
結果は分類されます。接続切断は クラッシュ(HIGH)、タイムアウトは ハング(HIGH)、-32603 は internal-error(MEDIUM)、スキーマに無効な入力での成功は accepted-invalid(LOW)です。正常な -32602 invalid params は、サーバーが正しく検証したものとして扱われ、検出事項にはなりません。
実行は再現可能です(--seed)。クラッシュ後はファザーがサーバーを再起動して続行します。サーバーを再起動できない場合は、その事実を一度だけ記録して正常に停止し、後続のペイロードすべてを元のクラッシュのせいにすることはありません。
mcp-fuzz report
───────────────
server my-server (protocol 2025-11-25)
tools 7
payloads sent 412
findings 2 total — 1 high, 0 medium, 1 low, 0 info
Findings (worst first):
[HIGH ] crash search::server crashed on field 'query': null-byte
stderr tail:
thread 'main' panicked at 'invalid utf-8 ...'
[LOW ] accepted-invalid search::schema-invalid input accepted without error: missing required field 'query'
CI での利用(GitHub コードスキャン)
- run: mcp-fuzz run --stdio --sarif mcp.sarif --fail-on high -- node server.js
- uses: github/codeql-action/upload-sarif@v3
if: always()
with: { sarif_file: mcp.sarif }
mcp-storm — レイテンシー予算を把握
# 16 workers for 30s against a stdio server
mcp-storm run --stdio --concurrency 16 --duration-secs 30 -- node my-server.js
# fixed request count against HTTP, gate CI on p95 + error rate
mcp-storm run --http https://example.com/mcp --requests 5000 \
--threshold-p95-ms 250 --max-error-rate 1.0
mcp-storm report
────────────────
server my-server (protocol 2025-11-25)
workers 16
duration 30.00s
requests 48213 (3 errors, 0.01% error rate)
throughput 1607 req/s
tool calls err% p50ms p95ms p99ms maxms req/s
──────────────────────────────────────────────────────────────────────────────────────
search 31044 0.01% 6.20 14.80 31.10 102.40 1035
fetch 17169 0.00% 9.10 22.30 58.70 210.00 572
stdio では、同時実行が実際に行われます。リクエストは 1 本のパイプ上で多重化され、JSON-RPC の ID によって振り分けられるため、N 個のワーカーが実際に並行して処理されます。--threshold-p95-ms/--max-error-rate を指定すると、予算を超えた場合に終了コードが 0 以外になり、そのまま CI のゲートに組み込めます。コールドスタートを除外するには --warmup-secs を使用します。
ワークスペースの構成
mcp-gauntlet/
├── crates/mcp-gauntlet-core # shared async MCP client (stdio + HTTP), schema gen, mock server
├── crates/mcp-fuzz # the fuzzer CLI
└── crates/mcp-storm # the load tester CLI
mcp-gauntlet-core も公開されています。単独で使用できる、小規模で並行処理に対応した MCP クライアントです。スキーマ駆動の値/変更ジェネレーターと、プロセス内で動作する mock サーバー(mcp-fuzz mock / mcp-storm mock)を備えており、セットアップ不要でどちらのツールからも接続して試せます。
mcp-fuzz run --stdio -- mcp-fuzz mock # fuzz the bundled demo server
開発
cargo fmt --all
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features
StudioMeyer MCP ツールキットの一部
MCP サーバーの構築と運用に役立つ、用途を絞った本番環境対応ツールの小さなシリーズです。自由に組み合わせてご利用ください。
- mcp-armor — ランタイム防御サイドカー:ツール呼び出しをスキャンし、署名済みマニフェストを検証して、既知の危険な CVE をブロックします
- mcp-gauntlet (このツール) — デプロイ前に使う
mcp-fuzz(スキーマ対応ファザー)+mcp-storm(負荷テスター) - mcp-covenant — コントラクトおよび破壊的変更の検出器(MCP インターフェース向けのセマンティックバージョニング)
- mcp-herald — MCP 2026-07-28 仕様に対応する静的マイグレーションリンター
- mcp-passport — MCP Registry 向けの公開準備状況バリデーター
- mcp-otel — W3C Trace Context から OpenTelemetry へのブリッジ
- mcp-cache-kit — 漏えいを安全に防ぐ SEP-2549 キャッシュ(
ttlMs+cacheScope) - skilldoctor — エージェントスキルファイル向けのリンター+セキュリティスキャナー
ライセンス
MIT © StudioMeyer。詳しくは LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。