背景
VS Code の GitHub Copilot を使ってる中で、Token 節約が切実になっている。
Session における Token 分析が見られるようになったので、その中で比較的大きかった Tools を減らそうとあがいた記録
こんな感じで、Tool Definitions に締める割合があって、これを下げようとした
ツールが多いと、その定義(名前・説明・スキーマ)がプロンプトに乗るので。
ってことで、「用途ごとに Toolset を5個くらい定義しておいて、作業に応じてサクッと切り替えれば、必要なツールだけになってトークン節約できるんじゃね?」と考えた。
- コア編集用
- レビュー用
- インフラ用
- Web アプリ用
- ドキュメント用
…みたいな感じで *.toolsets.jsonc を用意した。
で、いざ切り替えてみたら、意図したツール構成にならない。
「Configure Tools」のカウントが妙に膨れるし、設定したはずのツールが効かないケースまで出てきて、「これ、Toolset 信用していいの?」ってなったのが今回の話。
Toolset(ツールセット)とは?
VS Code Copilot で、複数のツールを名前付きグループにまとめておける機能。*.toolsets.jsonc に定義して、Configure Tools の画面からまとめて ON/OFF できる。本来は「関連ツールを一括で有効化するショートカット」的な位置づけ。
概要(TL;DR)
先に結論。2026年6月時点では、Toolset 切り替えでお気楽にトークン節約、は厳しい。 理由は以下。
- Toolset は 加算専用。定義しただけで Configure Tools のカウントに乗る(しかも選択してなくても)
- カウントが 二重計上 されるバグがある(#267413)
- 組み込みカテゴリ名(
edit/search等)は機能バケツで、同種の拡張/MCP ツールを芋づる式に巻き込む(#276105) - 選択連動が壊れていて、外したはずのツールが残る/設定したツールが実際には送られないことがある(#313857、現役で更新中)
「search が複数混じる」程度なら可愛いもので許容できるんだけど、
「ローカルのファイル編集ツールを入れてるのに使えない」 が起きるとなると、さすがに実用にならない。
ってことで、トークン節約目的での Toolset 切り替えはいったん諦めた。
search が複数:search/* を意図した定義で、*/search まで Hit する bug
詳細
1. カウントが膨れる:Toolset は「全部の和」で数えられてた
最初に「あれ?」となったのがこれ。
Configure Tools のツール数が、想定の50くらいから 314 とかに膨れてた。
調べたら原因はシンプルで、定義してある全 Toolset のツールの和集合がカウントされていた。
切り替えで「今これを選んでる」とは無関係に、*.toolsets.jsonc に書いてあるセット全部のツールが合算される。
実際、定義していた Toolset を全部削除したら、カウントは 314 → 50 に戻った。
設定ミスじゃなくて、これは既知バグ。
#267413 When using user defined tool sets shows wrong count
ユーザー定義の Toolset があると、ツールと子ツールが二重計上されてカウントがおかしくなる。状態は Backlog(未解決)。
2. 組み込みカテゴリ名は「バケツ」だった
tools 配列に edit とか search みたいな組み込みカテゴリ名を書くと、それは「単一のツール」じゃなくて機能のバケツとして働く。
同じ機能を持つ拡張ツールや MCP ツールを、まとめて巻き込む。
例:
-
webカテゴリ →fetchやgithubTextSearchを内包 -
searchカテゴリ → 同名の MCP ツール(例:azure-mcp/search)まで一致
なので「search だけ入れたつもり」が、関係ない検索系ツールまで芋づるで ON になる。
上層一致だけならいいし、別に指定方法が出来るならいいんだけど・・ ![]()
#276105 Lots of tools I didn't choose in my tool set
カテゴリ名を指定すると、選んでない余計なツールが大量に入る、という報告。報告者は VS Code チームメンバー。状態は Backlog。
3. これが一番つらい:設定したツールが「効かない」
そして決定打がこれ。
カスタム Toolset と組み込みツールが重なると、選択連動が壊れる。
具体的には、Toolset 側のチェックを外しても組み込み側がチェックされたまま残ったり、その逆で、設定したはずのツールが実際にはモデルへ送られないことがある。
さらにヤバいのが、モデルに渡るツール名が不一致になる現象。
Issue #313857 の報告だと:
-
#editはツールチップ上「ファイル編集」なのに、実際に送られるのはcreate_directory -
#editFilesは存在しないedit_filesという名前で送られる(そんなツールは無い)
Now whats odd is
#edithas a tooltip of 'editing files in your workspace' but really the raw message sent is just the first tool name which is create_directory, which makes no sense.
つまり「ローカルのファイル編集ツールを設定したのに、編集が効かない」みたいな事態が、この経路で普通に起き得る。
search が混じる程度のズレと違って、作業不能に直結するので、これは許容できなかった。
#313857 tools mismatched / selective filtering partially broken
カスタム Toolset 利用時に、フィルタが部分的に壊れて、選択したツールと実際に送られるツールが一致しない。bug ラベル付き・担当アサイン済みで、2026年6月時点でも更新が続く現役の不具合。
4. 他に open な Toolset 関連 Issue
ついでに chat-toolsets ラベルの open な Issue をひと通り確認した(microsoft/vscode)。
切り替え運用に効いてくるのは上の3つだけど、周辺はこんな感じ。
| # | 内容 | 種別 |
|---|---|---|
| #313857 | フィルタ破綻・送信ツール名不一致 | bug |
| #267413 | カウント二重計上 | bug |
| #276105 | 選んでないツールが大量に入る | bug 寄り |
| #322457 | Toolsets の細かい UX 不備 | nitpick |
| #322456 | 選択から作成すると名前を2回入力させられる | nitpick |
| #251515 | Toolset をワークスペース内に保存したい(👍多数) | feature |
| #259183 | workspace スコープの Toolset | feature |
| #251603 | toolsets.jsonc が Settings Sync で同期されない | feature |
なお、過去に踏みやすかった「MCP ツール名の衝突」(search がベア名で MCP ツールにも当たる)は、別リポジトリの microsoft/vscode-copilot-release #11480 で 2025年12月に修正済み。再現するなら VS Code / Copilot Chat を最新化で直る可能性が高い。
じゃあトークン節約はどうする?
Toolset 切り替えに頼らず・・
-
不要な MCP サーバー / 拡張をそもそも無効化する
一番効くし確実。送られるツールの母数そのものを減らせる。 -
カスタムチャットモード(
*.chatmode.md)の front mattertools:に、個別ツール名を明示列挙する
モードを切り替える=そのモードのtools:だけが効く、という形にする。カテゴリ名(edit/search)や*ワイルドカードは避けて、insertEditみたいに個別ツール名で書く
ただし #313857 の組み込みエイリアス問題は編集系で影響出てそう
個別ツール名で書く理由
カテゴリ名は「バケツ」で芋づるを引き込むうえ、エイリアス不一致の地雷もある。個別ツール名で書けば、少なくとも「何を意図したか」が明示的になり、ズレたときに気づきやすい。
あとがき
「Toolset でサクッと切り替えてトークン節約♪」という目論見は、現状の実装だと素直に諦めた方が幸せ、という結論になった。
このへんのバグが直って、「選んだセットだけに正確に切り替わる」が保証されたら、また Toolset 切り替え運用に戻ってきたい。それまでは保留かな、と。
正直悲しい結末だった・・調べて、試行錯誤して、結局ダメなのかよーーーと
![]()
参考リンク
- Customize chat to your workflow - VS Code Docs
- microsoft/vscode #313857 - tools mismatched / selective filtering partially broken
- microsoft/vscode #267413 - user defined tool sets shows wrong count
- microsoft/vscode #276105 - Lots of tools I didn't choose in my tool set
- microsoft/vscode-copilot-release #11480 - MCP tool name collision in tool selector(修正済み)
- Qiita - Markdown 記法チートシート
