ccc-mcp
Provides a fixed set of git operations (such as status checks and commits) that can be run directly, with commit messages passed via stdin, without invoking Claude Code or requiring a plan.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ccc-mcpPlan adding email validation to the signup form in this project."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ccc-mcp — Command Claude Code
Локальный MCP-сервер, через который внешний агент Claude ставит задачи вашей установке Claude Code и получает структурированный отчёт — без копирования текста между окнами.
Сервер универсальный: «текст задачи → Claude Code → структурированный отчёт». Никакой логики Архитектора/Вайбкодера и разбора паспорта проекта в нём нет.
⚠️ Прежде чем подключать
Это не песочница. Мост запускает на вашей машине настоящий claude, который правит файлы,
исполняет команды и коммитит — от вашего имени и с вашими правами.
Пооперационные разрешения по умолчанию выключены (
hooksEnabled: false): внутри уже одобренного плана мост не перехватываетBashдочернего процесса.write_project_fileиrun_gitменяют состояние вне цикла план→одобрение — это осознанное решение, разобранное в docs/security.md.Единственная жёсткая граница —
allowedRoots. Не указывайте там домашний каталог целиком: перечисляйте конкретные проекты.
Модель угроз и куда сообщать об уязвимости — SECURITY.md.
Related MCP server: worker-mcp
Что это даёт
Правка кода идёт через обязательный цикл «план → одобрение → выполнение»: дочерний Claude Code
сначала показывает, что собирается сделать, и только явно одобренный план разрешено выполнять.
Всё, что интеллекта не требует — прочитать файл, положить его обратно, посмотреть git status,
закоммитить, — доступно напрямую, без запуска дочерней модели.
Человеку — пошаговая установка, подключение и разбор проблем: SETUP.md.
Вызывающему ИИ-агенту — императивный протокол одним файлом: AGENT-PROTOCOL.md.
Подробности по темам — в docs/, карта ниже в разделе «Документация».
Инструменты
Инструмент | Назначение |
| Планирование без изменения файлов ( |
| Явное согласие на выполнение плана. Переводит сессию в |
| Выполнение одобренного плана. Возвращает итоговый отчёт. |
| Состояние и результат задачи, запущенной в фоне. |
| Принудительная остановка зависшей задачи вместе с потомками. |
| Решение по отдельной операции дочернего Claude Code. Работает только при включённом контроле разрешений. |
| Плоский список файлов и каталогов проекта. Без запуска Claude Code и без плана. |
| Прямое чтение текстового файла проекта. Без запуска Claude Code и без плана. |
| Прямая перезапись текстового файла проекта целиком. Без запуска Claude Code и без плана. |
| Фиксированный набор git-операций напрямую. Без запуска Claude Code и без плана. |
Границы, поведение и обоснования файловых и git-инструментов — docs/tools.md.
Протокол в двух словах
plan_task → показать план человеку → approve_plan → execute_task
planned approved executing → executedexecute_taskбез одобренногоsession_idневозможен. Запустить задачу «с нуля», минуя план, нельзя — в этом и смысл моста.Повторный
plan_taskсбрасывает одобрение и меняетplan_digest: одобрить один план и подменить его другим не получится.has_open_questions: trueблокирует одобрение. Модели не хватило данных — она обязана выписать вопросы, а не угадать; задайте их пользователю и перепланируйте.Сбой одобрение не сжигает. После таймаута, отмены или ошибки API сессия остаётся
approved, попытку можно повторить.
Таблица состояний, поля ответа и обоснования — docs/protocol.md.
Быстрый старт
Требуется Node.js ≥ 20 и установленный Claude Code (проверено на 2.1.177 и 2.1.268). CLI должен
уметь --output-format stream-json — на нём держится наблюдаемость идущей задачи; если версия
его не поддерживает, обход — streamEvents: false в конфиге.
1. Авторизация. Сервер не работает с вашими учётными данными: дочерний claude
аутентифицируется сам.
claude auth loginПроверить — должно прийти "is_error":false:
claude -p "hi" --output-format json2. Сборка.
npm install
npm run build3. Конфиг. Без белого списка каталогов сервер не стартует.
cp ccc-mcp.config.example.json ccc-mcp.config.jsonВпишите в allowedRoots свои каталоги.
4. Подключение.
claude mcp add --scope user ccc-mcp -e CCC_MCP_CONFIG=D:/Projects/ccc-mcp/ccc-mcp.config.json -- node D:/Projects/ccc-mcp/dist/index.jsИмя сервера должно идти до -e — флаг вариадический и иначе заберёт имя себе. Проверить:
claude mcp list.
Claude Desktop, Windows, macOS и разбор проблем подключения — в SETUP.md.
Пример: полный цикл
Шаг 1 — план.
{ "name": "plan_task",
"arguments": { "task_text": "Добавь валидацию email в форму регистрации и покрой её тестами.",
"project_dir": "D:\\Projects\\my-project" } }Ответ (сокращённо):
{ "status": "done", "ok": true,
"session_id": "b1e41519-93c1-4dc3-8eb2-0669513addf9",
"session_state": "planned", "plan_digest": "a3f19c4b7e02",
"result_text": "План: 1) добавить схему валидации…",
"next_step": "План готов, но не одобрен — выполнение пока запрещено…" }Шаг 2 — показать план человеку и одобрить. Оба значения берутся из ответа plan_task
без изменений.
{ "name": "approve_plan",
"arguments": { "session_id": "b1e41519-93c1-4dc3-8eb2-0669513addf9",
"plan_digest": "a3f19c4b7e02" } }Приходит session_state: "approved".
Шаг 3 — выполнение. Claude Code продолжит с уже собранным контекстом и вернёт тот же
session_id.
{ "name": "execute_task",
"arguments": { "task_text": "Выполни план.",
"project_dir": "D:\\Projects\\my-project",
"session_id": "b1e41519-93c1-4dc3-8eb2-0669513addf9",
"permission_mode": "acceptEdits", "model": "opus" } }project_dir должен совпадать с тем, для которого строился план: одобрение действует только
для своего проекта.
permission_mode — acceptEdits (по умолчанию, принимать правки файлов) либо
bypassPermissions (не спрашивать вообще, включая запуск команд).
model — необязательный, доступен в обоих вызовах: алиас (opus, sonnet, haiku) или полное
имя (claude-opus-5). Если не передать, берётся model из конфига, а если и там пусто — модель
выбирает сам CLI.
Если пропустить шаг 2, вызов будет отклонён с текстом «план сессии b1e41519… получен, но не одобрен» и подсказкой, что вызвать дальше.
Долгие задачи и наблюдаемость
MCP-клиенты обычно обрывают вызов инструмента примерно через минуту, а задача может идти
полчаса. Поэтому plan_task и execute_task ждут результат не дольше wait_seconds
(по умолчанию 20 с). Успели — отдают полный отчёт сразу; не успели — возвращают
status: "running" и process_id:
{ "name": "get_task_status", "arguments": { "process_id": "6f0c…", "wait_seconds": 30 } }wait_seconds при опросе означает «подожди до N секунд, если задача ещё идёт».
wait_seconds: 0 в execute_task — сразу уйти в фон, не дожидаясь ничего. Стоимость известна
только по завершении: пока задача идёт, total_cost_usd равен null.
Идущая задача не чёрный ящик. В каждом ответе есть объект progress: что вызывалось
(tools_used, last_tool_call), последнее видимое сообщение модели, idle_seconds и лента
recent_events, — а next_step называет словами то, что происходит прямо сейчас (ждёт
разрешения, зависла, выполняет долгий инструмент, ходит по кругу). Поле wait_ended_reason
говорит, почему вернулось ожидание: задача закончилась, вышло время или появился запрос
на разрешение.
Поля ответа и таблица progress целиком — docs/protocol.md; устройство
потока событий и пороги диагностики — docs/internals.md.
Настройка
Сервер ищет конфиг в таком порядке:
путь из переменной
CCC_MCP_CONFIG;ccc-mcp.config.jsonрядом с пакетом;ccc-mcp.config.jsonв текущем каталоге.
Если конфига нет и не задан CCC_ALLOWED_ROOTS — сервер не стартует: без белого списка
работать небезопасно. В конфиге разрешены комментарии // и /* … */.
Белый список каталогов. project_dir из вызова проходит realpath (снимаются симлинки и
junction'ы, нормализуется регистр) и только потом сверяется с allowedRoots. Отклоняются
относительные пути, обход через .., несуществующие каталоги и каталоги-соседи вроде
D:\Projects-other.
Наблюдаемостью управляют три ключа: streamEvents (килсвитч разбора потока, по умолчанию
true), logProgress и logProgressIntervalMs (сводка живого состояния в лог, по умолчанию
выключена).
Переменные окружения перекрывают файл: CCC_ALLOWED_ROOTS (несколько путей через ;),
CCC_CLAUDE_BIN, CCC_GIT_BIN, CCC_MODEL, CCC_TIMEOUT_MS, CCC_LOG_FILE,
CCC_HOOKS_ENABLED (1/0), CCC_STREAM_EVENTS (1/0), CCC_AUTO_APPROVE_COMMANDS
(несколько команд через ;).
Все ключи с умолчаниями и пояснениями — в ccc-mcp.config.example.json и в разделе «Что стоит настроить» SETUP.md.
Безопасность — коротко
Правка файлов силами Claude Code — только по одобренному плану, привязанному к
plan_digestи каталогу.write_project_fileиrun_git— сознательные исключения: тот же результат достижим через обычный цикл, поэтому запрет дал бы не защиту, а неудобство. Каждая операция в логе.Ключ родителя не передаётся: все
ANTHROPIC_*иCLAUDE_*вычищаются из окружения дочернего процесса.Без shell.
spawnсshell: false, текст задачи и аргументы git — отдельными элементами argv, сообщение коммита — через stdin.Белый список каталогов проверяется до запуска процесса.
Таймаут (
timeoutMs, 30 минут) снимает зависший процесс вместе с потомками,maxConcurrentне даёт расплодить процессы.
Разбор каждого пункта — docs/security.md.
Документация
Файл | О чём |
Пошаговый рунбук оператора: авторизация, сборка, конфиг, подключение к CLI и Desktop на Windows и macOS, проверка | |
Императивный протокол для вызывающего ИИ-агента — файл, который кладут в системный промпт | |
Инструменты вне протокола: файловые и | |
Протокол целиком: состояния, открытые вопросы, | |
Пооперационные разрешения (PreToolUse-хуки), | |
Модель безопасности и обоснование каждой границы | |
Политика безопасности: модель угроз коротко, поддерживаемые версии, адрес для приватного сообщения об уязвимости | |
Что и как пишется в JSONL-лог, что не пишется никогда | |
Полный справочник симптомов и решений | |
Внутреннее устройство: поток событий stream-json, паттерны диагностики, | |
Инструкции Claude Code, работающему над этим репозиторием |
Проверка
npm run build
npm run smoke -- --no-live # только проверки без вызовов Claude Code
npm run smoke # полный прогон, тратит токеныСкрипт поднимает сервер как настоящий MCP-клиент и проходит весь протокол вместе с отказами,
мост разрешений, файловые инструменты, листинг и run_git на реальном временном репозитории.
Что именно покрывает каждый блок — docs/internals.md.
Автор
Basil@155 — me@basil155.ru, www.basil155.ru
Код написан в паре с Claude Code (Claude Opus 5).
Лицензия
MIT — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Coordinate coding agents through MCP using existing AI plans, saved work, and independent checks.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables ISLI agents and MCP clients to dispatch natural-language coding and terminal tasks to a locally-installed Claude Code CLI, supporting both one-shot execution and persistent sessions with workspace and security controls.-
- FlicenseNot gradedqualityCmaintenanceEnables Claude to delegate coding tasks to a worker CLI, handling actual code modifications and command execution while Claude supervises and verifies results.-
- AlicenseAqualityCmaintenanceBridges a main agent (e.g., Codex) to a separate execution model in Claude Code Haha Desktop, enabling delegated coding tasks with file modifications, test runs, and change auditing.61MIT
- AlicenseAqualityCmaintenanceEnables Codex to delegate coding tasks to an OpenCode CLI locally, returning structured results such as exit codes, session summaries, tool calls, and git diffs.2MIT