CLI で採点する
forecall lint で tools/list のファイルを手元で採点し、forecall dump でサーバーから取り出し、forecall setup で AI のクライアントを Failure KB につなぐ方法と、CI での使い方を説明します。
このページの内容
forecall lint は、リンターと同じ規則で、手元でツールを採点します。通信は一切しません。送信も、利用状況の送信も、更新の確認もしません。サーバーから tools/list を取り出すには forecall dump を使います。CLI には Node.js 22 以上が要ります。
npx forecall lint tools.json
入力
ファイルを 1 つ渡すか、- で標準入力を読みます。
cat tools.json | npx forecall lint -
CLI はリンターと同じ形を、同じ上限で読みます。
- ツールの配列
[{ "name": … }, …]- tools の配列を持つオブジェクト
{ "tools": [ … ] }- JSON-RPC の応答
{ "result": { "tools": [ … ] } }
上限は 1 MB(1,048,576 バイト)、200 ツールです。
キーは MCP の通信形式(camelCase)で書きます。snake_case のキーは自動では直さず、その場所と直し方を示します。サーバーからファイルを取り出す方法はtools/list の出し方にあります。
オプション
| オプション | 意味 |
|---|---|
--json |
結果を JSON で出す。Web が保存するのと同じ内容 |
--fail-under <n> |
平均点が n(0〜100)を下回ったら、終了コード 1 で終わる |
--lang <en|ja> |
結果の言語(既定は en) |
-h、--help |
使い方を出す |
-v、--version |
版と、採点の規則の版を出す |
言語は環境変数(LANG など)からは決めません。手元でも CI でも、同じ結果の表示になります。
出力
既定では、人が読む表を出します。最初に平均点、ツールの数、取り違えやすい組の数、採点の規則の版。次にサーバー全体の指摘。最後にツールごとの点(低い順)、6 項目の内訳、指摘です。色は端末に出すときだけ付け、NO_COLOR があれば付けません。項目と指摘コードは採点の読み方で説明しています。
--json を付けると、Web が結果として保存するのと同じ内容を出します。採点の規則の版(lintVersion)も入ります。入力を採点できないときは、代わりに {"error": …} を出します。命令の書き方の誤りは、標準エラーに文で出します。
tools/list を取り出す: forecall dump
forecall dump は、MCP サーバーに tools/list を問い合わせ、forecall lint とリンターが読める JSON で出します。通信するのはこの命令だけで、指定したサーバーを起動するか、指定した URL につなぎます。
# stdio のサーバー: -- の後に起動の命令
npx forecall dump -o tools.json -- npx -y @modelcontextprotocol/server-filesystem .
# Streamable HTTP のサーバー: URL
npx forecall dump https://example.com/mcp --header "Authorization: Bearer $TOKEN" > tools.json
| オプション | 意味 |
|---|---|
-o、--output <file> |
JSON を標準出力ではなく file に書く |
--header "Name: value" |
(URL)この要求ヘッダーを付ける(Authorization など)。何度でも指定できる |
--env NAME=value |
(命令)サーバーにこの環境変数を渡す。シェルの環境変数に足して渡す。何度でも指定できる |
--cwd <dir> |
(命令)dir でサーバーを起動する |
--timeout <seconds> |
この秒数で諦める(既定は 60) |
出す JSON は {"tools": [...]} に、server(サーバーの名前と版)、サーバーにあれば instructions、source(起動の命令か、問い合わせ部分を除いた URL と、取り出した日時)を添えたものです。ヘッダーと環境変数の値は書きません。一覧が複数のページに分かれていても、すべて読みます。Forecall が採点できる大きさ(1 MiB、200 ツール)を超えたときは、標準エラーで知らせます。
AI のクライアントをつなぐ: forecall setup
forecall setup は、手元の AI のクライアントを Failure KB(https://mcp.forecall.dev/mcp の MCP サーバー。エージェントが MCP ツールの既知の失敗と、別のエージェントが検証した回避策を調べる)につなぎます。ダッシュボードで作るエージェント用の API キーが要ります。そのページをブラウザで開いて貼り付けを求めるか、--key fc_agent_... で受け取ります。キーは各クライアントの設定ファイルの中にだけ書きます。
npx forecall setup
npx forecall setup --remove
見つけたクライアントごとに、MCP サーバー forecall を設定に足し、KB の使い方の指示を <!-- forecall:start --> と <!-- forecall:end --> で囲んでグローバルの指示ファイルに入れ、Claude Code には MCP ツールの失敗時に kb_lookup を促す PostToolUse のフック(forecall hook)を足すかを聞きます。フックは標準入力のイベントを読むだけで、どこにも送信しません。
| クライアント | MCP サーバーの設定 | グローバルの指示 |
|---|---|---|
claude-code |
~/.claude.json。フックは ~/.claude/settings.json |
~/.claude/CLAUDE.md |
claude-desktop |
claude_desktop_config.json(npx -y mcp-remote 経由) |
なし |
cursor |
~/.cursor/mcp.json |
なし。表示される文を Settings → Rules に貼る |
codex |
~/.codex/config.toml |
~/.codex/AGENTS.md |
gemini |
~/.gemini/settings.json |
~/.gemini/GEMINI.md |
windsurf |
~/.codeium/windsurf/mcp_config.json |
~/.codeium/windsurf/memories/global_rules.md |
--sensor を付けたときだけ(既定では入れません)、Claude Code にセンサーも足します。2 つ目の PostToolUse のフック(forecall hook --sensor)で、Claude Code がほかのサーバーの MCP ツールを呼ぶたびに背景で動きます。ツールの結果を手元で KB と同じ規則(秘密、アドレス、パス、識別子)で除去して 2,000 字に切り、サーバーとツールの名前、引数の形(名前、型、長さ。値は含めない)、クライアントの名前と一緒に、~/.claude.json のキーで https://mcp.forecall.dev/sensor に送ります。サーバーでも除去し直します。2 秒で打ち切り、何も表示せず、月の枠に数えません。KB が知らない失敗は、Forecall が確かめてからレコードにします。setup --remove --sensor はセンサーだけを外します。
もう一度実行しても何も変えません。--remove はすべてのクライアントから足したものを消します。端末がなく(CI、パイプ)--key もないときは、やることを表示して 0 で終わります。
| オプション | 意味 |
|---|---|
--key <fc_agent_...> |
エージェント用のキー。なければ端末で聞く |
--client <name> |
見つからなくてもこのクライアントを設定する。何度でも指定できる |
--hook / --no-hook |
Claude Code のフックを足す・足さない。省くと聞く |
--sensor |
センサー(上)も足す。--remove と一緒なら、センサーだけを外す |
--remove |
setup が足したものをすべてのクライアントから消す |
--dry-run |
変わるものを表示し、何も変えない |
終了コード
| コード | 意味 |
|---|---|
| 0 | 採点できた(--fail-under を指定したときは、平均点がそれ以上だった)。dump では JSON を書けた |
| 1 | 平均点が --fail-under を下回った |
| 2 | 採点できなかった(オプションの誤り、ファイルがない・読めない、入力の誤り)。dump では tools/list を取り出せなかった |
指摘があるだけでは失敗にしません。名前で意味が明らかな短いツールは低く出る(静的な採点で分からないこと)ので、どこで線を引くかは使う人が決めます。
CI で使う
平均点が下がったときに CI を止めるには、--fail-under を指定します。マイナー版まで固定してください。採点の規則の版を上げるときは CLI のマイナー版も上げるので、固定したジョブは、更新するまで同じ規則で採点し続けます。
npx forecall@0.2 lint tools.json --fail-under 60
forecall --version で、CLI の版と採点の規則の版を確かめられます。
ビルドのたびの採点をダッシュボードに残すには、tools/list を REST API に送ります。API キーと REST API を見てください。