mcp-facade
mcp-facade
Una fachada MCP genérica: un proceso stdio se sitúa delante de un servidor MCP upstream y expone solo un subconjunto configurado de sus herramientas, con esquemas compactados, más tres meta-herramientas (discover, describe, call) que mantienen el resto del catálogo accesible bajo demanda.
Por qué
Cada herramienta que expone un servidor MCP se inyecta en el contexto del modelo como un esquema JSON en cada solicitud. Un servidor grande con 40 herramientas puede costar decenas de miles de tokens por sesión antes de que se realice ningún trabajo: la mayor parte de ese coste se debe a herramientas que nunca se llaman.
La fachada le da la vuelta a la ecuación de costes: solo pagas tokens de esquema completos por las herramientas que realmente usas (las incluidas en used), compactadas a lo esencial. Todo lo demás sigue siendo descubrible a través de las meta-herramientas, que en total cuestan tres esquemas pequeños.
Related MCP server: @zhangzwd/mcp-gateway
Qué hace
Se ejecuta como un servidor MCP stdio:
bun run facade.ts --server <name>. Un proceso por servidor upstream.Lee
facade.servers.json(junto afacade.ts) y elige la entrada<name>.Ante la primera
tools/list, obtiene el catálogo upstream y lo guarda en una memoria caché en disco (~/.omp/agent/mcp-facade/catalogs/<name>.json, TTL de 7 días). La conexión con el upstream es perezosa: no se establece ninguna conexión hasta el primer uso.Sirve cada herramienta de
usedcon un esquema compactado:cada cadena
description(a nivel de herramienta y dentro del esquema JSON) se reduce a su primera frase, con un máximo de 140 caracteres;las claves
$comment,examplesydefaultse eliminan recursivamente;la estructura (types, properties, required, enums) se mantiene intacta;
los nombres de las herramientas se pasan a minúsculas; la búsqueda no distingue mayúsculas.
Siempre añade las tres meta-herramientas (ver más abajo).
Si el catálogo no se puede obtener en el momento de
tools/list, se degrada a servir únicamente las meta-herramientas y registra el motivo en stderr.Reenvía las llamadas al upstream. Para upstreams HTTP con un
credentialId, un error 401/no autorizado/token caducado desencadena un refresco forzado del token y un único reintento.
Las meta-herramientas
Herramienta | Propósito |
| Busca el catálogo upstream completo por palabras clave (nombre + descripción, substring, máximo 10 coincidencias). Devuelve líneas |
| Devuelve el esquema y la documentación completos originales de una herramienta, por su nombre en minúsculas. Úsalo antes de llamar a una herramienta desconocida. |
| Llama a cualquier herramienta upstream por nombre con un objeto |
Flujo típico de un agente: discover "worklog" → describe addworklog → call { tool: "addworklog", args: { ... } }.
Requisitos
Bun (la fachada ejecuta TypeScript directamente).
Para upstreams HTTP protegidos con OAuth: tener la CLI de OMP
ompinstalada en~/.bun/bin/omp, con la credencial ya autorizada. La fachada obtiene los tokens medianteomp token <credentialId>(yomp token --force-refresh <credentialId>al reintentar). Los secretos nunca se almacenan en la configuración.Para los upstreams stdio que necesiten variables de entorno (claves de API, tokens): una configuración de host de Claude existente en
~/.claude.jsonque contenga el bloqueenvde ese servidor (verenvFrommás adelante).
Instalación
bun install
cp facade.servers.example.json facade.servers.json # then editfacade.servers.json está en el fichero .gitignore — puede contener rutas locales.
Configuración
facade.servers.json asocia un nombre de servidor con su upstream y la lista de herramientas usadas:
{
"<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
}
}Notas:
Las entradas de
usedse buscan sin distinguir mayúsculas y se sirven en minúsculas.envFrompor ahora solo admite el prefijoclaude:<name>.Una lista
usedvacía es válida: en ese caso la fachada expone solo las meta-herramientas.
Registro en un host
Apunta la configuración MCP de tu host a la fachada, un entrada por cada upstream:
{
"mcpServers": {
"acme": {
"command": "/path/to/bun",
"args": ["run", "/path/to/mcp-facade/facade.ts", "--server", "acme-http"]
}
}
}⚠️ stdout es el protocolo
El transporte stdio es propietario de stdout. Nunca se escriban registros, diagnósticos o salidas de depuración en stdout: cualquier dato en stdout corromve el flujo JSON-RPC y bloquea el host. La fachada solo registra en stderr (console.error); mantén este comportamiento también en cualquier variante.
Limitaciones
Rutas fijas: caché del catálogo en
~/.omp/agent/mcp-facade/catalogs/, binario de OMP en~/.bun/bin/omp, yenvFromsolo lee~/.claude.json.El catálogo se obtiene con una sola llamada
listTools: no hay paginación ni gestión detools/list_changed. Reinicia la fachada (o espera a que pase el TTL de 7 días) para incorporar los cambios de herramientas del upstream.El
discoveres una simple coincidencia de substring, limitada a 10 resultados.Se permite un reintento ante un error de autenticación; el resto de errores del upstream se propagan tal cual.
No hay soporte para prompts, recursos ni
samplingdel upstream: solo herramientas.
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