Your MCP Servers Are Burning Tokens Before You Type a Word

使ってもいないデータに対して料金を支払っています。

先週、あるエージェントのセッションを追跡しました。そこには47個のMCPツールがロードされていました。すべてのツールが、その完全なJSONスキーマをシステムプロンプトに送信していました。これは、私が一言も入力する前に発生していました。

各ツールのスキーマは150〜400トークンを消費します。47個のツールでは、オーバーヘッドだけで11,000トークンに達しました。モデルはターン(やり取り)ごとにこれらのトークンを読み取ります。たとえ2つのツールしか使わなくても、このコンテキストに対して料金を支払うことになるのです。

多くの人は大きなファイルのアップロードを心配しますが、ツールメニュー自体のコストを忘れています。

GitHub、Slack、データベースなどのサーバーを積み重ねると、最終的に60〜100個のツールになります。ツール定義がコンテキスト予算全体の20%を占めるセッションも見てきました。

すべてを一度にロードするのはやめましょう。代わりに遅延ロード(deferred loading)を使用してください。

以下がそのパターンです: • 名前と短い説明のみでツールをリスト化する。 • オンデマンドで完全なスキーマを取得するために、検索ツールを使用する。

すべてのツールに対して巨大なJSONオブジェクトを注入する代わりに、単純な名前を提供します。モデルが特定のツールを必要としたときに、検索関数を呼び出します。その関数は、一致するツールに対してのみ完全なスキーマを返します。

結果は劇的です: • 80個のツールを即時ロード(Eager loading)した場合:約18,000トークン • 80個のツールを遅延ロード(Deferred loading)した場合:約1,000トークン

これにより、ツール定義は大きな出費から、誤差の範囲へと変わります。

この戦略が有効な理由は、ほとんどのセッションでは利用可能なツールのほんの一部しか使用しないからです。セッションですべてのツールを使用する場合はコストは変わりませんが、ほとんどのユーザーにとって、これは膨大な量のコンテキストを節約することになります。

モデルがどのツールを呼び出す必要があるかを聞くのではなく、モデルがデフォルトで「何が存在することを知っておく必要があるのか」を問いかけてください。

ほとんどのカタログは、簡単だからという理由ですべてを一度に提供します。しかし、それは誰も読まないメニューに予算を使い果たす最も早い方法でもあります。

シンプルに保ちましょう。名前、説明、そして検索関数を提供してください。無視している80個のツールではなく、実際に使う3つのツールに対してのみ料金を支払うのです。

Source: https://dev.to/enjoy_kumawat/your-mcp-servers-are-burning-tokens-before-you-type-a-word-3076

Optional learning community: https://t.me/GyaanSetuAi