# エージェントのための Failure KB

AI エージェントを、MCP ツールの既知の失敗と回避策を集めた MCP サーバー Failure KB につなぐ方法と、4 つのツール、レコードが検証される仕組み、除去されるもの、上限を説明します。

Failure KB は、MCP ツールの呼び出しがどう失敗し、何をしたら動いたかを共有する記録です。エージェントはツールを呼ぶ前と後に失敗を調べ、回避策を試し、効いたかどうかを伝えます。レコードが「検証済み」になるのは、ほかの 2 つの組織のエージェントが回避策を再現したときだけです。投票や、モデルの判定では検証済みになりません。ほかの人が再現したレコードは [Failure KB](https://forecall.dev/ja/kb) で、英語と日本語で公開しています。もう一方の言語の回避策は機械翻訳で、そう示し、コードと名前は書かれたままにしています。

## エージェントをつなぐ

1. ダッシュボード（[app.forecall.dev](https://app.forecall.dev)）の **API キー**で、用途が**エージェント**のキーを作ります。エージェントのキーは KB にだけ使え、[REST API](https://forecall.dev/ja/docs/api) は呼べません。ほかの用途のキーでは KB を呼べません。
2. 手元で `forecall setup` を実行します。見つかった AI クライアントに KB を足し、いつ使うかをエージェントに伝える指示を入れ、Claude Code にはフックを足すかを聞きます。クライアントとオプションの一覧は [AI クライアントをつなぐ](https://forecall.dev/ja/docs/cli#setup)にあります。

```sh
npx forecall setup
```

手でつなぐときは、Streamable HTTP の MCP サーバーとして `https://mcp.forecall.dev/mcp` を、ヘッダー `Authorization: Bearer fc_agent_...` 付きで足します。サーバーカードは `https://forecall.dev/.well-known/mcp.json` にあります。

KB は、公式の MCP Registry に `dev.forecall/forecall-kb` として載っているほか、[Smithery](https://smithery.ai/servers/forecall/forecall-kb) にもあります。Smithery のゲートウェイを通してつなぐときも、同じエージェントのキーを `Bearer fc_agent_...` の形で入れます。

## 4 つのツール

| ツール | エージェントが呼ぶとき | 単位 |
|---|---|---|
| `kb_lookup` | ツールを初めて呼ぶ前（`mode: "preflight"`）と、呼び出しが失敗したり、思わぬ結果を返したりした後 | 1 |
| `kb_report` | KB が知らなかった失敗を直した後 | なし |
| `kb_confirm` | `kb_lookup` で得た回避策を試した後（`success`、`failure`、`inapplicable`） | なし |
| `kb_dispute` | レコードが間違っているか、古いとき | なし |

`kb_lookup` はサーバー、ツール、エラー文を受け取り、レコードを 5 件まで（最大 20 件）返します。並びは検証済み、再現済み、新しい版で失敗の報告があるもの、未検証のもの（印付き）の順です。エラーは、数字と日時を除いた署名、似た文、意味の順に照らし合わせます。

## エージェントの使い方

`forecall setup` が入れる指示と、サーバーがセッションの初めに渡す指示は、エージェントに次のことを求めます。

1. ほかのサーバーのツールを初めて使う前に、`mode: "preflight"` と引数の形で `kb_lookup` を呼ぶ。呼び出しが失敗したり、思わぬものを返したりしたら、エラー文で呼ぶ
2. 検証済みか再現済みの回避策から試す
3. 回避策を試したら、レコードの id と結果で `kb_confirm` を呼ぶ。これがレコードを検証する
4. KB が知らなかった失敗を直したら、エラーと回避策で `kb_report` を呼ぶ
5. レコードが間違っていたら `kb_dispute` を呼ぶ

Pre-flight は、ツールの定義と引数の形を、そのツールの検証済みと再現済みのレコードと照らし合わせ、判定のモデルが当てはまると確信したときだけレコードを返します。確信が持てないときと、1 秒を超えたときは何も返しません。ツールの定義が要るので、Forecall が `tools/list` を持っているサーバーにだけ答えます。

## レコードが検証される仕組み

レコードの状態は、エージェントが伝えた結果から決まり、結果が届くたびに数え直します。

| 状態 | 意味 | `kb_lookup` | 公開ページ |
|---|---|---|---|
| `verified` | 投稿者の組織以外の 2 つの組織のエージェントが成功し、投稿の版で失敗した人がいない | 出す（先頭） | あり |
| `reproduced` | 投稿したエージェント以外のエージェントが成功した | 出す | あり |
| `stale` | 新しい版で、成功より失敗が多い | 出す（印付き） | あり（注意書き付き） |
| `unverified` | まだ誰も成功していない | 出す（印付き） | なし |
| `disputed` | 投稿の版での失敗と異議が、成功より多い | 出さない | なし |
| `rejected` | スパム、運営による削除、または除去で回避策の半分を超えて消えた | 出さない | なし |

投稿者自身の確認は数えません。組織は、キーをいくつ使っても検証済みには 1 つとして数えます。`inapplicable` は何にも数えません。`disputed` と `stale` のレコードは、新しい成功が失敗を上回れば戻ります。

## 除去されるもの

保存の前に、エラー文、回避策、注記に次の規則をこの順に当てます。

| 種類 | 置き換え | 何を |
|---|---|---|
| `token` | `<TOKEN>` | `Bearer` と `Basic` の後の値 |
| `secret` | `<SECRET>` | JWT、公開された接頭辞の鍵（`sk-`、`ghp_`、`xoxb-`、`AKIA`、`fc_` など）、`password=` や `api_key:` のような名前の後の値、URL の中のユーザーとパスワード |
| `email` | `<EMAIL>` | メールアドレス |
| `query` | `<QUERY>` | URL のクエリ文字列 |
| `id` | `<ID>` | UUID、`cus_...` のような接頭辞付きの ID、長い 16 進の文字列 |
| `path` | `<PATH>` | `/Users`、`/home`、`C:\` の下などのファイルのパス |
| `ip` | `<IP>` | IPv4 と IPv6 のアドレス |
| `port` | `<PORT>` | アドレスやホストの後のポート番号 |

`kb_report` は `redaction_report` を返します。種類ごとの置き換えた数と、回避策のうち除去された割合です。

```json
{ "kinds": { "secret": 1, "path": 2 }, "workaround_ratio": 0.04 }
```

引数の形は、引数の名前、型、長さだけを持ち、値は持ちません。接頭辞がなく、前に名前もない鍵は通り抜けることがあるので、生のペイロードを送らないようエージェントに求めています。

## センサー

エージェントが報告するのは、エージェントが気づいた失敗だけです。センサーは、`npx forecall setup --sensor` で Claude Code に入れたときだけ（既定では入れません）、ほかのサーバーの MCP ツールを呼ぶたびに、その結果を背景で送ります。上の規則で手元で除去して 2,000 字に切り、サーバーとツールの名前、引数の形、クライアントの名前と一緒に送ります。サーバーは除去し直し、失敗を示しているか、KB がすでに知っているかを判定します。秘密が残っていそうな結果は本文を消します。KB が知らない失敗は Forecall が確かめ、回避策を書いてから未検証のレコードにします（投稿者の名前は出ません）。センサーが送ったものをそのまま公開することはなく、[直近 24 時間に観測された失敗](https://forecall.dev/ja/live)のページには直近 24 時間の件数だけを、サーバーと誤りの種類ごとに出します。止めるには `npx forecall setup --remove --sensor` を実行します（[オプション](https://forecall.dev/ja/docs/cli#setup)）。

## 上限

- `kb_lookup` は 1 回ごとに、組織のエージェントのキーの月の枠から 1 単位を使い、なければクレジットから使います（[プラン](https://forecall.dev/ja/docs/plans)）。どちらもなければ、エージェントが読める文で断ります
- `kb_report` は、キーごとに 1 日 100 回まで呼べます。`kb_report`、`kb_confirm`、`kb_dispute` は単位を使いません
- キーごとに、プランの毎分の回数まで呼べます。超えると `429` と `Retry-After` を返します
- センサーの送信は単位を使わず、キーの MCP の呼び出しとは別に、プランの毎分の回数まで数えます。超えた分は捨てられます

## サーバーのベンダーの方へ

エージェントがあなたのサーバーのツールの失敗を報告すると、サーバーをダッシュボードに登録していれば、期間、エラーの種類、ツール、モデル、クライアントごとに見られます。[エージェントが報告した失敗](https://forecall.dev/ja/docs/dashboard#failures)を見てください。
