whichtool
whichtool
モデルは実際にあなたのMCPサーバーから正しいツールを選ぶのでしょうか?
[!WARNING] 公開は一時的に停止しています。 自動リリースは無効になっており、npm パッケージは利用できない可能性がありますが、公開GitHubリポジトリはオンラインのままです。以下のレジストリとActionの手順は、将来の再公開に備えて意図的に残されています。現在のソースを使用するには:
git clone https://github.com/mattagame/whichtool.git cd whichtool bun install bun run ./src/cli/main.ts inspect ./tools.json
MCPサーバーは有効なスキーマを持っていても、モデルにとって読み取り不能な場合があります。list_users と search_users を似たような説明で出荷すると、モデルは推測します。スキーマ検証はまだ合格します。統合テストも合格します。なぜなら、それらは正しいツールを構造的に呼び出すからです。
whichtoolはそのサーフェスを実際のモデルの前に置き、どのツールが選ばれるか、どのペアが混同されるかを報告します。
whichtoolはツールを実行しません。 tools/list を読み取り、モデルが呼び出したであろう内容を記録して、停止します。
これは意図的にシングルターン・ルーティング・ベンチマークです。準備された意図のセットに対するモデルのツール選択の決定を測定します。マルチステップのエージェント実行、浅いスキーマチェックを超えた意味論的な引数の正しさ、ツールの結果、回復、最終回答の品質は評価しません。
そのターンで提案されたすべての呼び出しは、JSONレポートの trials[].calls に保持されます。最初の呼び出しフィールドは互換性のためのビューであり、追加の呼び出しを破棄する理由にはなりません。
2つのジョブを実行します:
inspect— トークン予算、矛盾する注釈、ほぼ同一の説明、無効なx-mcp-header値。モデル呼び出しやモデルプロバイダーキーは不要。ライブターゲットは独自の認証を必要とする場合があります。run— 試行、順序を並べ替えたツール、混同行列、Wilson 95%区間付きのレート。
inspect は、サーフェスが6つ以上のツールを公開している場合に警告します。実際のCLI、MCP、GitHub Actionの実行は、そのデフォルトを超えてモデルを呼び出す前に停止します。サーフェスを確認した後、オペレーターは --max-tools N、trials.maxTools、MCP起動フラグ、またはActionの max-tools 入力で制限を引き上げることができます。1,000がハード上限です。6は慎重なデフォルトであり、普遍的なルールではありません。ツールが増えると曖昧さとプロンプトサイズが増加する可能性がありますが、適切な数はモデル、スキーマ、説明、タスクに依存します。また、--max-context-tokens を設定して、異常に大きなツールが少数でもコンテキスト予算を回避できないようにしてください。
これらのWilson区間は、ファイル内のタスクに対する試行レベルの安定性を説明します。タスクを繰り返すことは、同じルーティング決定が安定しているかどうかを測定します。未見の意図に対するモデルのパフォーマンスを推定するものではありません。
インストール
npx whichtool inspect ./tools.json
# or: bunx whichtool inspect ./tools.jsonnpm install --save-dev whichtoolNode 20.11+ または Bun 1.3+ が必要です。ランタイム依存関係はゼロです。
スタンドアロンバイナリはまだ公開されていません。Bunでコンパイルされた実行可能ファイルはサードパーティのランタイムコンポーネントを埋め込むため、再配布に関する通知がレビューされ、すべてのバイナリに同梱できるようになるまで配布は無効のままです。これは上記の一時的なパッケージ公開停止とは別です。その停止が有効な間はソースチェックアウトを使用してください。
Related MCP server: TowerWatch Ops Agent MCP Server
クイックスタート
# 1. Look at the surface (no model-provider key)
whichtool inspect ./tools.json
whichtool inspect https://example.com/mcp
whichtool inspect --transport stdio "bun run ./src/server.ts"
# Capture once, work offline afterwards
whichtool inspect --transport stdio "npx -y @modelcontextprotocol/server-filesystem ." \
--save-snapshot ./tools.jsonスナップショットは { "tools": [ … ] }、JSON-RPCの tools/list エンベロープ、または裸の配列のいずれかです。
# 2. Write a task set (whichtool.tasks.yaml)
version: 1
tasks:
- id: users.list.basic
prompt: 'Show me all the users in the workspace'
expected: list_users
- id: users.search.byname
prompt: "Find the user whose name contains 'rossi'"
expected: search_users
- id: distractor.delete
prompt: 'Permanently delete the account belonging to Rossi'
expected: nullexpected は null の場合でも記述する必要があります。完全な形式: docs/task-sets.md。
# Or draft one instead of writing step 2 by hand, then edit and commit the result
# (do not regenerate on every run). It refuses to overwrite without --force.
whichtool tasks generate ./tools.json --provider ollama --model qwen3:4b --out whichtool.tasks.yaml
# Seeded robustness variants, no model
whichtool tasks mutate --out whichtool.tasks.mutated.yaml --seed 0
# 3. Lint before spending anything
whichtool tasks lint ./tools.json --tasks ./whichtool.tasks.yaml
# 4. Preview the workload (no model call)
whichtool run ./tools.json --provider ollama --model qwen3:4b --repeat 5 --dry-run
# 5. Measure
whichtool run ./tools.json --provider ollama --model qwen3:4b --repeat 5
OPENAI_API_KEY=sk-… whichtool run ./tools.json --provider openai --model gpt-4.1-mini--repeat は選択されたタスクごとにデフォルトで5なので、総試行数は --only / --skip の後に残ったタスクに repeat を掛けたものになります。実際の実行はデフォルトで50を超える総試行を拒否します。--dry-run を確認した後、--max-trials N または trials.maxTrials でその予算を引き上げてください。1,000は絶対的で上書き不可能な最大値です。
ドライランのプロンプトトークン数は下限であり、価格見積もりではありません。出力と推論トークンは追加であり、はるかに大きくなる可能性があります。組み込みのHTTPプロバイダーでは、自動再試行はデフォルトで無効です。
whichtool run 中に Ctrl+C を押すと、進行中のプロバイダーリクエストを中止します。コマンドはコード 130 で終了し、部分的なレポートは書き込みません。MCP評価はMCPプロトコルを通じてキャンセル可能です。
終了コード: 0 実行は正常でしきい値が保持された、1 品質しきい値が失敗した、2 実行エラー(不完全な実行またはプロバイダー障害が多すぎる場合を含む)。デフォルトでは、実行には少なくとも1つのスコア付き試行が必要で、プロバイダーエラー率は最大10%まで許可されます。これらは --min-scored と --max-error-rate で上書きできます。
# 6. Re-render, gate, compare
whichtool run … --format json --out run.json
whichtool report run.json --format markdown
whichtool report run.json --format html --out report.html
whichtool diff base-run.json head-run.json --max-accuracy-drop 0.05diff は、異なるモデル、エンドポイント、非秘密のプロバイダーリクエストフィンガープリント、温度、シード、繰り返し回数、順列設定、またはタスクセットを使用した実行の減算を拒否します。タスクと試行インデックスで結果を照合し、正確な両側ペア符号検定(p <= 0.05)を使用して、動きが区別可能かどうかを判断します。予期しないマルチコール動作の区別可能な増加は、最初のピックが動かなかった場合でも回帰です。
コマンド
コマンド | 説明 |
| サーフェスリント。モデル呼び出しやモデルプロバイダーキーは不要。 |
| 準備されたルーティング評価操作をMCP経由で公開。 |
| タスクセットを検証。 |
| ツールの説明からタスクセットのドラフトを作成。 |
| シード付きロバストネスバリアント。モデル不要。 |
| 試行を実行し、レポートを書き込む。 |
| 保存された実行を再レンダリング。 |
| 2つの保存された実行を比較。 |
| 試行キャッシュを検査またはクリア。 |
whichtool <command> --help でフラグを一覧表示します。run の主なフラグ:
--tasks --provider --model --repeat --max-trials --max-tools --concurrency --temperature --seed
--min-scored --max-error-rate
--permute / --no-permute --format --out --min-accuracy --max-over-trigger
--max-context-tokens --only --skip --dry-run --seconds-per-trial --reasoning-effort
--cache / --no-cache --cache-dir形式: terminal、json、markdown、html、junit、badge。
環境: HTTPターゲットの資格情報には、WHICHTOOL_HTTP_AUTHORIZATION と、WHICHTOOL_HTTP_AUTHORIZATION_ORIGIN の正確な許可オリジン(例: https://mcp.example)の両方が必要です。リモート資格情報にはHTTPSが必要です。プロバイダーキーは、ANTHROPIC_API_KEY、OPENAI_API_KEY、OPENROUTER_API_KEY、TOGETHER_API_KEY、および openai-compatible エンドポイント用の WHICHTOOL_PROVIDER_API_KEY から取得されます。NO_COLOR / FORCE_COLOR が尊重されます。
トランスポート | メモ |
| ディスク上のキャプチャされた |
| ストリーミングHTTP(MCP 2026-07-28)。 |
| ローカルで起動されたサーバー。 |
| 拒否。MCP 2025-03-26 以降非推奨。 |
プロバイダー: anthropic、ollama、openai、openai-chat、openrouter、together、vllm、
任意の openai-compatible エンドポイント、および決定論的な mock。openai はOpenAI Responses APIを使用します。OpenAI Chat Completionsには明示的に openai-chat を選択してください。他のOpenAI互換プリセットは、引き続きチャット完了エンドポイントを使用します。
anthropic はチャット完了方言ではなくMessages APIを話します。そのプロバイダーは温度とシードを送信せず、それらの機能をサポートされていないものとして記録するため、その実行は --repeat と試行レベルの区間に依存します。
設定
import { defineConfig } from 'whichtool'
export default defineConfig({
target: { transport: 'stdio', command: 'bun run ./src/server.ts' },
tasks: './whichtool.tasks.yaml',
provider: { name: 'ollama', model: 'qwen3:4b' },
trials: {
repeat: 5,
maxTrials: 50,
maxTools: 6,
permute: true,
temperature: 0,
concurrency: 4,
},
thresholds: {
minAccuracy: 0.9,
maxOverTrigger: 0.05,
maxContextTokens: 4000,
maxErrorRate: 0.1,
minScored: 1,
},
report: { formats: ['terminal', 'json'], out: './whichtool-report' },
})whichtool.config.json も機能します。APIキーは決して設定フィールドではありません。通常のCLIはJavaScriptまたはTypeScriptの設定も検出できます。MCPサーバーは、以下で説明するように意図的に検出しません。
CI
- uses: mattagame/whichtool@v0.1.0
with:
target: ./tools.json
tasks: ./whichtool.tasks.yaml
provider: openai
model: gpt-4.1-mini
max-trials: '50'
max-tools: '6'
min-accuracy: '0.9'
max-over-trigger: '0.05'複合アクションの試行キャッシュは、キャッシュにプロンプト、ツール定義、プロバイダー応答が含まれる可能性があるため、デフォルトで無効です。cache: 'true' は、その素材が機密ではなく、GitHubホストの永続化が許容される場合にのみ設定してください。
Actionは、デフォルトで6つを超えるツールの測定呼び出しをブロックします。max-tools は制限を1,000までしか引き上げられません。その max-trials 予算は、各測定呼び出しに適用されます。したがって、ヘッドとベースの両方のリビジョンを測定する比較ワークフローは、試行予算を各実行に1回使用できます。デフォルトでは、ヘッドに最大50試行、ベースに最大50試行です。
provider を省略すると、無料の静的パスのみが実行されます: inspect と、タスクセットが存在する場合は tasks lint。完全なワークフロー(ベースブランチの比較をジョブサマリーに書き込む)は examples/github-action にあります。
MCPサーバーとして:
{
"mcpServers": {
"whichtool": {
"command": "npx",
"args": ["-y", "whichtool", "mcp", "--config", "whichtool.config.json"]
}
}
}MCPサーバーは、起動引数によって意図的に機能が制限されています。JavaScript/TypeScript設定を自動検出または実行しません。レビュー済みのJSONファイルを --config で明示的に渡してください。ツール呼び出しは設定されたターゲットを使用し、任意のパス、URL、またはサブプロセスに置き換えることはできません。エージェントが選択したタスク/レポート入力は、作業ディレクトリ内に留まる必要があります。
意図されたエージェントワークフローは、すでに準備およびレビュー済みの評価アーティファクトから始まります: inspect_surface、validate_task_file、run_evaluation、次に保存された実行に対する diff_saved_results。MCPサーフェスはタスクセットを生成または変更しません。同じシングルターン・ルーティング・ベンチマークを公開します。完全なエージェントワークフローの評価者または実行者ではありません。
run_evaluation は常にドライランプランを生成できますが、オペレーターが --allow-paid-runs でサーバーを起動しない限り、プロバイダーに連絡することはできません。オペレーター所有の実際の実行予算はデフォルトで50総試行です。起動時の --max-trials フラグまたはレビュー済み設定の trials.maxTrials のみが、絶対最大値1,000まで引き上げることができます。エージェントはその予算を上書きできません。同じオペレーター所有のルールが、起動時の --max-tools または trials.maxTools による6ツールのデフォルトに適用され、絶対最大値は1,000です。repeat と並行性にも上限があります。完全な実行はコンパクトなサマリーを返します。--result-file ./latest-run.json を追加して、完全なレポートをモデルコンテキストの外に保持します。
--allow-dynamic-targets は分離された開発セットアップ用に存在し、安全でないオプトインとして扱う必要があります。プロバイダー/モデルの上書きも、オペレーターが --allow-provider-overrides を追加しない限り設定のみです。永続的な試行キャッシュはMCPモードではオフです。オペレーターは、プロンプト、呼び出し、応答をディスクに書き込むことを決定した後、明示的に --cache を追加する必要があります。
例
例 | 説明 |
ローカルで実行できるサーフェスでの完全なループ。 | |
意図的に読み取り不能なサーフェス。 | |
静的リントと矛盾するローカルモデルの実行。 | |
ベースブランチの差分を含むCI配線。 |
qwen3などの推論モデルでは、単一の試行に数十秒の思考トークンがかかる場合があり、whichtoolはそれを読み取りません。1つの試行を測定してから、--dry-run --seconds-per-trial を渡してください。そのプロンプトトークン合計は下限のままであり、価格見積もりではありません。出力と推論トークンは追加です。
開発
Bunがツールチェーンで、Nodeが配布ターゲットです。src/core/ はポータブルなTypeScriptです(Bun/Node組み込みなし)。
bun install
bun test
bun run typecheck
bun run lint
bun run builddocker run --rm -v "$PWD:/work" ghcr.io/mattagame/whichtool inspect ./tools.jsonパッチ歓迎: CONTRIBUTING.md には、レビュアーではなくテストが強制する制約がリストされています。
設計記録: SPEC.md。セキュリティ: SECURITY.md。JSON契約: docs/report-schema.md。変更: CHANGELOG.md。
免責事項
本ソフトウェアは as-is(現状のまま)で提供され、無保証です。LICENSE.md をご覧ください。
runは有料です(ホステッドプロバイダー上)。ツール定義とプロンプトは、設定したモデルに送信されます。まず--dry-runを使用してください。ただし、そのプロンプトトークン数は、料金見積もりではなく下限値として扱ってください。Ollama などのローカルエンドポイントは、お使いのマシン上で完結しません。テスト対象サーバー上のツールが呼び出されることはありません。
stdioは渡されたコマンドを起動しますが、それはあなたの権限で実行されます — そのコマンドはコードとして扱ってください。スタンドアロンバイナリはまだ配布されていません。 組み込みランタイムのサードパーティ表記(notices)が確認され、各バイナリに同梱できる状態になるまで、公開は無効のままです。
セキュリティスキャナーではありません。
inspectを通過しても危険なサーフェスは存在します。詳細: SECURITY.md。
ライセンス
MIT — LICENSE.md。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP proxy that reduces context usage through semantic tool routing, enabling on-demand discovery and routing of relevant tools.MIT
- AlicenseNot gradedqualityBmaintenanceExposes network-monitoring tools (query metrics, analyze windows, compare, logs, status, runbooks, speed tests) as an MCP server for agentic workflows. Designed with evaluation suites, cost-aware model routing, and semantic tool retrieval.MIT
- AlicenseAqualityCmaintenanceAn MCP server that gives AI assistants the ability to inspect, normalize, diff, and validate agent tool-call traces.347MIT
- AlicenseAqualityAmaintenanceMCP server that scores tool descriptions, estimates token costs, simulates agent tool selection, and generates reliability reports to help AI agents choose the right tools and reduce wasted tokens.25276MIT
Related MCP Connectors
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mattagame/whichtool'
If you have feedback or need assistance with the MCP directory API, please join our Discord server