mcp-facade
mcp-facade
Универсальный MCP-фасад: один stdio-процесс стоит перед вышестоящим MCP-сервером и предоставляет наружу только настроенное подмножество его инструментов — со сжатыми схемами — плюс три метаинструмента (discover, describe, call), которые позволяют по запросу обращаться к остальной части каталога.
Зачем
Каждый инструмент, который предоставляет MCP-сервер, попадает в контекст модели в виде JSON-схемы в каждом запросе. «Тяжёлый» сервер с 40 инструментами может стоить десятки тысяч токенов за сессию ещё до начала работы — причём большей частью это токены за инструменты, которые вы никогда не вызываете.
Фасад меняет экономику: вы платите полные токены схемы только за те инструменты, которые действительно используете (перечисленные в used), сжаты до самой сути. Всё остальное остаётся доступным через метаинструменты, которые суммарно стоят три небольшие схемы.
Related MCP server: @zhangzwd/mcp-gateway
Как он работает
Запускается как stdio MCP-сервер:
bun run facade.ts --server <name>. Один процесс на каждый вышестоящий сервер.Читает
facade.servers.json(рядом сfacade.ts) и выбирает запись<name>.При первом
tools/listзагружает каталог вышестоящего сервера и кэширует его на диск (~/.omp/agent/mcp-facade/catalogs/<name>.json, TTL 7 дней). Подключение к вышестоящему серверу ленивое — до первого использования ничего не соединяется.Обслуживает каждый инструмент
usedсо сжатой схемой:каждая строка
description(на уровне инструмента и внутри JSON-схемы) обрезается до первого предложения, максимум 140 символов;ключи
$comment,examplesиdefaultрекурсивно удаляются;структура (
types,properties,required,enums) остаётся нетронутой;имена инструментов приводятся к нижней регистру; поиск по имени без учёта регистра.
Всегда добавляет три метаинструмента (см. ниже).
Если каталог не удаётся получить при
tools/list, он деградирует до отдачи только метаинструментов и записывает причину в stderr.Пересылает вызовы вышестоящему серверу. Для HTTP-вышестоящих серверов с
credentialId, ошибка 401/unauthorized/expired-token вызывает одно принудительное обновление токена и одну повторную попытку.
Метаинструменты
Инструмент | Назначение |
| Поиск в полном каталоге вышестоящего сервера по ключевым словам (имя + описание, подстрока, максимум 10 совпадений). Возвращает строки вида |
| Возвращает полную оригинальную схему и документацию одного инструмента, по имени в нижнем регистре. Используйте перед вызовом незнакомого инструмента. |
| Вызывает любой инструмент вышестоящего сервера по имени с объектом |
Типичный сценарий агента: discover "worklog" → describe addworklog → call { tool: "addworklog", args: { ... } }.
Требования
Bun (фасад запускает TypeScript напрямую).
Для HTTP-вышестоящих серверов, защищённых OAuth: CLI
ompот OMP, установленный в~/.bun/bin/omp, с уже авторизованными учётными данными. Фасад получает токены черезomp token <credentialId>(иomp token --force-refresh <credentialId>при повторной попытке). Секреты никогда не хранятся в конфигурации.Для stdio-вышестоящих серверов, которым нужны переменные окружения (ключи API, токены): существующая конфигурация хоста Claude в
~/.claude.json, содержащая блокenvэтого сервера (см.envFromниже).
Установка
bun install
cp facade.servers.example.json facade.servers.json # then editФайл facade.servers.json не отслеживается git — он может содержать локальные пути.
Конфигурация
Файл facade.servers.json сопоставляет имя сервера с его вышестоящим сервером и списком используемых инструментов:
{
"<name>": {
"upstream": {
// HTTP upstream (Streamable HTTP transport):
"url": "https://mcp.example.com/v1/mcp",
"credentialId": "mcp_oauth:profile:default:https://mcp.example.com/v1/mcp" // optional
// …or stdio upstream:
// "command": "/usr/local/bin/npx",
// "args": ["-y", "@example/mcp-server"],
// "envFrom": "claude:<server-name>", // optional: pull env from ~/.claude.json mcpServers.<server-name>.env
// "env": { "EXTRA": "value" } // optional: merged on top
},
"used": ["tool_one", "tool_two"] // exposed directly; everything else via meta-tools
}
}Примечания:
Записи
usedсопоставляются без учёта регистра и отдаются в нижнем регистре.envFromв данный момент поддерживает только префиксclaude:<name>.Пустой список
usedдопустим: в этом случае фасад предоставляет только метаинструменты.
Регистрация у хоста
Укажите в MCP-конфигурации хоста фасад, одну запись на вышестоящий сервер:
{
"mcpServers": {
"acme": {
"command": "/path/to/bun",
"args": ["run", "/path/to/mcp-facade/facade.ts", "--server", "acme-http"]
}
}
}⚠️ stdout — это протокол
Транспорт stdio владеет stdout. Никогда не выводите логи, диагностику или отладочные сообщения в stdout — всё, что попадает в stdout, портит поток JSON-RPC и подвешивает хост. Фасад пишет логи только в stderr (console.error); сохраняйте это поведение в любом форке.
Ограничения
Жёстко заданные пути: каталог кэша в
~/.omp/agent/mcp-facade/catalogs/, бинарник OMP в~/.bun/bin/omp,envFromчитает только~/.claude.json.Каталог загружается одним вызовом
listTools— без пагинации, без обработкиtools/list_changed. Чтобы получить изменения инструментов вышестоящего сервера, перезапустите фасад (или дождитесь окончания 7-дневного TTL).discover— простое сопоставление подстроки, ограничено 10 результатами.Одна повторная попытка при сбое аутентификации; остальные ошибки вышестоящего сервера передаются как есть.
Не поддерживаются промпты, ресурсы и семплинг вышестоящего сервера — только инструменты.
This server cannot be deployed
Maintenance
Related MCP Connectors
Toolstile is a managed MCP gateway that connects remote MCP servers behind one endpoint, with per-agent permissions, shared accounts and activity logs. Connect at https://mcp.toolstile.com/mcp over Streamable HTTP with OAuth; sign in at https://toolstile.com, select a workspace and connect your upstream servers. Available tools, resources and prompts depend on that workspace and the agent's granted access.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Stateless MCP gateway and OTel span-streaming bridge for hosted MCP servers.
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Related MCP Servers
- AlicenseAqualityBmaintenanceA stdio MCP proxy that connects to one or more upstream MCP servers and exposes their tools, resources, and prompts through a single endpoint with a configurable middleware pipeline.141,265 npm3MIT
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP gateway that aggregates multiple MCP services into a unified stdio interface, automatically prefixing tool names with the service name to avoid conflicts.8 npmMIT
- AlicenseNot gradedqualityDmaintenanceServes any OpenAPI 3.x/Swagger 2.x API as a local MCP server over stdio, converting every operation into a tool that proxies requests to the upstream API with configurable headers and fixed parameters.5 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA deterministic MCP tool-list relay that lets operators filter tools by include/exclude rules and exposes a filtered stdio MCP server to local clients.11 npmMIT