# ツールと品質 (/ja/docs/mcp-servers/tools-and-quality)

モデルがMCPサーバそのものを見ることはありません。見えるのは、会話の毎ターンに送られ、各プロバイダ独自の形式に変換されたサーバのツール一覧です。MCPサーバのページの**モデルから見たこのサーバ**カードは、
その一覧をモデルが受け取るとおりに表示します：コスト、最もコストの大きいツール、モデルが誤解しやすい名前・説明・スキーマ。サーバを作っている間や、他者のサーバをエージェントに渡す前に使ってください。

このカードは、チェックで1つ以上のツールが見つかると、**ツール**の下に表示されます。

<Shot id="mcp-quality-card" alt="Alpenglow MCPの「モデルから見たこのサーバ」カード。Anthropic、OpenAI、Google Geminiのトークン数、サイズの大きいツール、「モデルがつまずきそうな問題はありません」の行が表示されている" />

## ツールのコスト [#what-the-tools-cost]

カードの上部には、ツール一覧が毎ターン消費するトークン数が、**Anthropic**、**OpenAI**、**Google Gemini**それぞれの形式で数えて表示されます。その下の行には、ツールの数と、3つのうち最大のものが200kのコンテキストに占める割合が表示されます。

数値は見積もりで、プロバイダの数え方との誤差は約15%以内です。サーバ同士の比較や、説明やスキーマを変更したときの影響を確認するのに適しています。

**サイズの大きいツール**には、コストの大きい上位5つのツールが、トークン数とともに表示されます。ツールが1つしかないサーバでは、この一覧は表示されません。

## モデルがつまずきそうな点 [#what-a-model-would-stumble-over]

次に、検出された問題の一覧が、深刻なものから順に表示されます。見出しには件数が表示されるか（`1 problem, 2 warnings` など）、**モデルがつまずきそうな問題はありません**と表示されます。
各項目には、ツールの名前、問題の内容、修正案が示されます。

| 種類 | 意味 |
| --- | --- |
| 問題 | プロバイダがそのツールを拒否するか、モデルが使い方を推測するしかありません。最初に修正してください。 |
| 警告 | 動作はしますが、モデルが誤ったツールを選んだり、引数をうまく埋められなかったりする可能性が高いです。 |
| 注記 | 知っておくとよいこと（あるプロバイダが破棄する制約など）。 |

Echolotが各ツールでチェックする内容：

| 検出内容 | 種類 | 対処 |
| --- | --- | --- |
| 名前がプロバイダの受け付けるものではない | 問題 | 英字、数字、`_`、`-` を使い、64文字以内にします。AnthropicとOpenAIはそれ以外を拒否します。 |
| 説明がない | 問題 | ツールが何をするか、何を必要とするか、何を返すかを書きます。 |
| 説明が名前以上のことをほとんど言っていない | 警告 | ツールが必要とするものと返すもの、似たツールではなくこのツールを使う場面を書きます。 |
| 長い説明（1,500文字超） | 注記 | 毎ターン読み込まれます。 |
| 入力スキーマがオブジェクトではない | 問題 | どのプロバイダも `{"type": "object", "properties": …}` を求めます。パラメータのないツールは `"properties": {}` と書きます。 |
| スキーマにプロパティがない | 注記 | パラメータがない場合は `"properties": {}` と書くか、あるものを記述します。 |
| 任意のオブジェクトを受け取る | 警告 | モデルが引数を作り出さないよう、ツールが読み取るプロパティを記述します。 |
| プロパティに定義されていないパラメータを必須としている | 問題 | プロパティを定義するか、`required` から外します。 |
| 型のないパラメータ | 問題 | それぞれに `type`（または `enum`）を指定します。そうしないとモデルは推測し、OpenAIのstrictモードは拒否します。 |
| 自由形式のオブジェクト（プロパティなし） | 警告 | キーを記述するか、説明に入れるべき内容を書きます。 |
| 説明のないパラメータ | 警告 | それぞれ1行で、それが何であるかと値の例を書きます。 |
| `$ref` を使っている | 警告 | Geminiは破棄するため、そのパラメータは何でも受け付けるようになります。OpenAIのstrictモードでは展開が必要です。 |
| `oneOf`、`pattern`、`additionalProperties` など、Geminiが破棄するキーワード | 注記 | Geminiでは制約が失われます。 |
| 大きなスキーマ（約1,000トークン超） | 警告 | ツールを分割するか、あまり使わないオプションをスキーマから外します。 |
| 25を超えるパラメータ | 警告 | ツールを分割するか、オプションをグループにまとめます。 |
| 5階層を超えるネスト | 警告 | 引数を平坦にします。モデルは深い構造をうまく埋められません。 |
| 40を超える値を持つ列挙 | 注記 | すべての値が毎ターン読み込まれます。 |

一覧全体に対する検出内容：

| 検出内容 | 種類 | 対処 |
| --- | --- | --- |
| モデルが混同する名前（大文字小文字、`_`、`-` を無視すると同じ） | 問題 | ツールを区別する要素にちなんだ名前を付けます。 |
| 同じ説明を持つ2つのツール | 問題 | 違いを書きます。モデルは説明を手がかりにツールを選びます。 |
| ほぼ同じことを言っている2つの説明（単語の60%以上が共通） | 警告 | それぞれに、もう一方ではなくこちらを使う場面を書きます。 |
| 128を超えるツール | 問題 | OpenAIは128を超えると拒否します。提供するツールを減らすか、サーバを分割します。 |
| 40を超えるツール | 警告 | 数が多いと、モデルの選択精度が下がります。一度に提供するツールを減らすか、トピックごとにサーバを分割します。 |
| 一覧が1ターンあたり20,000トークンを超える | 警告 | 説明とスキーマを短くするか、提供するツールを減らします。 |

サーバを変更したら、もう一度**チェック**をクリックしてください。カードは新しいツール一覧に追従します。

## プロバイダが受け取るリスト [#the-list-as-a-provider-receives-it]

カード下部の**プロバイダが受け取るリスト**を開き、**Anthropic**、**OpenAI**、**Google Gemini**のいずれかを選びます。そのプロバイダのAPIが受け取る形のツール一覧が、JSONで表示されます。**コピー**でコピーできます。
たとえば、Geminiの形式でスキーマから何が失われるかを確認できます。

## モデルで試す [#try-with-a-model]

下の**モデルで試す**カードでは、実際のモデルにどのツールを呼び出すかを尋ねます。このサーバを使ってエージェントに頼みそうなこと（`Is the two-person tent in stock?` など）を入力して、**試す**をクリックします。

<Shot id="mcp-try-with-a-model" alt="「モデルで試す」カード。テントに関するプロンプトと、モデルの回答（search_catalogの呼び出しとその引数）が表示されている" />

モデルはサーバのツールを見て、行うであろう呼び出しを答えます。実際には何も呼び出されません。各呼び出しについて、ツールと引数が表示されます。ツールのスキーマに合わない引数には印が付き、問題の内容が示されます。
わかりにくい名前や説明は、そこに表れます。その下には、使用したトークン数と、料金がわかっているモデルについてはそのターンのおおよその費用が表示されます。

このカードは、[設定 › アシスタント](/docs/ai/assistant)で選んだモデルを使います。選んでいない場合は、そこでモデルプロバイダを選ぶよう表示されます。初めて試すときは、プロンプトとサーバのツールをそのプロバイダに送信してよいかをEcholotが確認します。
オンデバイスのモデルと、Mac上のサーバでは確認されません。

## コマンドラインから [#from-the-command-line]

`echolot mcp check --quality` は、同じレポートをターミナルに出力し、`--strict` を付けると、問題があるときに終了コード1で失敗するため、サーバのCIでツール一覧の状態を保てます。
`--as anthropic`、`--as openai`、`--as gemini` は、そのプロバイダが受け取る形の一覧だけを出力します。[echolot mcp](/docs/cli/mcp)を参照してください。

```sh
echolot mcp check --url https://demo.echolot.dev/mcp --quality
```
