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 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 Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Search, inspect and invoke every public tool on Invokera through one MCP connection.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.14163MIT
- AlicenseNot gradedqualityBmaintenanceA lightweight MCP gateway that aggregates multiple MCP services into a unified stdio interface, automatically prefixing tool names with the service name to avoid conflicts.18MIT
- AlicenseNot gradedqualityBmaintenanceServes 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.11MIT
- AlicenseNot gradedqualityBmaintenanceA deterministic MCP tool-list relay that lets operators filter tools by include/exclude rules and exposes a filtered stdio MCP server to local clients.18MIT
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/Jardelvorpagel/mcp-facade'
If you have feedback or need assistance with the MCP directory API, please join our Discord server