CodeMode в OpenCode: убираем MCP-контекст
Содержание
В посте про оптимизацию MCP я рассказывал, как набрал около 80 тысяч токенов контекста одними только описаниями инструментов. Подключил Notion, Telegram, Figma и другие сервисы, а потом стал разбираться, куда уходят лимиты.
Часть MCP я заменил на CLI и skills. Для остальных рассматривал mcpjungle. Он решает проблему процессов: лениво запускает MCP-серверы и убирает неактивные. Но описания инструментов всё равно попадают в контекст.
Чтобы убрать их из основной сессии, приходится отключать MCP-инструменты и выносить доступ к ним в субагентов.
Для экономии контекста CodeMode выглядит правильнее.
Как работает CodeMode⌗
CodeMode показывает модели компактный каталог MCP-инструментов. Если нужного инструмента нет в каталоге, модель ищет его и получает описание параметров.
Затем через execute модель пишет небольшой скрипт, вызывает инструменты и возвращает в диалог только нужный результат.
Например, можно получить список GitHub issues, отфильтровать его и вернуть только названия со ссылками. Вся промежуточная выдача в основной контекст не попадёт.
Результаты замера⌗
Я проверил CodeMode на одном сценарии с четырьмя MCP-серверами:
| Режим | Входные токены |
|---|---|
| CodeMode включён | 32 тыс. |
| CodeMode выключен | 152 тыс. |
| Экономия | 120 тыс., около 79% |
Особенно заметной экономия должна быть при запуске субагентов. Каждый из них создаёт собственный контекст, поэтому 120 тысяч токенов быстро превращаются в потраченные лимиты и деньги.
Кроме экономии контекста, CodeMode сокращает количество обращений к модели. Несколько связанных операций можно выполнить внутри одного скрипта, а независимые вызовы — запустить параллельно.
CodeMode и mcpjungle решают разные задачи⌗
mcpjungle при этом не становится бесполезным. Он по-прежнему управляет жизненным циклом MCP-серверов.
CodeMode решает другую задачу: определяет, какие инструменты и данные показывать модели.
Как включить⌗
Запусти OpenCode с экспериментальной переменной:
export OPENCODE_EXPERIMENTAL_CODE_MODE=1
Я добавил её в ~/.zshrc, открыл новый shell и перезапустил OpenCode.