mcpField
G
Gauntlet

Gauntlet

ローカル
crates.io開発ツール01 週間前に更新

Gauntlet について

Gauntletは、デプロイ前にMCPサーバーのセキュリティと信頼性を検証するRust製ツールキットです。スキーマ駆動のファジングと並行負荷テストをCLIで実行し、CIにも組み込めます。

主な機能

  1. 01スキーマ対応の入力ファジング
  2. 02SARIF形式の検出結果出力
  3. 03MCPサーバーへの並行負荷テスト
  4. 04ツール別のレイテンシとスループット計測
  5. 05CI向けレイテンシ・エラーしきい値
  6. 06stdioとStreamable HTTPに対応

活用シーン

  1. 01リリース前のクラッシュや検証漏れの発見
  2. 02GitHub code scanningへの検出結果の送信
  3. 03CIでのレイテンシとエラー予算の確認

MCP 対応

共有の非同期MCPクライアントで、stdioまたはStreamable HTTP経由でサーバーに接続します。mcp-fuzzはMCPからツールとスキーマを取得し、mcp-stormは並行リクエストを送信します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

StudioMeyer MCP Stack の一部 — マヨルカで開発 🌴 · お使いの場合は ⭐ をお願いします

mcp-gauntlet

mcp-fuzz mcp-storm CI OpenSSF Scorecard License: MIT

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 をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。