MCP-Bifrost
MCP-Bifrost
Перепишите 200 методов дешёвой моделью, не пропуская ни одной строки результата через контекст дорогой — и не записывая на диск ничего, что не компилируется.
MCP-сервер, который берёт работу с кодом, уже проанализированную и разбитую на части моделью-оркестратором, извлекает точный целевой блок парсером самого языка, поручает переписывание более дешёвой рабочей модели, проверяет результат, применяет его атомарно и фиксирует всё это вне контекста оркестратора.
Голова решает. Мыщцы печатают. Bifrost — это нерв между ними — и та часть, которая гарантирует, что на диск ничего не попадёт сломанным.
В примерах ниже голова — это Claude, а мышцы — DeepSeek, просто потому, что эта модель оказалась под рукой. Ни та, ни другая не обязательна. См. Рабочая модель — там объясняется, почему 7B-модель на вашей собственной машине может быть более интересным выбором.
Зачем
У большой кодовой базы, которую правит LLM, есть одно настоящее узкое место, и это не интеллект: это контекст. Чтение файла из 4 600 строк, чтобы изменить тридцать из них, сжигает окно оркестратора на тексте, который ему больше никогда не понадобится.
Исходная посылка Bifrost в том, что механическая половина кодинга — написание замещающего текста — не требует дорогой модели, и вообще не должна проходить через её контекст.
Оркестратор делает всё сам | Через Bifrost | |
202 метода × ~800 ток | ~161 000 ток — превышает окно контекста | ~15 000 ток |
Честная версия (см. RF-4): для одной маленькой правки экономия реальна, но скромна, потому что оркестратору в любом случае обычно приходилось читать код, чтобы решить, что он хочет. Выигрыш на порядок — в объёме: это преобразования по множеству символов, где инструкцию можно написать, ничего не читая.
Именно для этого сценария это и построено. А не для «исправь эту ошибку».
Related MCP server: ropey
Когда это не стоит использовать
Исследовательские задачи. «Найди, почему это падает» — это не инструкция, которую Bifrost может выполнить. Она должна знать символы до того, как начнёт.
Одиночные мелкие правки. Арифметика токенов тут маргинальна, и мы это признаём (RF-4). Используйте штатный инструмент правки вашего агента.
Циклы, чувствительные к задержке. Около 2,6 с на блок, измерено на DeepSeek.
Всё, что не является PHP или Python. Добавление языка означает написание адаптера парсера, а не переработку ядра, — но сегодня этого нет.
Межфайловые рефакторинги, где форма одной правки зависит от результата другой.
patch_groupдаёт атомарность, но не упорядочивание.Кодовые базы, в которых нельзя узнать, что что-то сломалось. Каждый гейт здесь проверяет форму; ни один не понимает смысла.
Как это соотносится с Aider, Serena и fast-apply-моделями — включая то, где они лучше, — описано в docs/comparison.md.
Как это работает
you ──▶ Claude Code ──▶ MCP-Bifrost ──▶ worker model
analyses, parses, writes one
splits work validates, isolated block
applies, logs
│
├──▶ source file (atomic splice)
└──▶ .bifrost/history.dbОркестратор решает, что и как. Рабочая модель не решает ничего. Сервер — единственный компонент, которому разрешено касаться диска, и он отказывает, пока не пройдут все гейты.
Гейты проверки
Гейт | Проверяет | По умолчанию |
0 — домены | блок на диске побайтно совпадает с тем, что мы отправили рабочей модели | вкл |
1 — синтаксис | пересобранный файл проходит | вкл |
2 — один символ | возвращённый блок определяю ровно один символ | вкл |
3 — содержание | не исчез ни один вызов, переменная или управляющее ключевое слово | выкл |
По умолчанию включены три, а не четыре. Гейт содержания — это грубая regex-проверка, которая ни разу не сработала за время калибровки, а гейт, отклоняющий хорошие патчи, хуже гейта, ждущего готовности к включению. Включите его с помощью substance_gate=True перед массовой работой.
«Проверка периметра», сравнивающая байты за пределами целевого диапазона, была спроектирована, реализовама, а затем удалена: сервер пересобирает файл как original[:start] + block + original[end:], поэтому периметр сохраняется по построению, и эта проверка никогда не может отказать. Калибровка это подтвердила — гейт сообщал 9/9, в то время как три файла остались синтаксически сломанными. См. RF-1.
Откат
Git уже является контентно-адресуемой базой данных, поэтому он используется в этом качестве. git hash-object -w перед каждым патчем даёт SHA блоба, который попадает в журнал; откат — через git cat-file blob. Дедупликация за бесплатно, работает с грязным рабочим деревом, и не нужно поддерживать никакой специфический формат снимков.
Рабочая модель
DeepSeek — это то, что было под рукой, и все измерения этой дипозитории сделаны через него. Он не обязателен и, вероятно, не самый интересного способа его запуска.
Работа рабочей модели намеренно узка. Она получает один изолированный блок и одну инструкцию и возвращает один блок. Она не выбирают файлы, не планируют изменения, не решают, что редактировать, и не видят ничего больше в кодовой базе. Это новая задача, с которой может справиться даже 7B-кодинговая модель, — и гейты существуют именно для того, чтобы ошибки слабого исполнителя были пойманы до попадания на диск, а не после.
Отсюда: локальный случай становится более привлекательным:
Ваш код никогда не покидает машину. Для проприетарной кодовой базы это не предпочтение, а обязательное условие.
Затраты уходят в ноль именно на той нагрузке, для которой это создано, где сотни блоков за один прогон — норма, а не перебор.
Требование к контексту минимально. Один метод, а не файл. Окна в 8K достаточно; весь замысел в том, что рабочая модель никогда не видит больше того, что ей нужно.
Слабая модель допустима, если каждый результат прежде чем что-либо значить, разобран, проверен по синтаксису и сравнён. Плохой блок стоит повтора, а не испорченного файла.
Последнее — это настоящий аргумент. Поручать генерацию кода маленькой локальной модели обычно плохая идея, потому что выходу доверять нельзя, а проверка вручную обходится дороже, чем его написать. Ответ Bifrost: проверка механическая, и машина может её выполнить.
Подходит любая OpenAI-совместимая точка назначения — Ollama, сервер llama.cpp, LM Studio, vLLM:
"env": {
"BIFROST_WORKER_BASE_URL": "http://localhost:11434/v1",
"BIFROST_WORKER_MODEL": "qwen2.5-coder:7b"
}Ключ не нужен, когда кондиционная точка не выхода по умолчанию.
Совместимость с исполняемой моделью
Ни одна локальная модель ещё не измерена. Конечная точка настраивается, а протокол — это обычный OpenAI-совместимый чат-оtвеcompletion, но этот репозиторий не публикует утверждений, которых не замерил, — включая утверждения в свою пользу.
Инструмент существует. Укажите его на вашу конечную точку:
BIFROST_TARGET=/path/to/your/codebase \
BIFROST_WORKER_BASE_URL=http://localhost:11434/v1 \
BIFROST_WORKER_MODEL=your-model \
python3 calibratge/calibra.py --cases 9Модель | Вале идный JSON | Идентичен байт-видивно (тество на тождество) | Без прыгающих строк | Без ограждений | Задержка |
DeepSeek ( | 9/9 | 3/3 | 3/3 | 9/9 | 2,6 c |
ваша модель здесь |
Если вы запустите — откройте PR со строкой. Числа, которые выставляют модель в плохой свет, так же полезны, как числа, которые её выглядят — таблица тут для того, чтобы сказать, какие исполнители с этим действительно работают, а не для рекламы.
Одно стоит ожидать. В ответе DeepSeek ни одна строка из девяти не была обернута в ограждения. Меньшие модели обрамляют почти всё, и это проблема разбора, а не способностей. Bifrost такие ограждения уже снимает; если ваша модель в остальном исправна, но всё равно спотыкается на них, сообщайте это как об баге, а не как о вине модели.
Что покидает устройство
Единица работы, отправляемая рабочей модели, — это один разобранный блок — один метод, — и никогда не об исходный файл. Это следствие конструкции, а не добавленная в нему функция: если замещающий код не проходит через контекст оркестратора, он не проходит больше ни через какую среду.
Что это не значит. Блок все-таки покидает, в открытом виде, в направлении той конечной точки, которую вы настроили. Также и инструкция — она сама может описывать внутреннюю архитектуру.
Что уже защищает. Heimdall работает до отправки, а не до записи. Там, где секрет — это самостоятельный токен, он заменяется на placeholder, рабочая модель преобразует код вокруг него, а оригинал возвращается обратно до записи файла — каждый placeholder должен возвратиться ровно один раз, иначе не записывается вообще ничего. Что нельзя безопасно исчерпать — полностью блокирует отправку. Измеренная доля ложных срабатываний на реальной кодовой базе: 2 находки на 1 291 символ, обе — корректный отказ кода, который манипулирует ключами, а не просто содержит один.
Если у вас ограничение в том, что наружу не может выйти ничего, — ответ это локальная рабочая модель, а не уменьшенный объём payload.
Спроектировано, но не готово
Два дополнения закрыли бы почти весь оставшийся разрыв. Ни одного из них пока не существует; я называю их здесь, а не прячу во issue, потому что интереснее как раз конструкция:
Журнал исходящего. Журнал фиксирует размер отправленного, а не сами байты. Записать его рядом с тем, что вернулось, почти ничего не стоит, и это превращает «верь нам» в «бери и проверь».
Редактирование комментариев и литералов. Heimdall (демаскирует) только то, что похоже на секреты. Parser уже строить абстрактное синтаксическое дерево, поэтому комментарии и строки-литералы — которые часто являются наиболее ценными рисками и часто не связаны с трансформацией — можно было бы заменить на непрозрачные маркеры и восстанавливать их при возврате.
Очевидное возражение против второго: качество может пострадать, если рабочая модель не видит имён. Это измеримый вопрос, а не аргумент: девять случаев с редактированием, девять без неё, calibratge/calibra.py. Какой бы ни был результат — он будет опубликован.
Быстрый старт
Python 3.11+. Нет зависимостей в момент применения — сервер работает на стандартной библиотеке, каждый язык разбирается с помощью собственного автоматизированного инструментария (php — внешним бинарником, ast — из stdlib).
pipx install mcp-bifrost # or: uv tool install mcp-bifrostДобавьте его в .mcp.json в проект, который вы сопира патчить:
{
"mcpServers": {
"bifrost": {
"command": "mcp-bifrost",
"env": { "BIFROST_DB": ".bifrost/history.db" }
}
}
}Или из исходного кода, без установки:
git clone https://github.com/FixemBCN/MCP-Bifrost.git
cd MCP-Bifrost
python3 -m unittest discover tests # 128 tests, ~15s
python3 -m mcp_bifrost.server # same server, PYTHONPATH=.Ключ в это файл не идёт. Положите его в .bifrost.env в корню вашего проекта — сервер читает его, когда переменной окружения нет:
echo "DEEPSEEK_API_KEY=sk-..." > .bifrost.env
chmod 600 .bifrost.env
echo ".bifrost.env" >> .gitignoreИли вообще откажитесь от ключа и направьте BIFROST_WORKER_BASE_URL на локальную модель. Полные подготовки и то, что нужно сделать before направлять это на что-то важное, описано в руководстве.
Ниструменты
Инструмент | Что делает |
| одна инструкция для множества виртуальных символов — главный инструмент |
| переписать один символ или явно заданный диапазон строк |
| добавить метод или ветвь в switch-роутер |
| создать новый файл, опционально по аналогии с существующим |
| несколько операций одной транзакцией |
| сформировать changelog из журнала; пакетно — в ветку для ревью |
| отменить один патч или весь пакет |
Калибровка
Прежде чем написать хоть одну строку сервера, нужно было ответить на вопрос:
Дан реальный метод из реальной кодовой базы, упакованный в компактную схему — вернёт ли воркер код, который можно применить, ничего не сломав?
Ответ даёт стенд в calibratge/. Никаких зависимостей — стандартная библиотека Python
плюс бинарник php.
export BIFROST_TARGET=/path/to/your/codebase
python3 calibratge/calibra.py --dry-run # show cases, no API calls
export DEEPSEEK_API_KEY=...
python3 calibratge/calibra.py --cases 9Результат: исходное предположение подтверждается. 9/9 валидных JSON, 3/3 побайтово совпали на задаче тождественности, 3/3 без потери исходных строк, 0/9 обёрнуто в markdown-ограничители, средняя задержка 2,6 с.
Он также поймал баг со смещением байтов, который к воркеру не имел никакого отношения и в продакшене молча повреждал бы файлы. Полный отчёт: docs/calibration.md.
Структура репозитория
Путь | Что находится |
| сервер |
руководство, архитектура, критический разбор, калибровка, сравнение, лицензирование | |
| 128 тестов |
рабочий журнал — как принималось каждое решение, включая отменённые | |
| измерительный стенд |
За кулисами
Если говорить начистоту: ни одна строка в этой кодовой базе не была написана вручную. Она была задумана, подвергнута сомнению, реализована, протестирована и документирована в процессе с участием ИИ, которым руководил человек. Вот что это означало на деле, настолько точно, насколько можно выразить.
Человек — задача, решения, направление. Я дал исходную спецификацию и принимал все продуктовые решения: какая воркер-модель, какие языки, что вырезать, что делать следующим, лицензию, название и когда остановиться. Несколько решений я пересмотрел — например, лицензия начиналась как source-available с запретом перепродажи, а закончилась Apache-2.0, когда я понял, что распространение важнее контроля. Я также определял, что система обязана отказываться делать, — и это оказалось более значимой половиной решений.
Claude Opus — состязательное проектирование. До реализации Claude посмотрел на спецификацию со стороны и выявил двенадцать замечаний. Два из них похороняли элементы дизайна, которые я утвердил: центральная «проверка периметра», на которую опиралась спецификация, оказалась неспособной провалиться; и заявленное обоснование проекта — экономия токенов — показало себя ничтожной для одиночных правок и решающей только на массовом объёме. Оба замечания сохранены без изменений в brainstorm/.
Измерения до кода. Вместо того чтобы довериться дизайну, сначала построили калибровочный стенд и запустили его на реальном воркере с настоящим кодом. Он не прошёл 6 кейсов из 9 — и ни в одном не был виноват воркер. Причина — баг со смещением байтов, который молча портил бы любой файл с буквой с диакритикой. Он также опроверг два из выводов самого Claude. Эти поправки стоят поверх исходных утверждений, а не заменяют их.
Claude Opus — ядро; другие модели — периферия. Клод написал разбор, применение патчей, шлюзы валидации, работу с секретами и движок напрямую. Два периферийных модуля и весь набор тестов были переданы моделям поменьше (Haiku и Sonnet), которые работали как субагенты. Разделение было сознательным, а не экономическим: модель, с нуля начинающая писать код патчей, с большой долей вероятности вернула бы баг со смещению байтов, потому что способ, который напрашивается сам первым, — неправильный.
Делегированные модели нашли четыре реальные ошибки в коде, написанном Claude, в том числе ту, что отвязала docblock документуемого метода, и ту, где вложенные switch-инструкции молча теряли ветви. Обе проходили все шлюзы валидации. Только состязательная проверка моделью, которой больше ничего на этом коде не светит, сумела их поймать.
Человек — проверка и приёмка. Я управлял последовательностью, смотрел результаты, оспаривал заявки и решал, что остаётся. Claude выполнял прогоны валидации и калибровки; я читал то, что возвращалось, и решал, что это значит.
Чего этот процесс не дал
Ни один человек не прочитал all ~7 400 строк этого репозитория — примерно 4 100 строк сервера, 2 700 тестов и 600 строк измерительного стенда — построчно. Целевая имاعد здесь — из тестов, проверенных против умышленно сломанного кода, из измерений на настоящей кодовой базе и из дизайна, который пишет только то, что сам может проверить, — никакой ручной аудит.
Если для инструмента, который редактирует ваши исходные файлы, вы хотите другой уверенности — это разумно, и в разделе «Ответственность» подробно рассказано, что шлюзы ловят, а что пропукают.
Почему это в README
Bifrost демонстрирует свой же тезис. Дедковый вклад человека был не в наборе кода, а в том, что он формулировал задачу, контролировал контекст, оспаривал выводы и требовал достаточно валидации, чтобы сгенерированному коду вообще можно было доверять.
Репозиторий специально хранит рассуждения, отклонённые идеи, состязательный разбор и измерения, включая те места, где ИИ был неправильно сказал об этом.
Документация
Документ | Назначение |
что это, что может, как установить и за что вы ответственны | |
что строится и почему | |
взгляд свежим глазом в разысквах причин, почему это не сработает, — двенадцать замечаний, два из них потом опровергнуты измерениями | |
что воркер на самом деле делал, когда его просили | |
как это рядом с Aider, Serena и fast-apply и в чём выигрывают они | |
что мы потребляем, что мы предоставляем |
В brainstorm/ лежит рабочий журнал: исходная спецификация, дневник разработки через пять ревизий, состязательный обзор и резубcalт каты калибровки. docs/ — справочник, и при расхождении главенствует он.
Ответственность
Этот инструмент автоматически редактирует ваши исходные файлы с помощью языковой модельни. Лицензия Apache 2.0 означает, что он предоставляется как есть, без каких-либо гарантий: вы отвечаете за то, что он сделает с вашим кодом. Читайте диффы, запускайте тесты и выкатывайте осознанно. В руководстве точно сказано, какие шлюзы помогают, а какие нет.
Вклад
Любой вклад приветствуется — в том числе и критика, что внутри что-то неправильно. Проект уже удалил один шлюз валидации как тавтологию и опроверг измерениями два собственных утверждения.
Единственная конвенция, и она ключевая: каждый тест должен быть способен провалиться. Подробности — в руководстве.
Лицензия
Построено на Model Context Protocol, распространяющегося под лицензией MIT, Anthropic, PBC. MCP-Bifrost — независимый проект, не афиллирован с Anthropic, PBC, их одобрён и не спонсируется им.
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityAmaintenanceEnables Codex to delegate bulk code reading, patching, and testing to an async worker using cheaper AI models, while receiving compact results.1132MIT
- AlicenseAqualityBmaintenanceEnables coding agents to perform safe, project-wide Python refactoring (rename, move, extract, inline, change signature, organize imports, etc.) with a dry-run safety contract and LSP-coordinate addressing.15MIT
- AlicenseNot gradedqualityBmaintenanceEnables Codex to offload expensive code reading, editing, and checking to a worker agent via Claude Code, supporting async jobs and long-running tasks.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI to delegate boilerplate, drafts, tests, and refactors to free LLM providers, saving tokens and running tasks in parallel.204MIT
Related MCP Connectors
Reliable async execution for agent tool calls: schema gating, retries, idempotency, audit trail.
Agentic code review, no signup to try: reality gates + frontier-model review, with veto.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
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/FixemBCN/MCP-Bifrost'
If you have feedback or need assistance with the MCP directory API, please join our Discord server