cheerio-mcp-bridges
cheerio-mcp-bridges
Четыре «узких» MCP-сервера, позволяющие агенту-оркестратору, который не может работать с терминалом GUI (например, Claude, работающий в Cowork), управлять четырьмя локально установленными и авторизованными CLI для кодинга:
Сервер | Внутренний вызов | Внешний инструмент | Язык |
|
|
| Node.js |
|
|
| Node.js |
|
|
| Node.js |
|
|
| Node.js |
Четыре моста независимы, устанавливать все четыре не обязательно. Сначала запустите npm run doctor, чтобы узнать, какие CLI доступны на этой машине, и включите только соответствующий мост.
Каждый из четырёх серверов предоставляет единственный, узконаправленный инструмент (не универсальный run_command) — он может только «отправить запрос этому агенту». Остаточный риск заключается в том, что базовый CLI может делать что угодно, получив запрос, поэтому по умолчанию подход консервативный.
Ключевые моменты дизайна
Рабочий каталог фиксируется сервером: cwd берётся из переменной окружения (
PI_BRIDGE_CWD/AGY_BRIDGE_CWD/CODEX_BRIDGE_CWD/COPILOT_BRIDGE_CWD), запрос вызывающей стороны не может его изменить.Детерминированное продолжение сессии:
pi: сервер сам генерирует UUID →
--session-id(pi поддерживает «создать, если не существует»), при первом вызове возвращает id; последующие вызовы с тем же id продолжают сессию, не полагаясь на неоднозначную семантику «продолжить последний».agy: невозможно заранее указать id, после первого запуска извлекается из
conversation_idв--output-format stream-jsonи возвращается; последующие вызовы используют--conversation <id>.codex: после первого запуска извлекается из
thread_idв событииthread.startedи возвращается; последующие вызовы используютcodex exec resume <id>.copilot: сервер сам генерирует UUID →
--session-id, при первом вызове возвращает id; последующие вызовы с тем же id продолжают сессию.
Нулевая инъекция в shell: во всех четырёх случаях используется
shell:falseдля прямого spawn, запрос передаётся как один элемент argv, любые специальные символы shell не интерпретируются.Консервативные флаги разрешений:
По умолчанию разрешено чтение и запись файлов (соответствует выбору пользователя), но возможности записи/опасные действия всё равно разделены.
pi по умолчанию не использует доверие к проекту
-a(approve_projectвключает).agy по умолчанию не использует
--dangerously-skip-permissions; чтение/запись в рабочей области разрешены автоматически, команды shell остаются под контролем, если только не указаноdangerously_allow_all:true.codex по умолчанию использует sandbox
read-only(danger-full-accessтребует явного указания).copilot по умолчанию использует только
--allow-all-tools(необходимо для неинтерактивного режима), не использует--allow-all(включая paths + urls), последнее требуетdangerously_allow_all:true.
Аудит: каждый вызов записывает одну строку JSONL в
logs/<pi|agy|codex|copilot>-YYYYMMDD.jsonl(запрос, id сессии/потока, код возврата, время выполнения, использование).
Related MCP server: mcacp
Подводные камни, выявленные при тестировании
stdin должен быть закрыт: CLI воспринимают переданный через stdin контент как дополнительный контекст. Оставленный открытым stdin pipe в Node spawn заставляет CLI зависнуть в ожидании EOF. Решение:
stdio: ['ignore','pipe','pipe'].Расширения pi по умолчанию отключены: интерактивные расширения (например,
auto-annotate/plannotator) в headless-режиме зависают (ожидая UI, который никогда не появится). Поэтому по умолчанию используется--no-extensions, при необходимости можно включить черезenable_extensions:true.codex обязательно должен использовать
--skip-git-repo-check: если cwd не является git-репозиторием (например,C:/Cheerio), без этого флага произойдёт ошибка и выход.copilot в неинтерактивном режиме обязательно должен использовать
--allow-all-tools: в документации явно указано, что для неинтерактивного режима необходим этот флаг, иначе он зависнет в ожидании подтверждения прав пользователя. Мост по умолчанию использует--allow-all-tools, но--allow-all(включая paths + urls) включается только приdangerously_allow_all:true.MCP-сервер copilot загружается очень медленно: в неинтерактивном режиме copilot всё равно загружает все MCP-серверы (playwright, notion, tavily и др.), только запуск занимает 10–30 секунд. Если таймаут слишком короткий, процесс может быть убит во время загрузки MCP.
Автомаршрутизация copilot по умолчанию может исчерпать квоту: если модель не указана, hydra router copilot автоматически выбирает модель (например,
gpt-5-mini), и если квота на эту модель исчерпана, вызов просто завершится ошибкой. Рекомендуется явно указывать модель при вызове.Copilot/Codex не могут запросить оставшуюся квоту в неинтерактивном режиме:
Copilot:
copilot billing/copilot limits— это справка, работает только в интерактивном режиме UI. В неинтерактивном CLI нет команды типаcopilot usage. Мост может получить только «снимок на момент сбоя» из событияmodel.call_failureсquotaSnapshots, но не может активно запросить остаток.Codex:
codex login statusпоказывает только способ входа (например,Logged in using ChatGPT), нет запроса использования/квоты.codex doctorвыполняет только диагностику установки.turn.completed.usageв мосте содержит только токены за текущий вызов, без остатка квоты.
Корпоративный TLS-перехватывающий прокси может привести к сбою
npm install: некоторые организации используют прокси с проверкой TLS (например, схемы перехвата сертификатов от поставщиков безопасности) для расшифровки HTTPS-трафика. Это приводит к сбою проверки TLS в Node.js,npm installвыдаёт ошибки типаUNABLE_TO_GET_ISSUER_CERT_LOCALLYилиcertificate chain incomplete. Решение: установить переменную окруженияNODE_EXTRA_CA_CERTS, указывающую на полный файл цепочки сертификатов компании (формат PEM), причём нужен именно промежуточный сертификат CA (intermediate cert), а не только конечный сертификат.Корпоративный IP allow list блокирует доступ CLI (мост обрабатывает это по умолчанию): если корпоративный план вашей учётной записи (например, GitHub Copilot Enterprise) включает IP allow list,
ask_copilotможет быть заблокирован API (сообщение об ошибке типа "enterprise has an IP allow list enabled, and your IP address is not permitted"). Коренная причина обычно в том, что окружение родительского процесса моста содержит настройки проксиHTTP_PROXY/HTTPS_PROXY, которые наследуются дочерним процессом CLI, в результате OAuth-запросы идут через корпоративный прокси, а исходящий IP прокси не входит в allow list. Начиная с версии v0.2.0 мост по умолчанию автоматически удаляет переменные прокси из окружения дочернего процесса (HTTP_PROXY/HTTPS_PROXY/ALL_PROXYво всех регистрах), чтобы CLI подключался напрямую и избегал этой проблемы. Если в вашей среде наоборот необходимо проходить через прокси для доступа к целевому сервису, установитеBRIDGE_BYPASS_PROXY=false, чтобы вернуть наследование прокси дочерним процессом.
Установка на разных машинах (с нуля)
Четыре моста независимы. Сначала запустите
npm run doctor, чтобы узнать, какие CLI доступны на этой машине, в конфигурацию MCP-клиента добавляйте только соответствующие мосты, остальные (неустановленные) не добавляйте.
Предварительные требования
Node.js ≥ 18 (требуется поддержка
node:testи ES modules)npm ≥ 9
Шаг 1: Клонирование и установка
git clone https://github.com/CheerioCorner/cheerio-mcp-bridges.git
cd cheerio-mcp-bridges
npm installШаг 2: Проверка доступных CLI
npm run doctorВыведет таблицу, показывающую, какие из 4 CLI найдены, могут ли они выполнить --version, и какие мосты рекомендуется включить.
Шаг 3: Установка нужных CLI (если ещё не установлены)
Ниже приведены способы установки и авторизации для каждого CLI, пропускайте те, которые не установлены, не нужно устанавливать все:
pi (earendil-works/pi)
npm install -g @earendil-works/pi-coding-agent
pi # 首次啟動會引導登入Проверка: pi --version или pi --help
agy (Google Antigravity CLI)
# 請參考官方文件安裝,通常是一個獨立執行檔
# https://github.com/nicholasareed/antigravity
agy # 首次啟動會引導 Google 帳號授權Проверка: agy --version
codex (OpenAI Codex CLI)
# 請參考 OpenAI 官方文件安裝
# Windows 通常安裝在 %LOCALAPPDATA%/Programs/OpenAI/Codex/
codex login # 會引導 ChatGPT 帳號授權Проверка: codex --version, codex login status
copilot (GitHub Copilot CLI)
npm install -g @github/copilot-cli
copilot login # 會引導 GitHub 帳號授權Проверка: copilot --version
Шаг 4: Выборочное включение мостов
Скопируйте конфигурацию нужных вам мостов из mcp-config.example.json в настройки вашего MCP-клиента (например, ~/.mcp.json или .mcp.json).
Не копируйте все четыре. Копируйте только блоки, соответствующие тем CLI, которые установлены и авторизованы на вашей машине, затем настройте пути и переменные окружения.
Например, если у вас установлены только pi и copilot, добавьте только блоки pi-bridge и copilot-bridge.
Шаг 5: Проверка работоспособности моста
Запустите MCP-клиент и отправьте небольшой запрос с помощью соответствующего инструмента для теста:
ask_pi:{ "prompt": "Reply only: pong" }ask_agy:{ "prompt": "Reply only: pong" }ask_codex:{ "prompt": "Reply only: pong" }ask_copilot:{ "prompt": "Reply only: pong" }
Должен прийти ответ pong и строка с метаданными моста. Если получено сообщение об ошибке, проверьте:
Правильность пути к исполняемому файлу CLI (переменная окружения
*_BRIDGE_ENTRY)Выполнен ли вход в CLI
Существует ли переменная окружения cwd (
*_BRIDGE_CWD)
Быстрый старт
cd C:/Cheerio/Claude/mcp-bridges # 或你 clone 的路徑
npm install
npm run doctor # 檢查哪些 CLI 可用
npm test # 執行 parser/arg-builder 單元測試(不花 API 額度)Регистрация в MCP-клиенте
См. mcp-config.example.json. Это меню — исходя из реально доступных CLI на вашей машине, скопируйте только соответствующие блоки в настройки вашего MCP-клиента (.mcp.json) и настройте пути в соответствии с реальной ситуацией. Не нужно копировать все четыре.
Интерфейсы инструментов
ask_pi
Параметр | Тип | По умолчанию | Описание |
| string | — | Инструкция для pi (обязательно) |
| string | автогенерация | Передайте значение из предыдущего ответа для продолжения того же диалога |
| boolean | false | true — только |
| string | — | Переопределение модели |
| boolean | false | Доверять локальным ресурсам проекта (pi -a) |
| boolean | false | Загружать расширения (есть риск зависания) |
| number | 300000 | Жёсткое время ожидания |
Возвращает: итоговый текст pi + строка pi-bridge metadata (с session_id).
ask_agy
Параметр | Тип | По умолчанию | Описание |
| string | — | Инструкция для agy (обязательно) |
| string | автоизвлечение | Передайте значение из предыдущего ответа для продолжения |
| string | — | slug модели (см. |
| low|medium|high | — | Уровень рассуждений |
| boolean | false | Включить ограничения терминальной песочницы (--sandbox) |
| boolean | false | Опасно: автоматически разрешить все права инструментов (включая shell) |
| number | 300000 | Жёсткое время ожидания (также используется как agy --print-timeout) |
Возвращает: итоговый ответ agy + строка agy-bridge metadata (с conversation_id, status).
ask_codex
Параметр | Тип | По умолчанию | Описание |
| string | — | Инструкция для Codex (обязательно) |
| string | автогенерация | Передайте возвращённый ранее thread_id для продолжения |
| string | — | Переопределение модели (например, |
| read-only|workspace-write|danger-full-access | read-only | Политика песочницы |
| number | 300000 | Жёсткое время ожидания |
Возвращает: итоговый текст Codex + строка codex-bridge metadata (с thread_id, usage).
ask_copilot
Параметр | Тип | По умолчанию | Описание |
| string | — | Инструкция для Copilot (обязательно) |
| string | автогенерация | Передайте значение из предыдущего ответа для продолжения того же диалога |
| string | — | Переопределение модели (например, |
| none|minimal|low|medium|high|xhigh|max | — | Уровень рассуждений |
| number | — | Максимальная стоимость за один вызов (предохранитель) |
| boolean | false | Опасно: добавить |
| number | 300000 | Жёсткое время ожидания |
Возвращает: итоговый ответ Copilot + строка copilot-bridge metadata (с session_id, usage, quota_snapshots).
Ограничение запроса квоты: в Copilot CLI нет команды в неинтерактивном режиме для запроса «оставшейся общей квоты».
copilot billing/copilot limitsработают только в интерактивном режиме UI. Мост может только сообщить, «сколько потрачено в этом вызове» (usage+quotaSnapshotsза текущий вызов), но не может сообщить остаток квоты. Аналогично для Codex:codex login statusпоказывает только статус входа, без запроса использования.
Переменные окружения
Переменная | По умолчанию |
|
|
| Глобальный путь |
| Путь к |
|
|
|
|
| Путь к |
|
|
|
|
| Путь к |
|
|
|
|
|
|
BRIDGE_BYPASS_PROXY: мост по умолчанию удаляет переменные HTTP_PROXY/HTTPS_PROXY/ALL_PROXY (во всех регистрах) из окружения дочернего процесса перед вызовом базового CLI, чтобы избежать влияния корпоративных настроек прокси, унаследованных от родительского процесса. Поведение удаления отключается только при явном указании строки "false".
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Related MCP Servers
- AlicenseBqualityFmaintenanceEnables orchestrating multiple AI CLI agents (Claude Code, Codex, Gemini CLI, Copilot CLI) through a unified MCP interface for task delegation, cross-agent comparison, and specialized tools like code review and debugging.1418 npm14MIT
- AlicenseAqualityDmaintenanceBridges any MCP client (like Claude Code, Zed, VS Code) to any ACP coding agent, enabling multi-agent orchestration from a single chat interface.24111 npm11Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP bridge for calling local coding-agent CLIs (Codex, Claude) from another agent, enabling bounded tasks like code review, verification, and bug hunting.MIT
- AlicenseAqualityAmaintenanceBridges multiple CLI coding agents (Codex, Cursor, OpenCode, Claude, Antigravity) into any MCP client, enabling delegation of prompts, parallel execution, and code review workflows.665 npmMozilla Public 2.0