← Назад к блогу
cctoggle: вырубить все плагины и MCP в Claude Code одной командой — и вернуть обратно

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.