cctoggle: вырубить все плагины и MCP в Claude Code одной командой — и вернуть обратно
cctoggle: вырубить все плагины и MCP в Claude Code одной командой
Сессия Claude Code редко бывает голой. Подключены плагины, user-scope MCP-серверы, у каждого — пачка определений инструментов, и все это въезжает в контекст еще до первого сообщения. Иногда хочется наоборот: чистая, легкая сессия под конкретную задачу — а потом одной командой вернуть все как было.
Для этого я сделал cctoggle (публичный, MIT) — маленькую утилиту и глобальную slash-команду, которая разом гасит все плагины и user-scope MCP-серверы, а потом восстанавливает ровно то, что выключила.
Проблема
Чем больше в сессии плагинов и MCP-серверов, тем сильнее раздут контекст: их определения инструментов занимают место в токен-бюджете и захламляют список доступных инструментов. Это и дороже (input растет), и хуже для качества (чем больше навалено, тем хуже модель ориентируется). А ручное выключение — это правка двух конфигов, потом мучительное вспоминание, что именно ты трогал, чтобы вернуть на место.
cctoggle закрывает оба конца: выключает все одной командой и помнит, что именно выключил, чтобы потом вернуть только это.
Что делает
Четыре команды, работают и как /cctoggle в Claude Code, и как CLI cctoggle в терминале:
/cctoggle status # что включено/выключено сейчас
/cctoggle off # выключить все плагины + user-scope MCP
/cctoggle on # вернуть ровно то, что выключила cctoggle
/cctoggle restore-backup # откатиться к бэкапу конфигов
off делает две вещи:
- Плагины — переключает флаги
enabledPluginsв~/.claude/settings.jsonвfalse. - MCP — вынимает определения user-scope MCP-серверов из
~/.claude.jsonи прячет их в локальный state-файл (stash).
on восстанавливает строго то, что выключила сама cctoggle. Если какой-то плагин или сервер ты уже выключил руками раньше — on его не тронет и не включит обратно. Это важная деталь: команда не “включи все подряд”, а “верни мое последнее off”.
Выборочное выключение
Не обязательно гасить все. off принимает аргументы:
cctoggle off --keep superpowers,caveman # выключить все, кроме этих
cctoggle off graphify rtk # выключить только перечисленные
Как применяются изменения (это важно понять)
Тут самый нетривиальный момент — у плагинов и у MCP разная семантика применения.
Плагины применяются к ТЕКУЩЕЙ сессии — но только после того, как ты введешь /reload-plugins. Полный перезапуск приложения не нужен.
Изменения MCP-конфига применяются к СЛЕДУЮЩЕЙ сессии claude. Живого отключения MCP в Claude Code просто нет — это не поддерживается. И что неочевидно: /clear и /compact НЕ роняют MCP-соединения. Тот же процесс продолжает держать дочерние MCP-серверы живыми, поэтому почистить контекст недостаточно — нужна новая сессия claude.
То есть рабочий цикл такой:
/cctoggle off # пометить плагины и застешить MCP
/reload-plugins # плагины ушли из текущей сессии
# для MCP — выйти и запустить claude заново
Установка
Нужен только git. Клонируем репо и запускаем установщик:
git clone https://github.com/suenot/cctoggle.git ~/projects/claude && \
~/projects/claude/install.sh
install.sh делает символическую ссылку на slash-команду в ~/.claude/commands/ и кладет CLI cctoggle в PATH. После этого /cctoggle доступна во всех сессиях Claude Code, а cctoggle — прямо в терминале.
Почему это надежно
/cctoggle — это user-команда (живет в ~/.claude/commands/), а не плагин. Поэтому она продолжает работать даже после того, как все плагины выключены. Будь cctoggle сама плагином, команда off отстрелила бы себе ноги — а так on всегда под рукой, чем бы ты ни погасил.
Бэкапы и приватность
Перед каждым изменением cctoggle бэкапит оба конфиг-файла (~/.claude/settings.json и ~/.claude.json) в папку backups/. Если что-то пошло не так — restore-backup откатывает к сохраненной копии.
State-файл и бэкапы лежат в .gitignore, так что твои приватные определения MCP-серверов (а в них нередко ключи и токены) никогда не утекут в коммит.
Ограничения
Одно честное ограничение, про которое стоит знать заранее. MCP-серверы, которые claude mcp get <name> показывает как “Dynamic config (from command line)” — то есть инжектятся при запуске через флаги командной строки (например, claude_design), — через конфиг переключить нельзя в принципе. Их можно выключить только изменив то, как запускается claude, и перезапустив его.
cctoggle такие серверы обнаруживает и сообщает о них, но переключить их не может — это ограничение самого механизма, а не утилиты.
Итог: cctoggle — это быстрый тумблер между “тяжелой” сессией со всеми плагинами и MCP и “легкой” сессией под конкретную задачу, с гарантией, что потом все вернется ровно как было. Бэкапы перед каждым шагом, приватные MCP-определения остаются вне git, а сама команда переживает выключение всех плагинов, потому что живет в user-пространстве. Репозиторий — github.com/suenot/cctoggle.