【Show HN】MCPをもっと賢く!トークン効率を極めたCLIクライアント「Mcptoon」を公開しました
Show HN: Mcptoon – Token-efficient MCP CLI client
Show HN: Mcptoon – Token-efficient MCP CLI client
Model Context Protocol (MCP) を活用する際、トークン消費が気になったことはありませんか?「Mcptoon」は、LLMとのやり取りにおいてトークン効率を最大限に高めるために設計されたMCP CLIクライアントです。無駄なオーバーヘッドを削ぎ落とし、よりスマートで快適な開発体験を提供します。ぜひ一度試してみてください!
「Show Me」セクションの意味がよくわからないな。TOONバリアントだと明らかに同じ情報を持っていないし。「How TOON works」セクションの例もトークン数じゃなくて文字数に焦点を当ててるよね。そもそも「null」は1トークンなんだから、わざわざ珍しい文字に置き換える必要なんてある?
AI界隈のセールスマンみたいな口調で提示される数字なんて、一つも信用するつもりはないよ。97%なんて論外だ。
エージェントが20個のツールを呼び出す。それぞれが{"content":[{"type":"text","text":"..."}]}でラップされた500~3000トークンを返す。
それはツールの設計が悪いんだよ。ほとんどのMCPはツール選択のことも考えずに、ただの雰囲気だけでコードが書かれてるんだ。
128Kのコンテキストウィンドウなら、30~55%が消費される。作業内容じゃなくて、構文にな。
ツール出力は「構文」じゃないぞ、馬鹿野郎。繰り返しになるけど、コードベースのアプローチを採用して、LLMにツールを使ってJSONをフィルタリングさせればいい。このTOONとかいうやつは、ただの雰囲気ゲーだよ。そもそもツールの出力がJSONである必要すらないことが多いんだ。適切にフォーマットされたMarkdownで十分。構造化された大きなデータなら、LLMにそれを解析するツール(コード実行やjq)を持たせるべきだ。つまりTOONには何の意味もない。
似たようなアイデアのMCPプロキシを以前作ったことがあるよ。トークンを大量消費するツールを「get_tool_schema」と「invoke_tool」の2つに置き換えるやつね - https://github.com/ameshkov/mcp-compress-router
一つ気づいたのは、ツールをリストアップするときに単なるツール名じゃなくて、「search_web(query)」みたいに引数名を含めて返す方がうまくいくことが多いってこと。そうしないと、モデルが引数名を幻覚で勝手に作っちゃって、修正のために余計なターンが必要になるんだ。
こういうツールを使うもう一つの利点は、別のコーディングエージェントを使うときに、いちいち全てのMCPサーバーをエージェントごとに設定しなくてもいいところ。一つ設定しておけば(あるいはこのプロジェクトみたいにCLIを指すようにすれば)それで済むからね。
CheméoサイトにMCPサーバーを追加するのに、サイドプロジェクトとして1週間以上かけたよ。たった4つのツールなのにね。
「REST APIをラップするだけだから2時間で終わるだろ」なんて思ってたけど、実際は予想以上に時間がかかった。
MCPのペイロードはREST APIのそれとは全くの別物だよ。構造化データであっても、解釈可能かつコンテキスト効率の良いものにしなきゃいけないからね。
本当に興味深い作業だったし、MCPサーバーを作る際に「ネットワーク越しに何を送信するか」を真剣に考え直している人はほとんどいないんじゃないかな。もしそうなら、最小ペイロードで500kBのJSONスープみたいになるMCPなんて存在しないはずだからね。
私のMCPをあなたの「トークン節約フィルター」に通したら、間違いなくゴミのような結果になるだろうね。
なんでtrue/falseをT/Fに置き換えてるの?見たことあるすべてのトークナイザーで、true/falseは既に1トークンだよ。さらに悪いことに、nullを∅に置き換えるなんて。∅は特別なUnicodeシンボルで、nullの1トークンに対して2トークンも消費しちゃうじゃないか…
他の人もコメントしてる通り、これらの選択は作者がトークン化の仕組みをちゃんと調べていないことを示してると思う。トークン化はブラックボックスなんかじゃない。トークナイザーを実際に動かしてみれば確認できることだよ。
投稿者さん、実際のツール呼び出しの共通トークナイザーで比較を実行した結果がすごく見たいな。このツールの意図とは違う結果になると思うよ。画面上でトークンと文字を混同しちゃってるみたいだし。
情報ロスゼロ
ツールの名前を返してるだけで、他の情報(説明文や入力スキーマ)は完全に失われてるよ。LLMが間違ったスキーマでツールを呼び出したり、そもそも別のツールを呼び出したりして、結局修正にトークンとサイクルを無駄にする未来が見える。
どうしてこういう、ろくに検証もされてない「雰囲気だけで書かれた」プロジェクトがトップページに来るんだ?
アイデアは好きだけど、これはちょっとやりすぎじゃないかな。JSON (287トークン) — 他のMCPクライアントが返す内容:
[
{"name": "search_web", "description": "Search the web for information",
"inputSchema": {"type": "object", "properties": {"query": {"type": "string", "description": "Search query"}, "num_results": {"type": "number", "default": 5}}, "required": ["query"]}},
{"name": "fetch_url", "description": "Fetch content from a URL",
"inputSchema": {"type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"]}}
]
TOON (5トークン) — mcptoonが返す内容:
search_web fetch_url