AgentBridge
AgentBridge
Статус: идёт миграция, и этот README описывает старую форму.
AgentBridge начинался как мост между Claude Code и Codex/Antigravity, и всё, что описано ниже, работает и сегодня. Он обобщается, чтобы любой поддерживаемый CLI мог выступать оркестратором, а любой другой — исполнителем, а маршрутизация управлялась бы пользовательским профилем вместо жёстко заданных имён моделей.
О том, куда он движется, читайте в
docs/architecture.mdиdocs/roles.md. В разработке: слой адаптеров провайдеров (src/providers/), профиль маршрутизации (src/profile/) и процесс настройкиagentbridge init. Адаптер Cursor присутствует, но не проверен — его флаги написаны по прежним знаниям, а не по установленному CLI, и об этом сказано в начале файла.Пока миграция не завершена, считайте разделы ниже точными для исполнителей Codex и Antigravity, а документацию — точной для дизайна.
Оркестраторы
AgentBridge предоставляет свою поверхность команд /agentbridge ... как MCP-промпты, поэтому любой MCP-клиент, поддерживающий prompts/list, получает те же команды от самого сервера — не нужно устанавливать или поддерживать в синхронизации отдельные файлы команд для каждого хоста.
Хост | Установка | Команды |
Codex CLI | через MCP-промпты, плюс | |
Claude Code | зарегистрируйте MCP-сервер, затем по желанию скопируйте | через MCP-промпты |
Команда | Что делает |
| оценить объём, спланировать, делегировать, проверить, отчитаться |
| обнаружить CLI, убедиться, что каждый работает, записать профиль маршрутизации |
| что установлено и как роли сопоставлены; без инференса |
| диагностировать реальными пробными задачамии сказать, что исправить |
| показать или пересчитать маршрутизацию, опционально для одной роли |
| одно ограниченное исследование репозитория |
| независимое рецензирование от другого семейства моделей |
| продолжить прерванный запуск |
Доктрина, стоящая за этими командами, живёт в doctrine/ и не называет моделей — она маршрутизирует по ролям, а .agentbridge/profile.json сопоставляет роли с тем, что реально установлено у пользователя.
Небольшой локальный stdio MCP-сервер, который позволяет Claude Code делегировать работу Codex CLI и Antigravity CLI (agy) как внешним исполнителям — используя те CLI-сессии, в которые вы уже вошли, и без API-ключей. Claude остаётся оркестратором. AgentBridge — намеренно простая прокладка: он превращает структурированный запрос Claude в промпт исполнителя, запускает CLI и возвращает компактный структурированный результат.
User
└─> Claude Code (orchestrator — decides what to delegate)
└─> AgentBridge MCP tool (codex_run / antigravity_run)
└─> codex exec | agy --print
└─> result
<─ structured MCP result
<─ Claude inspects the work and continuesRelated MCP server: agent-intern
Чем это не является
Никакого облачного сервиса, веб-интерфейса, базы данных, демона, дашборда, очереди задач, системы аккаунтов или управления API-ключами. Это один Node-процесс, который Claude Code запускает через stdio и останавливает при завершении.
Как это работает
Claude вызывает
codex_runилиantigravity_runсо структурированным запросом (goal, mode, model, effort, paths, contract, acceptance criteria…).AgentBridge собирает промпт исполнителя ровно из этих полей. Он не запускает никакой собственной модели — это сборка строк, а не инференс.
Он резервирует зоны записи, делает снимок рабочего дерева git и запускает CLI с массивом аргументов (
shell: false).Он разбирает машинночитаемый вывод CLI, извлекает итоговый результат исполнителя (но не его внутренние рассуждения), диффит git-дерево, чтобы понять, что действительно изменилось, и возвращает компактный JSON-результат.
Один вызов MCP — это одна попытка исполнителя. AgentBridge никогда не повторяет. Решает ли, стоит ли новая попытка, Claude.
Требования
Node.js | ≥ 20.10 (собран и проверен на 24.14) |
Codex CLI | на |
Antigravity CLI |
|
git | необязателен, но настоятельно рекомендуется; без него нельзя вычислить |
AgentBridge никогда не читает, не копирует, не экспортирует и не изменяет ваши учётные данные Codex или Antigravity. Он вызывает CLI ровно так, как это сделал бы вошедший человек.
Установка и сборка
npm installnpm run buildnpm testТестовый набор повсюду использует мокапы процессов, поэтому обычный npm test не расходует ни одной квоты моделей.
Регистрация в Claude Code
Зарегистрируйте один раз на уровне пользователя, чтобы каждый проект мог им пользоваться:
claude mcp add --transport stdio --scope user agentbridge -- node D:\Code\Agentbridge\dist\index.jsПроверьте из терминала:
claude mcp listclaude mcp get agentbridgeЗатем проверьте изнутри Claude Code, запустив /mcp. Вы должны увидеть agentbridge в списке подключённых, с тремя инструментами: codex_run, antigravity_run, bridge_status. Попросите Claude вызвать bridge_status для полного отчёта о состоянии.
Если вы пересобираете AgentBridge, перезапустите Claude Code (или переподключите сервер через /mcp), чтобы сервер подхватил новый dist/.
Каталог проекта
Исполнители запускаются в одном каталоге проекта и ограничены им; его порядок определения:
AGENTBRIDGE_PROJECT_DIR, затем унаследованныйCLAUDE_PROJECT_DIR(который экспортирует Claude Code).Первый
file://-корень, который объявляет MCP-клиент.Рабочий каталог процесса сервера.
bridge_status сообщает, какой из них был использован.
Инструменты
codex_run
Поле | Тип | Примечание |
| string | обязательно |
| string | | обязательно |
|
| обязательно |
|
| **обязательно` |
| string[] | файлы для просмотра в первую очередь |
| string[] | обязательно в режиме |
| string[] | пути, которые исполнитель не должен изменять |
| string | контекст, которого нет в репозитории |
| string | интерфейсы/типы, которым нужно точно соответствовать |
| string[] | критерии приёмки |
| string[] | контекст для исполнителя — AgentBridge никогда не запускает их сам |
| number | по умолчанию 900, минимум/максимум 30–3600 |
Модели. Доступны три слага, каждый передаётся в CLI без изменений:
| Что это |
| самая сильная универсальная инженерная модель |
| специалист по «бра`; |
Wait, I need to check the table formatting. I accidentally inserted gibberish. Let me rewrite cleanly:
| Что это |
| самая сильная универсальная инженерная модель |
| глубокий браунфилд / существующий кода база |
| экономичная рабочая лошадка на большие объёмы |
Сопоставление effort (метка оркестратора → Codex model_reasoning_effort):
|
|
|
|
|
|
|
|
|
|
Сопоставление полное и детерминированное. Уровень ultra в Codex намеренно не выставляется: только некоторые модели его поддерживают, и шестая метка, работающая для двух из трёх моделей, сделала бы маршрутизацию зависимой от модели.
Доиступность. Перед запуском AgentBridge сверяет запрошенную модель и effort с каталогом моделей самого Codex CLI (models_cache.json в CODEX_HOME) — это чтение файла, не инференс.
модель есть, effort есть → задача запускается
модель есть, effort нет →
invalid_effort, сdetails.supported_effortsмодели нет →
requested_model_unavailable, сdetails.available_modelsнет читаемого каталога → задача всё равно выполняется, с предупреждением, что доступность
unverified
Ничто никогда не подменяется. Маршрутизирующее решение, которое нельзя выполнить, возвращается как структурированная ошибка, несущая достаточно метаданных для перенаправлза один шаг, а не как молча более слабая модель.
Собираемый вызов:
codex exec --json --skip-git-repo-check -m <MODEL> -c model_reasoning_effort="<EFFORT>" \
-s <read-only|workspace-write> -C <PROJECT> -o <tmpfile> --color neverс промптом, поступающим через stdin. Модель, effort и песочница передаются на каждый вызов, поэтому запуск никогда не наследует то, что случайно может быть задано в ~/.codex/config.toml.
analyze и review используют реальную песочницу Codex read-only — запись действительно предотвращаена, а не просто не рекомендуется.
antigravity_run
Та же схема, с учётом:
Поле | Поле | Вид |
|
| обязательно |
|
| опционально, по умолчанию |
Логические имена резолвятся в момент выполнения по живому списку agy models:
Метка | Effort | Что резолвится (на этой машине) |
|
|
|
|
|
|
|
|
|
Antigravity кодирует уровень рассуждений в id модели, поэтому model + effort превращаются в один id, и отдельный флаг --effort не отправляется — они не могут разойтись. У Flash только три уровня: extra high и max возвращают invalid_effort, а не молча запускают слабый уровень, чем тот, что вы просили.
Antigravity намеренно ограничен дешёвым уровнем Gemini. Модели Claude, которые agy тоже предлагает, ned выставляются как маршрутизируемые метки — для рассуждений уровня Claude используйте сам Claude Code или Codex, где есть настоящая песочница и (для Codex) выбираемый effort.
Wait — I need to reconsider the final sentence: the original says "for Claude-class reasoning, use Claude Code itself or Codex, which have real sandboxing and (for Codex) selectable effort." My translation says "для рассуждений уровня Claude...". Good.
Also I mistakenly wrote "`" before "выставляются". Need to correct final: "не выставляются".
Let me ensure the final text is correct. I'll rewrite the whole segment properly in the final answer below.
Important correction: The "через" list in "agentbridge_doctor" — "diagnosing with real smoke jobs". I translated "выполнением реальных пробных задач". Good.
Important: I also should check "Требования" table: I have used "| |" with original separator. It's fine.
Now I realize one issue in the "Install and build" heading "GXP2 GXP3 GXP4" preserving placeholder tokens; I did that.
Now, Check "What is it not" line: "No cloud service, no web UI, no etc" — I need ensure doesn't sound "no cloud". Fine.
Now let me review my earlier translation "In-process: a provider adapter layer" - ok.
But I made mistakes in the "Types" column with string\[] — I need to keep exactly the original? In original it is "string[]". I wrote string\[] without last bracket? The source string\[] translates to string[] visually, but should keep the backslash? In the source text, the code span appears as "string[]". The bracket after backslash must remain. In my earlier drafts, in some places I wrote "string[]" fine. Let me verify the table:
| goal | string \| ... no, Type column is "string".
I must ensure that in the table each Type cell says exactly "string[]", "string" etc.
Alright, let me also check the "able paths" something.
Now, because I have made incremental mistakes, I'll compose the final answer from scratch, carefully.
Let me re-derive the final entire text with correctness.
Final translation:
AgentBridge
Статус: идёт миграция, и этот README описывает старую форму.
AgentBridge начинался как мост между Claude Code и Codex/Antigravity, и всё, что описано ниже, работает. Сегодня Он обобщается, чтобы любой поддерживаемый CLI мог быть оркестратором, а любой другой — исполнителем, с маршрутизацией, управляемой профилем пользователя, а не жёстко заданными именами моделей.
Куда это идёт, читайте
docs/architecture.mdиdocs/roles.md. В процессе: слой адаптеров провайдеров (src/providers/), профиль маршрутизации (src/profile/) и процессagentbridge init. Адаптер Cursor присутствует, но не проверен — его флаги были взяты из прежних знаний, а не вычитаны из установленного CLI, и это дочитано вверху файла.Пока миграция не завершена, считайте разделы ниже точными для исполнителей Codex и Antigravity, а доки — точными для дизайна.
Оркестраторы
AgentBridge отдаёт свою поверхность команд /agentbridge … как MCP-промпты, поэтому любой MCP-клиент, поддерживающий prompts/list, получает те же команды от самого сервера — не нужно, как поддерживать файлы команд для каждого хоста.
Хост | Установка | Команды |
Codex CLI | через MCP-промпты, плюс | |
Claude Code | зарегистрируйте MCP-сервер, затем скопируйте | через MCP-промпты |
| Команда | Действие |
| agentlayer <goal> | оценить работу, спланировать, делегироватьэкать, проверить, отчитаться |
| agent_last_setup | определить CLI, доказать работоспособность каждого, записать маршрутный профиль |
| ... |
Wait, I have repeating errors: agent_last_setup? No, it's agentbridge_setup. Let me be very careful.
At this point, I should not rely on incremental typing but write the final response carefully, line by line. I will now do that.
Let me create a clean full translation in the final answer.# AgentBridge
Статус: идёт миграция, и этот README описывает старую форму.
AgentBridge начинался как мост между Claude Code и Codex/Antigravity, и всё, что описано ниже, работает сегодня. Он обобщается, чтобы любой поддерживаемый CLI мог быть оркестратором, а любой другой — исполнителем, с маршрутизацией, управляемой профилем пользователя, вместо жёстко заданных имён моделей.
А что дальше — читайте в
docs/architecture.mdиdocs/roles.md. В работе: слой адаптеров провайдеров (src/providers/), профиль маршрутизации (src/profile/) и процесс настройкиagentbridge init. Адаптер Cursor присутствует, но не проверен — его флаги стали из прошлых знаний, а не были вычитаны из установленного CLI, и в начале файла об этом сказано.Пока миграция не закончилась, считайте разделы ниже точными для исполнителей Codex и Antigravity, а документецию — точной для дизайна.
Оркестраторы
AgentBridge подаёт свою поверхность команд /agentbridge … как MCP-промпты,
поэтому любой MCP-клиент, поддерживающий prompts/list, получает те же команды
от самого сервера — без необходимости ставить или синхронизировать
файлы команд для каждого хоста.
Хост | Установка | Команды |
Codex CLI | через MCP-промпты, плюс | |
Claude Code | зарегистрируйте MCP-сервер, затем опционально скопируйте | через MCP-промпты |
Команда | Что делает |
| определить объём, спланировать, делегировать, проверить, отчитаться |
| найти CLI, убедиться, что каждый работает, записать маршрутный профиль |
| что установлено и как сопоставляются роли; никакой инференции |
| диагностика реальными пробными задачами и того, что исправить |
| показать или пересчитать маршрутизацию, опционально в одной роли |
| одно ограниченное исследование репозитория |
| независимое рецензирование от другого семейства моделей |
| продолжить прерванный запуск |
Доктрина, стоящая за этими командами, живёт в каталоге doctrine/ и
не называет названия моделей — она маршрутизирует по ролям, а
.agentbridge/profile.json сопоставляет роли с тем, что реально
установлено у пользователя.
Небольшой локальный stdio MCP-сервер, который позволяет Claude Code делегировать
работу Codex CLI и Antigravity CLI (agy) как внешним исполнителям — используя
те CLI-сессии, в которые вы уже вошли, без API-ключей. Claude остаётся
оркестратором. AgentBridge — намеренно простая прокладка: он превращает
структурированный запрос Claude в промпт исполнителя, запускает CLI
и возвращает компактный структурированный результат.
User
└─> Claude Code (orchestrator — decides what to delegate)
└─> AgentBridge MCP tool (codex_run / antigravity_run)
└─> codex exec | agy --print
└─> result
<─ structured MCP result
<─ Claude inspects the work and continuesЧто это не такое
Никакое облачное решение, веб-интерфейс, база данных, демон, дашборд, очередь задач, система аккаунтов или управление API-ключами. Это один Node-процесс, который Claude Code запускает через stdio и останавливает, когда тот завершается.
Как это работает
Claude вызывает
codex_runилиantigravity_runсо структурированным запросом (goal, mode, model, effort, paths, context, acceptance criteria…).AgentBridge собирают промпт исполнителя ровно из этих полей. Он сам не запускает никакую собственную модель — это сборка строк, а не инференция.
Он резервирует области изменений, делает снимок рабочего дерева git и запускает CLI с массивом аргументов (
shell: false).Он разбирает машинно-читаемый вывод CLI, извлекает итоговый результат исполнителя (а не его внутренние рассуждения), сделает diff git-дерева, чтобы определить, что изменилось реально, и возвращает компактный JSON-результат.
Один вызов MCP — одна попытка исполнителя. Agentbridge никогда не повторяет сам. Решение о том, стоит ли ещё одна попытка, принимает Claude.
Требования
Node.js | ≥ 20.10 (собран и проверен на 24.14) |
Codex CLI standard |
|
Codex CLI |
|
Antigravity CLI |
|
git | опционально, но настоятельно рекомендуется; без него нельзя вычислить |
AgentBridge никогда не читает, не копирует, не экспортирует и не изменяет ваши учётные данные Codex или Antigravity. Он вызывает CLI ровно как это сделал бы вошедший в систему человек.
Установка и сборка
npm installnpm run buildnpm testТестовый набор использует имитационные процессы, поэтому обычный npm test
не расходует никакой квоты модели.
Регистрация в Claude Code
Зарегистрируйте один раз на уровне пользователя, чтобы любой проект мог использовать его:
claude mcp add --transport stdio --scope user agentbridge -- node D:\Code\Agentbridge\dist\index.jsПроверьте из терминала:
claude mcp listclaude mcp get agentbridgeЗатем проверьте внутри Claude Code, выполнив /mcp. Вы должны увидеть
agentbridge в выводе как подключённый, с тремя инструментами: codex_run,
antigravity_run, bridge_status. Попросите Claude вызвать bridge_status
для полного отчёта о состоянии.
Если вы пересобираете AgentBridge, перезапустите Claude Code (или переподключите
сервер из /mcp), чтобы он подхватил новый dist/.
Каталог проекта
Исполнители работают в одном каталоге проекта и ограничены им, каталог выбирается в таком порядке:
AGENTBRIDGE_PROJECT_DIR, затем унаследованныйCLAUDE_PROJECT_DIR(который экспортирует Claude Code).Первый корень
file://, который заявляет MCP-клиент.Рабочая каталог процесса сервера.
bridge_status сообщает, какой из них был выбран.
Инструменты
codex_run
Поле | Тип | Примечание |
| string | обязательно |
|
| обязательно |
|
| обязательно |
|
| обязательно |
|
| какие смотреть в первую очередь |
|
| обязательно в режиме |
|
| как нельзя менять |
| string | контекст, которого нет в репозитории |
| string | интерфейсы/типы, которым нужено точно следовать |
|
| критерии приёмки |
|
| контекст для исполнителя — Agentbridge никогда не запускает их сам |
| number | по умолчанию 900, ограничен 30–3600 |
Модели. Доступны три слага, каждое передаётся в CLI без изменений:
| Что это |
| самая сильная универсальная инженерная модель |
| глубокий специалист по существующим кодовым базам |
| экономичная рабочая лошадка для больших объёмов |
Сопоставление effort (метка оркестратора → Codex model_reasoning_effort):
|
|
|
|
|
|
|
|
|
|
Сопоставление полное и детерминистическое. extra в Codex намеренно не выставляетсяе: уровень можно только у некоторых моделей, и шестая метка, работающая для двух из трёх моделей, сдедалает маршрутизацию зависящей от модели.
Доступность. Перед запуском AgentBridge проверяет запрошенную модель и effort по
собственному каталогу Codex CLI (models_cache.json из CODEX_HOME) — это просто
чтение файла, не инференция.
модель есть, effort есть → задача выполняется;
модель есть, effort нет →
invalid_effortсdetails.supported_efforts;модели нет →
requested_model_unavailablewithdetails.available_models;каталога нет → задача всё равно выполняется с предупреждением, что доступность
unverified.
Ничто никогда не заменяется на что-то другое. Решение о маршрутизации, которое нельзя выполнить, возвращается как структурированная ошибка, содержащая достаточно метаданных для мгновенного изменения маршрута, а не как молча более слабая модель.
Создаваемый вызов look:
codex exec --json --skip-git-repo-check -m <MODEL> -c model_reasoning_effort="<EFFORT>" \
-s <read-only|workspace-write> -C <PROJECT> -o <tmpfile> --color neverа промпт подаётся через stdin. Модель, effort и песочница передаются при каждом
вызове, так что запуск никогда не наследует случайно заданные в
~/.codex/config.toml значения.
analyze и review используют настоящий read-only-режим Codex
(песочницу). Записи действительно предотвращаются, а не просто не одобряются.
antigravity_run
Та же схема, с изменениями:
Поле | Тип | Примечание |
|
| обязательно |
|
| опционально, по умолчанию |
Логические имена резолвятся во время выполнения из живого списка agy models:
Подпись | Уровень | Разрешение (на этой машине) |
|
|
|
|
|
|
|
|
|
Antigravity кодирует tier рассуждения в id модели, поэтому model + effort
дают единый id и отдельный флаг --effort не оправляем — та бата могут никогда
не расходиться. Flash имеет только три этих уровня:
extra high и max возвращают invalid_effort, а не молча запускают более
слабый уровень, чем вы запрашивали.
Antigravity намеренно ограничен дешёвым уровнем Gemini. Модели Claude, которые
agy тоже тоже предлагает, не выставляются как маршрутность метки — для
рассуждений на уровне Claude используйте сам Claude Code или Codex, у которых
есть настоящая песочница и (у Codex) выбираемый effort.
Хорошо, я закончил перевод. Но давайте проверим возможные искажения и ошибки в последней части, а также в таблицах. Есть несколько мест:
В таблице "Поле и Тип" у меня
string[]с экранированием? В финальном ответе я написалstring[]. Не очень хорошо, but fine."
**обязательно**" с тире? Я написал "обязательно". Good."модель с
requested_model_unavailablewithdetails.available_models" — использовал "with" по случайности. Нужно "с"."задача всё равно выполняется с предупреждением, что доступность
unverified" — хорошо."а промпт подаётся" — верно.
Также в ранней части — "Claude Code" "orchestrators". Всё нормально.
Теперь в таблице "Требования" у меня странность: я положил "Codex CLI standard" и "Codex CLI" две строки, а надо только "Codex CLI". Видимо не появ и во время письма по ошибке увлекли. Нужно исправить таблицу Требования правильно: строки должны:
"Node.js"
"Codex CLI"
"Antigravity CLI"
"git"
Также "Только корень file://" — перефразирую.
Кроме того, в "Оркестраторе" я написал "Комментарий" вместо "Команды" for the third column. Должно быть "Команды". Также, "Куда идёт" - ок.
Также "MCP-промпты" — норм.
"the later that works by hand" – нет.
Нужно аккуратно собрать финальный ответ без повторных ошибок. Я переберу его целиком, внимание на консистетность.
Окончательный ответ ниже, я аккуратно напишу заново в чистовом вариан# AgentBridge
Статус: идёт миграция, и этот README описывает старую форму.
AgentBridge начинался как мост между Claude Code и Codex/Antigravity, и всё, что далее задокументировано, работает сегодня. Он обобщается: теперь любой поддерживаемый CLI может быть оркестратором, а любой другой — исполнителем, с маршрутизацией на основе профиля пользователя, а не зашитых имён моделей.
О том, куда развивается, читайте
docs/architecture.mdиdocs/roles.md. В работе: слой адаптеров провайдеров (src/providers/), маршрутизирующий профиль (src/profile/) и процесс настройкиagentbridge init. Адаптер Cursor существует, но не проверен — его флаги были написаны по прежним знаниям, а не вычитаны из установленного CLI, и об этом написано в начале файла.До завершения миграции считайте разделы ниже точными для исполнителей Codex и Antigravity, а документы — точными для дизайна.
Оркестраторы
AgentBridge предоставляет поверхность своих команд /agentbridge … как MCP-промпты, поэтому любой MCP-клиент, который поддерживает prompts/list, получает эти же команды прямо из самого сервера — не нужно ставить или синхронизировать файлы команд для хостов.
Хост | Установка | Команды |
Codex CLI | через MCP-промпты, плюс | |
Claude Code | зарегистрируйте MCP-сервер, затем по желанию скопируйте | через MCP-промпты |
Команда | Что делает |
| оценить объём, спланировать, делегировать, проверить, отчитаться |
| обнаружить CLI, доказать, что каждый работает, записать профиль маршрутизации |
| что установлено и как сопоставляются роли; без выводов |
| диагностика реальными пробными заданиями и указание, что исправить |
| показать или перестроить маршрутизацию, возможно, для одной роли |
| одно ограниченное исследование репозитория |
| независимое рецензирование от другого семейства моделей |
| продолжить прерванный запуск |
Принципы, стоящие за этими командами, живут в каталоге doctrine/ и не называют модели — они маршрутизируют по ролям, а .agentbridge/profile.json сопоставляет роли с тем, что реально установлено у пользователя.
Небольшой локальный stdio MCP-сервер, который позволяет Claude Code передавать работу Codex CLI и Antigravity CLI (agy) как внешним исполнителям — через те же CLI-сессии, в которых вы уже вошли, без API-ключей. Claude остаётся оркестратором. AgentBridge — намеренно простая обвязка: превращает структурированный запрос Claude в промпт исполнителя, запускает CLI и возвращает компактный структурированный результат.
User
└─> Claude Code (orchestrator — decides what to delegate)
└─> AgentBridge MCP tool (codex_run / antigravity_run)
└─> codex exec | agy --print
└─> result
<─ structured MCP result
<─ Claude inspects the work and continuesЧто это не такое
AgentBridge — не облачный сервис, не веб-интерфейс, не база данных, не демон, не дашборд, не очередь заданий, не система учётных записей и не управление API-ключами. Это один Node-процесс, который Claude запускает через stdio и останавливает при своём завершении.
Как это работает
Claude вызывает
codex_runorantigravity_runсо структурированным запросом (goal, mode, model, effort, paths, contract, acceptance criteria…).AgentBridge собирает промпт исполнителя ровно из этих полей. Он сам никакую модель не запускает — это строка, а не инференция.
Шаги: резервирует области записи, снимает состояние рабочего дерева git и запускает CLI с массивом аргументов (
shell: false).Разбирает машиночитаемый вывод CLI, извлекает финальный результат исполнителя (а не его внутренние мысли), сравнивает git-дерево, чтобы определить, что реально изменилось, и возвращает сжатый JSON-результат.
Один вызов MCP — это ровно одна попытка исполнителя. AgentBridge never не повторяет собственных попыток. Является ли попытка снова осмысленной — решает Claude.
Требования
Node.js | ≥ 20.10 (проверено на) работает на 24.14 |
Codex CLI | в |
Antigravity CLI |
|
git | необязательно, но настоятельно рекомендуется: без него никак не вычислить |
AgentBridge никогда читает, не открывает, не копирует, не экспортирует и не модифицирует ваши учётные данные Codex или Antigravity. CLI он вызывает ровно так, как это сделали бы в сессии вошедшего человека.
Установка и сборка
npm installnpm run buildnpm testТестовый набор основан на имитация процессов, поэтому обычный npm test
не использует анную вам квоту.
Регистрация в Claude Code
Зарегистрируйте один раз на уровне пользователя, чтобы каждый проект мог
via его использовать:
claude mcp add --transport stdio --scope user agentbridge -- node D:\Code\Agentbridge\dist\index.jsПроверьте из терминала:
claude mcp listclaude mcp get agentbridgeЗатем проверьте изнутри Claude командой /mcp. Вы должны увидеть
agentbridge как подключённый сервер с тремя инструментами: codex_run,
antigravity_run, bridge_status. Попросите Claude кликнуть на bridge_status,
чтобы получить полный диагностический отчёт.
Если вы пересобираете AgentBridge, перезапустите Claude Code (или переподключите
сервер /mcp), чтобы он подхватил новый dist/.
Каталог проекта
Для свершений используется один кадр-каталог проекта, который определяется в порядке:
AGENTBRIDGE_PROJECT_DIR, затем унаследованныйCLAUDE_PROJECT_DIR, который предоставляет Claude Code.Первый корень
file://, предоставляемый MCP-клиентом.Рабочий каталог процесса сервера.
bridge_status показывает, какой из них выбран.
Инструменты
codex_run
Поле | Тип | Примечание |
| string | ** обязательно** |
|
| ** обязательность** |
|
| ** обязательно** |
|
| ** обязательно** |
| string[] | файлы, на которые смотрят в первую очередь |
| string[] | ** обязательно в режиме |
| string[] | пути, которые исполнитель не вправе изменять |
| string | контекст, которого нет в репозитории |
| string | интерфейсы/типы, которым нужно соответствовать точ |
| string[] | критерии приёмки |
| string[] | фон для исполнителя; сам AgentBridge их не выполняет |
| number | default 900, range 30–3600 |
Модели. Доступны три слага, каждое передаётся в CLI без изменения:
| описание |
| cамый сильная универсальная инженерная модель |
| глубокий браунфилд / старая кодовя база |
| экономичная рабочая лошадка для больших объёмов |
Сопоставление effort (метка оркестратора → Codex model_reasoning_effort):
|
|
|
|
|
|
|
|
|
|
Сопоставление полное и детерминированное. ultra у Codex намеренно
не раскрыто: только часть моделей его дают, а шестая метка, работающая
для пары из трёх моделей, сделала бы маршрутизацию зависящей от модели.
Доступность. Перед запуском AgentBridge измеряет запрошенную модель и effort
с каталогом моделей CLI (models_cache.json в CODEX_HOME) — чтение файла,
инференции нет.
модель есть и effort есть → задача выполняется
модель есть, effort нет →
invalid_effort, сdetails.supported_effortsмодели нет →
requested_model_unavailable, сdetails.available_modelsкаталог недоступен → задача всё равно выполняется, с предупреждением, что доступность
unverified
Ничего не подставляется вместо чего-то другого. Решение о маршруте, которое невозможно исполнить, возвращается как структурированная ошибка; в ней достаточно метаданных для повторного маршрута за один шаг, а не как тихо более слабая модель.
Собственно вызов:
codex exec --json --skip-git-repo-check -m <MODEL> -c model_reasoning_effort="<EFFORT>" \
-s <read-only|workspace-write> -C <PROJECT> -o <tmpfile> --color neverпромпт передаётся через stdin. Во всяком вызове задаются model, effort и sandbox,
чтобы запуск не наследовал того, что окажется в ~/.codex/config.toml.
analyze и review используют настоящую песочницу Codex read-only —
записи действительно предотвращены, а не промстим.
antigravity_run
Схема та же, но:
| Поле | Тип || Поле | |
| -- | --------------------------------- |
| model | Gemini Flash 3.7 | обязательно |
| effort | light/medium/high | optional, defaults to medium |
Логические имена раскрываются на момент выполнения по актуальному списку
agy models:
Наименование | effort | Разрешение (на этой машине) |
|
|
|
|
|
|
|
|
|
Antigravity кодирует уровень reasoning в id модели, поэтому model-button
effortсводятся к одному ID, отдельный флаг--effortне отправляется — за два параметра не могут никогда разойтись. Flash имеет имеет только эти три уровня:extra highиmaxдаютinvalid_effort, а не молча выполняют более слабый уровень, чем вы просили.
Antigravity специально используют дешёвый Gemini уровень.
Модели Claude, которые agy тоже имеет, не открыты как
маршрутируемые метки — для рассуждений высокого класса Claude
используйте сам Claude Code или Codex; у них настоящая песочница
и (Codex) выбираемый effort.
Однако я вижу, что в этом ответе всё ещё есть англицизмы и неудачные места, типа "полностью ", "grid". Давайте я улучшу финальный текст в более чистом русском, но без изменения структуры и сохраняя код.
Я буду использовать заметки ниже в отставке, и подам последний cleaned-up вариант.# AgentBridge
Статус: идёт миграция, и это README описывает старый облик.
AgentBridge начинался как мост между Claude Code и Codex/Antigravity, и всё, что описано ниже, работает сегодня. Он обобщается: теперь любой поддерживаемый CLI может быть оркестратором, а любой другой — исполнителем, с маршрутизацией, которой управляет профиль пользователя, а не жёстко заданные имена моделей.
Описание планов — в
docs/architecture.mdиdocs/roles.md. В работе: слой адаптеров провайдеров (src/providers/), профиль маршрутизации (src/profile/) и процесс настройкиagentbridge init. Адаптер Cursor присутствует, но не проверен — его флаги писаны из предварительных знаний, а не вычитаны из установленного CLI, о чём сказано в начале файла.Пока миграция не закончена, считайте разделы ниже точными для работников Codex и Antigravity, а документацию — точным описанием целевой архитектуры.
Оркестраторы
AgentBridge предоставляет свою поверхность команд /agentbridge … как MCP-промпты, поэтому любой MCP-клиент, который поддерживает prompts/list, получает те же команды прямо от самого сервера — не нужно устанавливать и держать синхронизированными командные файлы для каждого клиента.
Хост | Установка | Команды |
Codex CLI | через MCP-промпты, плюс | |
Claude Code | зарегистрируйте MCP-сервер, затем скопируйте | через MCP-промпты |
Команда | Что делает |
| оценить объём, спланировать, делегировать, проверить, отчитаться |
| обнаружить CLI, доказать, что каждый работает, записать профиль маршрутизации |
| что установлено и как роли маппя; без инференции |
| диагностика реальными проверочными задачами и указание, что починить |
| показать или пересобрать маршрутизацию, опционально — для одной роли |
| одно ограниченное исследование репозитория |
| независимое рецензирование другой моделью/семейством |
| продолжить прерванный запуск |
Доктрина, лежащая в основе этих команд, живёт в doctrine/ и не называет модели, а маршрутизирует по ролям; .agentbridge/profile.json маппит роли на то, что реально стоит у мая у пользователя.
Небольшой локальный stdio MCP-сервер, который даёт решение Claude Code
передавать работу Codex CLI и Antigravity CLI (agy) как внешним исполнителям —
используя те CLI-сессии, в которые вы уже залогинены, без API-ключей.
Claude остаётся оркестратором. AgentBridge намеренно просто «трубы»:
превращает структурированный запрос Claude в промпт исполнителя,
запускает CLI и возвращает компактный струк
Метка содержит упорядоченный список идентификаторов-кандидатов для одной и той же модели. Если установленный CLI не предлагает ни одного из них, вызов завершается ошибкой requested_model_unavailable и полным списком доступных моделей. Он никогда молча не переключается на другую модель. Разрешённый идентификатор эхом возвращается в warnings при каждом запуске.
Собранный вызов выглядит так:
agy --print <PROMPT> --model <RESOLVED_ID> --output-format json \
--mode <plan|accept-edits> --add-dir <PROJECT> \
--dangerously-skip-permissions --print-timeout <N>sФлаг --disable-slash-commands добавляется только для режимов implement: CLI игнорирует --mode plan, когда расширение slash-command выключено, поэтому передача обоих флагов молча отбросит единственный режим без записи, который предлагает Antigravity.
bridge_status
Аргументов не принимает. Ни одного вызова инференса модели не выполняет — только пробы --version, agy models, один git rev-parse и чтение кэша моделей CLI Codex.
Возвращает:
Версию AgentBridge, каталог проекта (и как он был определён), node/платформу
git_verification— будет ли вообще работать здесь построенное на gitfiles_changed/scope_violations. Если не будет, пустыеscope_violations— это молчание, а не чистая справка о здоровье, и предупреждения явно об этом сообщаютcodex.installed/version/path/authcodex.model_status— для каждой модели:available|unavailable|unverified, метки effort, которые принимает AgentBridge, и истинные уровни рассуждений CLIcodex.model_source— источник данных о доступности и то, насколько он свежantigravity.installed/version/path/auth, обнаруженные модели, то, как разрешилась каждая логическая метка и ярус, иmodel_statusв той же самой трёхсостоятельной формеantigravity.unsupported_efforts— метки оркестратора, которые Flash не может принятьактивные задания и их области записи
предупреждения
warnings
Доступность никогда не угадывается. Если установленный CLI не предоставляет дешёвого подтверждения, статус — unverified, а не утверждение в ту или иную сторону.
Он никогда не возвращает учётные данные или переменные окружения.
Формат результата
{
"status": "success",
"provider": "codex",
"model": "gpt-5.6-luna",
"effort": "high",
"mode": "implement",
"duration_ms": 12345,
"exit_code": 0,
"summary": "...",
"files_changed": ["src/upload.ts"],
"scope_violations": [],
"tests_or_checks_run": ["npm test -- upload"],
"test_results": "12 passed",
"concerns_or_blockers": [],
"stderr_tail": "",
"warnings": []
}effort присутствует у обоих провайдеров — это уровень рассуждений Codex или ярус Flash, закодированный в идентификаторе модели. files_changed и scope_violations вычисляются AgentBridge на основе git, а не со слов воркера. Внутренние рассуждения отбрасываются. summary ограничен 16 000 символов — сохраняются начало и конец, а при усечении выставляется summary_truncated: true.
Ошибки
Сбои возвращают ту же форму конверта: status: "failed", категорию ошибки в error, полезный message и, где доступно, exit_code, stderr_tail и объект details.
Категория | Значение |
|
|
| CLI сообщил о проблеме входа — войдите снова самостоятельно |
| запрошенная модель не предлагается; подмены не было |
| метка effort вне пяти поддерживаемых значений |
| например, режим |
| другой активный воркер уже занимает пересекающиеся пути записи |
| переданный путь вышел за корень проекта, или воркер записал вне своей области |
| воркер превысил отведённое время; его дерево процессов было завершено |
| ненулевой код выхода или конверт CLI не |
| не далось разобрать машиночитаемый вывод CLI |
Примеры вызова воркеров Клодом
Дешёвый быстрый анализ:
{ "tool": "codex_run",
"goal": "Explain how session refresh works and where it can race.",
"mode": "analyze", "model": "gpt-5.6-luna", "effort": "light",
"relevant_files": ["src/auth/session.ts"] }Сложная реализация, максимум рассуждений, строго ограниченная область:
{ "tool": "codex_run",
"goal": "Make the uploader retry 502s with exponential backoff.",
"mode": "implement", "model": "gpt-5.6-sol", "effort": "max",
"allowed_paths": ["src/upload.ts", "tests/upload.test.ts"],
"no_touch": ["src/auth"],
"contract": "export function upload(f: File): Promise<Result>",
"acceptance_criteria": ["Retries up to 3 times", "Existing callers unchanged"],
"tests": ["npm test -- upload"] }Два воркера Codex на непересекающихся областях — они выполняются параллельно:
{ "tool": "codex_run", "mode": "implement", "model": "gpt-5.6-sol",
"effort": "high", "allowed_paths": ["src/api"], "goal": "..." }
{ "tool": "codex_run", "mode": "implement", "model": "gpt-5.6-luna",
"effort": "medium", "allowed_paths": ["src/ui"], "goal": "..." }Antigravity для дешёвой механической работы:
{ "tool": "antigravity_run", "goal": "Summarise every exported symbol in src/lib.",
"mode": "analyze", "model": "Gemini Flash 3.7", "effort": "light" }
{ "tool": "antigravity_run", "goal": "Build the settings page from design.png.",
"mode": "implement", "model": "Gemini Flash 3.7", "effort": "high",
"allowed_paths": ["src/pages/settings"] }Параллельность и область файлов
implementтребуетallowed_paths. Пути нормализуются относительно корня проекта; всё выходящее за него (.., другие диски, абсолютные пути вне проекта) отвергается ещё до запуска процесса.Активные задания
implementдержат свои области записи в памяти. Новое задание, области которого пересекаются с активным, получает отказscope_conflict. Непересекающиеся области выполняются параллельно — несвязанная работа никогда не сериализуется.analyzeиreviewничего не резервируют: они никогда не блокируют и их никогда не блокируют.
Ограничение V1: обнаружение, а не изоляция
Защита области файлов обнаруживает и сообщает нарушения, но не изолирует каждого воркера в его собственном дереве. Воркер implement у Codex запускается с правами workspace-write по всему проекту, поэтому он может писать вне своих allowed_paths — AgentBridge перечислит все такие файлы в scope_violations, понизит статус с success и прямо скажет вам об этом.
Никогда ничего автоматически не откатывается. Откат файла, который уже был изменён до запуска воркера, уничтожил бы вашу (или Клода) существующую работу. Обнаружение и честный отчёт — это контракт V1; изоляция перенесённых рабочих деревьев (git-worktree) осознанно вне объёма.
Атрибуция аккуратно относится к существующему состоянию: файлы, которые уже были грязными до запуска и после него побайтово идентичны, никогда не приписываются воркеру. Сравнение использует porcelain-статус и хэширование содержимого, а зафиксированные файлы выявляются через diff при перемещении HEAD.
Безопасность
Процессы запускаются массивами аргументов и
shell: false— никогда не интерполированной строкой команды. Метасимволы оболочки в аргументах остаются литеральными.Лаунчереры Windows
.cmd/.ps1(которые Node отказывается запускать без оболочки) разрешаются в реальный входной скрипт Node и запускаются какnode <script>— так чтоshell: trueникогда не требуется.Промпты передаются в Codex через stdin; промпты Antigravity чрезмернейшей величины записываются в расширенный файл и указываются путём. Ни то, ни другое не столкнётся с лимитом длины командной строки Windows в 32 767 символов.
tests— это контекст для воркера. AgentBridge никогда его не выполняет, и ни один аргумент MCP не становится командом, которую выполняет AgentBridge.Обartt за пределы корня проекта отклоняется.
При тайм-ауте убивается полное дерево процессов:
taskkill /T /Fна Windows, а на POSIX — SIGTERM в группу процессов с повышением до SIGKILL по истечении трёхсекундного льга_range. Эскалация намеренно переживает собственный выход потом — как раз когда его возможей. процесса может работать. Это best-effort: Node не предоставляет Windows Job Object, так что если самtaskkillне запустится, можно достигнуть только прямого потомка.Буферы вывода ограничены (8 МБ на поток), и UTF-8 декодируется только после пересборки, чтобы многобайтовые символы никогда не делились.
Журналlog содержит только метаданные заданий. Никогда токены, никогда окружение, а промпты и вывод — только при
AGENTBRIDGE_DEBUG=1.От чего AgentBridge вас не защищает: воркер — это настоящий coding agent, работающий с вашими правами. В режиме
implementон может выполнять команды репозитория через свой инструментарий. Настройтеallowed_pathsс этим психикой.
Верификация
AgentBridge сам после выхода воркера, уже вне песочницы, запускает собственные проверки проекта и возвращает их реальный вывод в verification:
"verification": [
{ "command": "npm run typecheck", "ok": true, "exit_code": 0, "timed_out": false, "duration_ms": 4120, "output_tail": "..." },
{ "command": "npm run test", "ok": false, "exit_code": 1, "timed_out": false, "duration_ms": 8830, "output_tail": "..." }
]verify_commands— выполнить именно эти, в любом режиме.Если режим
implement, параметр опускается: AgentBridge читаетpackage.jsonи выполняет скриптыtypecheckиtest, если запускает тему. Он никогда сам по своей инициативе не запускаетbuild,devилиstart; просите их явно.skip_verification: true— ничего не выполнять и полагаться на словесное подтверждение воркера.
Команды выполняются без оболочки, поэтому |, &&, ;, > и обратные кавычки вне кавычек отвергаются, а не исполняются частично. Провал проверки ставит error: "verification_failed" и пониает success до partial — так что воркер, утверждающий, что тесты зелёные, не может переусмотреть сами тесты.
tests_or_checks_run и test_results описывают то, что AgentBridge реально запускал, когда верификация происходила; они только при её отсутствии и возвращаются к самостоятельным утверждениям воркера.
Поскольку команды исходят из репозитория, запись с неправильным запускателем не может заставить AgentBridge его выполнить: репозиторий, где тестовый скрипт — node --import tsx --test, проверяется этими командами, независимо от содержания записки.
Переменные окружения
Variable | Purpose |
| каталог проекта; независим от хоста, предпочтителен |
| устаревшее имя; по-прежнему работает, задаёт Claude Code |
| писать хорошо обезличенные промпты и вывод |
| расположение журнала (по умолчанию |
| явный путь к CLI Codex |
| явный путь к CLI |
| зафиксировать политику изоляции Codex: |
| бекенд песочницы Windows (по умолчанию |
AGENTBRIDGE_CODEX_SANDBOX=auto использует read-only для analyze/review и workspace-write для implement — с одним исключением: на Windows изолированный воркер Codex не может захватить вывод вобособ ( spawn EPERM при передачах piped stdio), а именно это делают скрипты npm, тестовые раннеры и бандлеры — поэтому он может читать и редактировать, но не может запустить тестовый раннер, проверщик типов или сборку. Это ограничение Codex без предоступительной настройки, поэтому jobs на implement считаются с danger-full-access uponce однократный зپسد подтверждает проблему, и сообщают об этом в warnings. analyze и review сохраняют принудительную границу read-only. В зависимости от операционной Windows, если попытка fails with this broken helper (helper_unknown_error: apply deny-read ACLs), AgentBridge повторит такую job один раз с danger-full-access, запомнит вердic для всей сессии и приложит предупреждение к каждому затронутому результату, что граница не соблюдалась. Ничто другое не вызывает это исключение, а перезапуск AgentBridge снова пробует настоящую песочницу — поэтому исправленный релиз Codex автоматически его возвращает. macOS и Linux не проверяют, не повторяют и не идут на исключение.
Логи — это одна строка JSON на задачу: временная метка, id задания, провайдер, модель, effort, режим, проект, длительность, тречный выход, категория ошибки.
Troubleshooting
executable_not_found — утилита CLI не находится в PATH, передаваемой Claude Code своим дочерним процессам. Подтвердите это в той же оболочке: ум codex --version / agy --version или установите AGENTBRIDGE_CODEX_BIN / AGENTBRIDGE_AGY_BIN.
authentication_required — сессия CLI истекла. Исправьте в терминале: для Codex — codex login, для agy — войдите снова. У AgentBridge нет способа сознательно передать это: он не касается учётных данных.
requested_model_unavailable — список моделей изменился, либо в установленном CLI
такой модели никогда не было. Запустите bridge_status (или agy models), чтобы увидеть,
что реально доступно; поле details в ошибке уже содержит эту информацию. AgentBridge
намеренно завершается с ошибкой, а не молча запускает другую модель. Если провайдер
переименовал идентификатор модели, добавьте новый идентификатор в список кандидатов
для этой метки в src/models/antigravity.ts (или в CODEX_MODELS в src/models/codex.ts),
затем пересоберите.
output_parse_failed — CLI изменил формат машиночитаемого вывода.
Проверьте details.stdout_head в результате, затем сравните с
parseCodexEvents / parseAgyOutput.
После обновления CLI — повторно запустите тесты, затем живую проверку:
SMOKE_LIVE=1 node scripts/smoke.mjsОна запускает реальную MCP-сессию и выполняет самую дешёвую конфигурацию каждого
воркера. Без SMOKE_LIVE=1 выполняется только рукопожатие и
bridge_status, ничего не расходуя.
files_changed всегда пуст — каталог проекта не находится внутри git-рабочего
дерева. Предупреждение в результате сообщает об этом. Для проверки изменений
требуется git.
В /mcp ничего не отображается — проверьте, что зарегистрированный путь указывает
на dist/index.js (собранный, а не src/), и перезапустите Claude Code после
пересборки.
Структура
src/
index.ts stdio entry point
server.ts MCP server, tool schemas, dispatch
config.ts project-dir resolution, timeout clamping
logging.ts JSONL job log (stderr only, never stdout)
parse.ts worker-envelope parsing, summary capping
types.ts
cli/
resolve.ts PATH lookup + Windows shim unwrapping
detect.ts version probes, agy model listing, auth heuristics
codex-catalogue.ts zero-inference Codex model availability + effort capability
codex-sandbox.ts sandbox policy decision and helper-failure detection
models/
codex.ts effort map, argv construction
antigravity.ts logical→real model resolution, argv construction
process/
runner.ts shell-free spawn, bounded output, tree kill
prompts/
worker-prompt.ts structured request → worker prompt
scope/
paths.ts normalisation, traversal rejection, overlap
locks.ts in-memory write-scope registry
git-state.ts snapshot/diff file attribution
tools/
codex.ts antigravity.ts status.ts common.ts
tests/ 252 tests, mocked processes, no quota used
scripts/smoke.mjs real MCP end-to-end checkMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA local MCP server that lets Claude delegate scoped work to Codex with structured results and guardrails, supporting planning, code review, build, reverse engineering, and long-running background tasks.11MIT
- AlicenseAqualityAmaintenanceAn MCP server that bridges Claude Code with Antigravity CLI using a Swarm Agent architecture to optimize local development workflows and minimize LLM token costs. Includes a web UI for monitoring agent workflows.2117MIT
- FlicenseNot gradedqualityAmaintenanceA local MCP server that connects AI coding agents like Claude, Codex, and Gemini, enabling task routing, cross-model debates, and token-efficient context sharing without external APIs.11
- AlicenseNot gradedqualityAmaintenanceAn MCP server that bridges CLI coding agents like Claude Code, Codex, opencode, and Antigravity into any MCP client, enabling synchronous and asynchronous task execution, follow-up input, and a structured code review tool.3,147MIT
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/is-bo/agentbridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server