mcpField
H
Hook Conformance

Hook Conformance

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

Hook Conformance について

Hook Conformanceは、MCPサーバーのツールがClaude Codeのライフサイクルフックで使えるかを調べるCLIテストツールです。開発者や保守担当者向けに、冪等性、副作用、遅延、決定性、データ処理の説明を監査して結果を出力します。

主な機能

  1. 01ライフサイクルフックへの適合性監査
  2. 02冪等性と出力の決定性を検査
  3. 03読み取り専用ツールの状態変化を検出
  4. 04エンドツーエンドの遅延を計測
  5. 05データフローと保持の説明を検査
  6. 06人間向け、JSON、JUnit形式で出力

活用シーン

  1. 01リリース前のMCPサーバーツール監査
  2. 02Stopやsubmitフックでの利用可否を評価
  3. 03監査結果を調べ、修正案を確認

MCP 対応

他のMCPサーバーを監査するCLIであり、自身はMCPサーバーではありません。設定した対象に接続して監査スイートを実行します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"hook-conformance": {
"command": "npx",
"args": [
"-y",
"mcp-hook-conformance"
]
}
}
}
起動コマンドnpx -y mcp-hook-conformance

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmcp-hook-conformance0.1.3

ツール

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

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

詳細

StudioMeyer MCP Stack の一部 — マヨルカ島で開発 🌴 · 使用したら ⭐ をお願いします

mcp-hook-conformance

npm version npm downloads License Last commit GitHub stars Claude Code v2.1.118 の mcp_tool ライフサイクルフックへの対応状況を、あらゆる MCP サーバーについて監査するテストハーネス CLI です。

3つ目の基盤となる柱です。

  • mcp-protocol-conformance は、サーバーがプロトコルに準拠しているかを示します。
  • mcp-server-attestation は、このサーバーに署名したのは誰かを示します。
  • mcp-hook-conformance は、Stop、PreCompact、UserPromptSubmit フックからこのツールを安全に呼び出せるかを示します。

私たちからひとこと

私たちは過去2年間、自分たちのためにツールやシステムを作ってきました。このリポジトリが小さく、スターが少ないのは、新しいからではありません。これまでに作ってきたものを公開することにしたのが、つい最近だからです。これは新しい実験ではなく、最近のコミットへと続く長い物語です。

私たちはものづくりと共有が好きです。ソーシャルメディアの戦術やグロースハック、スターやフォロワー集めには興味がありません。そのため、このリポジトリは小規模です。コードは実際に使われており、Issue には回答しています。ご自身で判断してください。

役に立った場合は、共有やテスト、フィードバックで応援していただけるとうれしいです。改善できそうな点があれば、Issue を作成していただくと助かります。このツールを使って何かを作ったら、[email protected] までお知らせください。本当にうれしいです。

マヨルカ島パルマの小さなスタジオより。

インストール

npm install -g mcp-hook-conformance

インストールせずに実行する場合:

npx mcp-hook-conformance check ./hook-conformance.config.json

クイックスタート

# 1. Scaffold a config
npx mcp-hook-conformance init --server-name my-mcp-server

# 2. Edit hook-conformance.config.json (point command/args at your server)

# 3. Run the audit
npx mcp-hook-conformance check ./hook-conformance.config.json

終了コード:

  • 0 監査に合格(FAIL なし)
  • 1 監査で1件以上の FAIL が発生
  • 2 設定エラー(ファイルがない、スキーマが無効、スイート名が不明)

サブコマンド

サブコマンド引数説明
check<config-path> [--output=human|json|junit] [--suite=...] [--tool=<name>] [--tries=<n>]監査を実行し、レポートを標準出力に出力します。
init[--server-name=<name>] [--force]サンプルの hook-conformance.config.json を cwd に書き込みます。
explain<finding-code>検出結果の詳細な説明と修正方法を出力します(例:IDEMP-001)。
version-info—ツールのバージョンと、対応する MCP 仕様の範囲を出力します。(エイリアス:version。)

これは CLI であり、MCP サーバーではありません。 mcp-inspector 経由で mcp-hook-conformance を実行しないでください。このパッケージで mcp.specVersion を宣言しているのは、監査対象に関するものであり、パッケージ自体が MCP を話すためではありません。設計上、Inspector は dist/index.js(ライブラリのエクスポート)に対して EACCES を返します。

監査スイート

スイートチェック内容重み
idempotency同じ入力を N 回与えると同じ出力になること。注釈がない限り UUID やタイムスタンプを含まないこと。30
side-effects読み取り専用ツールがサーバーの状態を変更しないこと。stateProbe の設定が必要です。25
latencyp50 < 30s、p95 < 60s(設定可能)。ウォームアップ呼び出し1回の後、5回サンプリングします。20
determinism呼び出しごとにレスポンスの構造が安定していること。浮動小数点値にずれがないこと。15
dsgvoツールの説明に、データの流れ、保持、削除についての記述があること(単語全体を対象とするヒューリスティック)。10

スイートのスコア:PASS = 100、WARN = 60、INDETERMINATE = 50、FAIL = 0。 ツールのスコア = 設定されたスイート全体の加重平均。 総合スコア = 各ツールのスコアの平均。

設定形式

{
  "$schema": "https://studiomeyer-io.github.io/mcp-hook-conformance/config.schema.json",
  "server": {
    "name": "my-mcp-server",
    "transport": "stdio",
    "command": "npx",
    "args": ["-y", "my-mcp-server"],
    "env": {}
  },
  "suites": ["idempotency", "latency", "determinism", "side-effects", "dsgvo"],
  "tries": 3,
  "thresholds": {
    "latencyP50Ms": 30000,
    "latencyP95Ms": 60000
  },
  "probes": [
    {
      "name": "search_things",
      "args": { "query": "audit-fixed-input" },
      "stateProbe": {
        "tool": "list_things",
        "args": {}
      }
    }
  ],
  "toolFilter": ["search_things", "get_thing"]
}

probes を使うと、ツールごとに特定の引数を固定できます。また、読み取り専用ツールでは stateProbe を設定して、副作用スイートが変更を検出できるようにします。stateProbe がない場合、そのツールに対する副作用スイートの結果は INDETERMINATE になります。

検出コード

コードスイート重大度タイトル
IDEMP-001idempotencyFAIL同一の呼び出し間でツールの出力が異なります
IDEMP-002idempotencyWARN応答に nondeterministic アノテーションのないタイムスタンプが含まれています
IDEMP-003idempotencyWARN応答に nondeterministic アノテーションのない UUID/ランダム ID が含まれています
LAT-001latencyFAILツールが p95 レイテンシの上限を超えました
LAT-002latencyWARNツールの p50 レイテンシが 30 秒を超えています
DET-001determinismFAIL呼び出し間で浮動小数点出力に差異があります
DET-002determinismWARN呼び出し間で応答の形式が変化します
SIDE-001side-effectsFAIL読み取り専用ツールで状態の変化が発生しました
SIDE-002side-effectsINDETERMINATE副作用検出用の状態プローブが設定されていません
DSGVO-001dsgvoFAIL破壊的なツールに削除/保持に関するドキュメントがありません
DSGVO-002dsgvoWARNツールの説明にデータフローに関するキーワードがありません

詳しい修正方法は、mcp-hook-conformance explain <code> を実行してください。

互換性

コンポーネントバージョン
MCP spec2025-06-18
Claude Code>= 2.1.118 (mcp_tool lifecycle hooks)
Node>= 20.0.0
@modelcontextprotocol/sdk^1.29.0

テスト済みのトランスポート:

  • stdio(主なトランスポート)
  • HTTP streamable(実験的。監査の動作は stdio と同じです)

リファレンススモークテスト

tests/smoke/ スイートは、mcp-nex および mcp-crm の本番テナントに対して監査を実行します。オプトイン:

RUN_SMOKE_TESTS=1 npm run test:smoke

スナップショットの差異が見つかった場合は、CI の失敗ではなく、手動レビューが行われます。

制限事項(必ずお読みください)

  • 副作用の検出は完全に隔離された環境では行われません。 stateProbe がない場合、読み取り専用ツールが純粋であることをブラックボックステストで証明することはできません。誤検出による FAIL の代わりに INDETERMINATE を返します。
  • レイテンシは stdio のエンドツーエンドの往復時間です。 JSON-RPC のフレーミングが含まれ、純粋な計算時間ではありません。
  • DSGVO スイートはキーワードに基づくヒューリスティックです。 ドキュメントの不足は確実に検出できますが、「準拠しているように見える」という判断は法的助言ではありません。
  • 自動修正はありません。 このツールは検出結果を報告します。修正はご自身で行ってください。

StudioMeyer について

StudioMeyer は、パルマ・デ・マヨルカを拠点に、世界中のクライアントと仕事をする AI とデザインのスタジオです。中小企業向けに、カスタムウェブサイトと AI インフラストラクチャを構築しています。本番環境のスタックには Claude Agent SDK、MCP、n8n を採用し、可観測性には Sentry、Langfuse、LangGraph を使用しています。また、独自のガードレイヤーも備えています。

ライセンス

MIT © 2026 Matthias Meyer (StudioMeyer)

コメント

MCP は初めてですか?

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

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