Funcionalidades
Todo lo que hace MCP REST Bridge, agrupado por lo que intentas lograr. Cada grupo enlaza a la guía que lo cubre en profundidad.
Conectar cualquier cosa
Consulta Registrar backends →.
- OpenAPI / Swagger → auto-descubrimiento MCP. Apunta a una URL de spec; cada operación se convierte en una herramienta MCP. Filtra con
include_tags/exclude_operations. - GraphQL → auto-descubrimiento MCP. Apunta a un endpoint GraphQL; el bridge introspecciona el schema y genera una herramienta por query/mutation.
- Importación cURL / Postman. Deriva herramientas de un comando
curlpegado o de una exportación de Postman Collection v2.1 cuando no hay spec. - MCP → gateway / agregador MCP. Registra servidores MCP existentes (Streamable HTTP o SSE) como upstreams y re-expón sus herramientas a través del mismo pipeline.
- Definiciones manuales de tools cuando un backend no tiene spec.
- Dos modos de servir en el plano de datos — por cliente
/mcp/:namey bundles curados/mcp-custom/:bundle(que también pueden incluir macros compuestas)./mcpen sí es el plano de control (gestión del sistema + obtención de datos), no un tercer modo de servir datos — ver Arquitectura. - Aliases y nombres visibles de tools para presentar nombres limpios y amigables al cliente.
- Tags de tools — tags libres en cada cliente registrado, navegables y filtrables por tag desde la UI de admin.
- Tools compuestas / macro que ejecutan varios pasos como una llamada, cada paso a través de la pila completa de guards. No son alcanzables por defecto — hay que añadir la composite al
composites[]de un bundle para servirla en el endpoint de ese bundle (/mcp-custom/:bundle). - Plano de control del sistema (
/mcp) — un cliente LLM se conecta aquí (no a un shard de backend) para administrar el propio gateway: listar/registrar/habilitar clientes, emitir o revocar keys MCP, leer el audit log, resetear un circuit breaker, y más. Auth fail-closed (sin el fallback "sin configurar implica abierto") más un nivel de rol por tool (read/operate/admin) y confirmación explícita para acciones sensibles. Ver Arquitectura. - Backends GraphQL y WebSocket (por tool) — envuelve los argumentos de una llamada como request GraphQL
{ query, variables }, o haz un request/response efímero sobre WebSocket, reutilizando la misma pila de guards que REST. - Targets dedicados de proxy WebSocket — registra un endpoint WS backend persistente (con límites de connections, message-size y idle-timeout), y desconecta forzosamente en masa cada conexión activa.
- Recursos y prompts upstream — un endpoint
/mcp/:namepor cliente apuntado a un servidor MCP ahora pasa a través de sus recursos y prompts, no solo de sus tools. - Anotaciones de tools MCP (2025-06-18) — cada tool anunciada lleva los hints estándar de gobernanza/presentación (
readOnlyHint,destructiveHint,idempotentHint,openWorldHinty untitlede visualización), derivados de su método HTTP y de su gating de sensibilidad/aprobación; eltitley las anotaciones propias que declara un upstream MCP se pasan a través fielmente. Son hints advisory que un cliente puede usar para presentar o pre-gatear una tool — complementan, nunca reemplazan, la aplicación en tiempo de llamada del gateway. - Enlaces de instalación de bundles — un enlace compartible y revocable de un clic que crea una API key MCP con scope de bundle y resuelve a un snippet de conexión listo para pegar, para que los usuarios finales nunca necesiten una key provisionada a mano.
Gobernar y asegurar
Consulta Seguridad →, Guardrails y resiliencia → y Control de acceso →.
Seguridad de red y contenido
- Protección SSRF + DNS-rebinding en cada URL de backend, con la IP resuelta anclada para que un cambio posterior de DNS no pueda redirigir el tráfico.
- Guardrails — reglas de denegación de inputs, detección de secretos y sanitización de prompt-injection que envuelve las responses no confiadas en un sobre seguro.
- Política por herramienta — rate limits, timeouts, overrides de circuit-breaker y restricciones de API keys permitidas, aplicadas en el dispatch antes del circuit breaker.
Acceso e identidad
- RBAC con roles
admin/operator/auditor/viewer. - Multi-tenancy por equipos — acota clientes a equipos para que cada tenant solo vea los suyos.
- Login de admin por sesión (argon2id vía
Bun.password) más un camino de key Bearer estática para CI/automatización, con protección CSRF en las mutaciones autenticadas por cookie. - OAuth2 / JWT entrante (opcional) — acepta tokens de acceso OAuth2/OIDC (RS256/ES256) verificados contra un endpoint JWKS, junto a las keys estáticas y gestionadas en DB. Sin dependencia extra (WebCrypto).
- OAuth2 client-credentials saliente — el bridge emite y auto-refresca un token desde el endpoint de token del backend y lo inyecta, para que el caller MCP nunca vea el client secret real.
Control y flujo
- Aprobación humana en el bucle — las tools de alto riesgo pueden requerir una aprobación admin fuera de banda; la llamada abre un ticket ligado a sus argumentos exactos y es de un solo uso una vez aprobada.
- Transforms declarativos de request/response — remodela los argumentos o la response JSON de una tool (set / remove / rename / copy) sin código y sin eval de expresiones que explotar.
Operar con confianza
UI de admin y config
- UI de admin (Vue 3 SPA) — dashboard, servidores, bundles, API keys, consumidores, políticas, uso, alertas, programaciones, audit log, usuarios, equipos y config.
- Dashboard de widgets personalizable — una grid de Overview estilo Grafana: añade, redimensiona y configura widgets de stat/chart/nota desde un catálogo, y exporta o importa el layout entero.
- Versionado de config + rollback, más import/export de toda la configuración.
- Programaciones de mantenimiento vía un matcher cron integrado (gated por leader, deduplicado).
Resiliencia — ver Guardrails y resiliencia →
- Monitorización de salud + auto-eliminación de backends no saludables, con un probe ping para upstreams MCP.
- Canary / failover — enruta a un secundario validado cuando el breaker del primario se abre, sin cerrar falsamente el breaker del primario.
- Caché de responses — TTL por tool + caché LRU para responses
GETidempotentes, servida tras todos los guards pero antes del circuit breaker (un hit de caché nunca gasta un probe half-open). - Balanceo de carga N-way — reparte las llamadas de un cliente entre un pool de targets upstream (round-robin / ponderado / least-connections) con un cooldown de salud por target, encima del circuit breaker primario.
Manejo de datos
- Auto-paginación — sigue paginación cursor / page /
LinkRFC-5988 y agrega las páginas en una sola response (solo mismo host, SSRF-safe). - Normalización de streaming — convierte una response NDJSON o SSE en un único resultado JSON agregado.
- Mock / virtualización — sirve una response predefinida (siempre, para desarrollo contract-first) o solo como fallback cuando el backend no está disponible.
Observar
Consulta Observabilidad y monitorización →.
- Prometheus
/metrics, incluyendomcp_tool_calls_total{outcome}. - Tracing OpenTelemetry (OTLP/HTTP) — un span por llamada de tool cuando hay un endpoint OTLP.
- Analítica de uso y detección de anomalías / picos de uso que dispara alertas vía webhooks.
- Audit log a prueba de manipulaciones — cada acción admin está encadenada por hash (
hash = SHA256(JSON.stringify([prev_hash, …])), una pre-imagen JSON inyectiva, no una unión por delimitador) y es verificable; opcionalmente streameada a un SIEM. - Explorador de tráfico + replay — captura opt-in por llamada (argumentos + un preview del resultado) que puedes inspeccionar y re-ejecutar desde la admin API.
- Monitorización sintética + schema-drift — reproduce periódicamente un ejemplo guardado a través de una tool y marca fallos, y detecta cuándo el schema de input de un upstream deriva de una baseline capturada.
Escalar (opt-in)
Consulta Escalado y alta disponibilidad →.
- Contadores de rate compartidos en SQLite para límites consistentes entre instancias.
- Reconciliación del registro cross-instancia para que registros y bajas propaguen a los peers.
- Elección de leader para que los loops en background (alertas, programaciones) corran en exactamente una instancia.
Ejecuta en cualquier sitio
Proceso único Bun + bun:sqlite — sin base de datos externa, sin Kubernetes. Consulta Despliegue → para Docker, bare-metal y reverse-proxy.
Siguiente: Primeros pasos → · Por qué MCP REST Bridge →