MCPツールはClaude Codeの入力トークン料金を削減するのではなく、むしろ増加させます。クリーニングツールを通じて送信されるすべてのプロンプトは、最終的に消費トークン量が増え、その分コストも高くなります。APIコストの削減を目指す開発者は、MCPベースのクリーナーを使えばモデルに渡る前にプロンプトを縮小できると考えがちです。
なぜトークンメーターが重要なのか
Claude Codeは、テキストがモデルのコンテキストウィンドウに到達した瞬間にトークンをカウントします。モデルはまず生のプロンプトを読み、それからMCPツールを呼び出すかどうかを決定します。クリーニングツールは、元のテキストがすでに会話の一部となった後に実行されるため、メーターにはすでにそれらのトークンが記録されています。
一般的なフローは以下の通りです:
- 生のプロンプトが送信される — トークンカウンターが作動します。
- モデルがプロンプトを読み、クリーニングツールの呼び出しを決定します。
- ツールがトリミングされたバージョンを返します。
- コンテキストには現在、3つの要素が含まれています:元のプロンプト、ツール呼び出しのメタデータ、そしてクリーニングされたプロンプトです。
これら3つのエントリすべてに対して課金されます。「クリーンな」バージョンは元のものと置き換わるわけではなく、単にその隣に並んで存在するだけなのです。
MCPクリーニングが役立つケース
MCPツールがトークンを節約できるのは、生のテキストがClaude Codeのメインコンテキストに入らない場合に限られます。それは、以下のようなダウンストリームの呼び出しにおいて発生します:
- モデルが検索エンジンやデータベースに転送する検索拡張生成(RAG)クエリ。
- 主要な会話とは独立して動作するサブエージェントに送られる指示。
これらの場合、モデルはクリーニングされたペイロードを外部システムに直接転送するため、元のユーザーテキストはプライマリのトークンカウントに含まれません。
入力トークンを実際に削減する方法
Claude Codeに投入するトークン数を減らしたい場合は、モデルに触れる前にテキストをクリーニングしてください。現在利用可能な3つの実用的なアプローチを紹介します:
- システムレベルのホットキー – WindowsではAutoHotkey、macOSではAutomatorを使用します。スクリプトが送信しようとしているテキストを選択し、外部APIにパイプしてクリーニングされたバージョンを受け取り、エディタ内のテキストを置き換えます。生のバージョンがマシンから離れないため、クリーニングされたバージョンのみが送信されます。
- CLIパイピング – ターミナルからClaude Codeを起動し、bashフィルタ(例:
sedやPythonスクリプト)を使用して、不要な空白、コメント、または重複したフレーズを取り除くなどの前処理を行います。フィルタリングされた出力がモデルに供給されます。 - MCPはダウンストリームの呼び出しのみに使用する – MCPツールは、前述のRAGやサブエージェントのステップ用に取っておきましょう。最初のユーザープロンプトはモデルに直接処理させ、クリーニングツールはメインの会話から離れるペイロードに対してのみ機能させるようにします。
避けるべき一般的な落とし穴
- MCPツールが元のプロンプトをトリミングすると誤解すること – MCPツールはツール呼び出しのトークンブロックを追加し、生のテキストを保持するため、合計カウントが増加します。
- Claude Codeのフックに頼ること – フックは追加のコンテキストを注入したりプロンプトをブロックしたりできますが、会話にすでにあるテキストを上書きすることはできません。
- インラインクリーニングを伴うスラッシュコマンドを使用すること – コマンドがクリーニングスクリプトを実行したとしても、生の引数はモデルが記録するコマンドラインの一部として残るため、それらに対しても料金が発生します。
トークンメーターは、文字がモデルのAPIエンドポイントに到達した瞬間に始まります。それ以降に行われるクリーニングは、オーバーヘッドを増やすだけです。
開発者にとっての意味
トークン料金は、ほとんどのAIサービスの請求書において一項目として表示されます。「クリーナー」が隠れたトークンを追加することで過剰に支払うことになると、期待していた節約効果がすぐに失われてしまいます。トークン数を正確に保ち、予算を予測可能にするために、クリーニングのステップをクライアント側に移動させましょう。
まとめ: MCPツールはダウンストリームのペイロードには有用ですが、入力したプロンプトのトークンを削減することはできません。Claude Codeのトークンコストを真に削減したいのであれば、送信前にクリーニングを行うか、メインのコンテキストに決して現れない呼び出しにのみクリーニングを限定してください。
