/ Directorio / Playground / Unla
● Comunidad AmoyLab ⚡ Instantáneo

Unla

por AmoyLab · AmoyLab/Unla

Convierte cualquier API REST en un servidor MCP desde YAML — sin cambios de código, recarga en caliente, multi-tenant, SSE + HTTP Streamable.

Unla (AmoyLab) es una puerta de enlace Go ligera que convierte APIs REST y servicios MCP existentes en endpoints MCP mediante configuración YAML. Interfaz web para gestión, multi-tenant, pre-autenticación OAuth, despliegue Docker-first.

Por qué usarlo

Características clave

Demo en vivo

Cómo se ve en la práctica

unla.replay ▶ listo
0/0

Instalar

Elige tu cliente

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "unla": {
      "command": "npx",
      "args": [
        "-y",
        "Unla"
      ],
      "_inferred": true
    }
  }
}

Abre Claude Desktop → Settings → Developer → Edit Config. Reinicia después de guardar.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "unla": {
      "command": "npx",
      "args": [
        "-y",
        "Unla"
      ],
      "_inferred": true
    }
  }
}

Cursor usa el mismo esquema mcpServers que Claude Desktop. La configuración del proyecto prevalece sobre la global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "unla": {
      "command": "npx",
      "args": [
        "-y",
        "Unla"
      ],
      "_inferred": true
    }
  }
}

Haz clic en el icono MCP Servers de la barra lateral de Cline y luego en "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "unla": {
      "command": "npx",
      "args": [
        "-y",
        "Unla"
      ],
      "_inferred": true
    }
  }
}

Mismo formato que Claude Desktop. Reinicia Windsurf para aplicar.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "unla",
      "command": "npx",
      "args": [
        "-y",
        "Unla"
      ]
    }
  ]
}

Continue usa un array de objetos de servidor en lugar de un mapa.

~/.config/zed/settings.json
{
  "context_servers": {
    "unla": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "Unla"
        ]
      }
    }
  }
}

Añádelo a context_servers. Zed recarga en caliente al guardar.

claude mcp add unla -- npx -y Unla

Un solo comando. Verifica con claude mcp list. Quita con claude mcp remove.

Casos de uso

Usos del mundo real: Unla

Cómo exponer tu API REST interna como MCP sin escribir un servidor

👤 Ingenieros de plataforma, equipos de herramientas internas ⏱ ~30 min intermediate

Cuándo usarlo: Tienes una API REST de la empresa y quieres que Claude/Cursor la use sin construir un MCP personalizado.

Requisitos previos
  • Docker — docker.com/get-started
  • Especificación OpenAPI/Swagger de la API (útil pero opcional) — La mayoría de las APIs internas ya tienen una
Flujo
  1. Desplegar Unla
    docker run -d --name unla -p 8080:80 -p 5234:5234 -p 5235:5235 ghcr.io/amoylab/unla/allinone:latest✓ Copiado
    → Interfaz web en :8080
  2. Agregar una definición de servidor YAML
    En la interfaz, crea un servidor 'internal-api' con endpoints /users (GET) y /orders (GET, POST), mapeados a https://api.internal/v1.✓ Copiado
    → Aparecen las herramientas: get_users, get_orders, create_order
  3. Apunta tu cliente a él
    Agrega https://gateway.internal/mcp/internal-api a Claude Desktop.✓ Copiado
    → Nuevas herramientas aparecen en el cliente

Resultado: Tu API interna utilizable desde cualquier cliente MCP en menos de una hora.

Errores comunes
  • Las fugas de autenticación si mapeas headers sensibles sin restricciones — Usa la pre-autenticación OAuth de Unla para controlar por usuario; nunca codifiques tokens de admin en YAML
  • Los endpoints de escritura exponen llamadas destructivas — Marca los endpoints POST/DELETE como 'confirm' para que requieran aprobación explícita del usuario
Combinar con: mcphub

Cómo dar a cada cliente su propio namespace MCP

👤 Equipos SaaS que ofrecen acceso MCP a clientes ⏱ ~45 min advanced

Cuándo usarlo: Ejecutas una plataforma y quieres aislamiento de herramientas por tenant.

Flujo
  1. Crear tenants en Unla
    En admin, crea tenants 'acme' y 'globex', cada uno con su propio mapeo de clave API.✓ Copiado
    → Dos namespaces aislados
  2. Enrutar por tenant
    Los usuarios de Acme acceden a /mcp/acme, globex a /mcp/globex.✓ Copiado
    → Las herramientas muestran datos con scope de tenant

Resultado: MCP multi-tenant sin ejecutar múltiples puertas de enlace.

Errores comunes
  • Fuga entre tenants a través de plantillas YAML compartidas — Usa variables con scope de tenant, nunca referencias $ENV que se resuelvan entre tenants

Cómo poner tus MCPs existentes detrás de una única URL autenticada

👤 Equipos con despliegues MCP dispersos ⏱ ~20 min intermediate

Cuándo usarlo: Múltiples MCPs stdio en diferentes lugares y quieres una única URL pública con OAuth.

Flujo
  1. Registra cada MCP downstream
    En Unla, agrega github-mcp (stdio) y postgres-mcp (HTTP) como servidores proxificados.✓ Copiado
    → Ambos aparecen como sanos
  2. Habilitar OAuth
    Activa GitHub OAuth para la puerta de enlace.✓ Copiado
    → El flujo de inicio de sesión funciona de extremo a extremo

Resultado: Un endpoint, un inicio de sesión, todos tus MCPs.

Combinaciones

Combínalo con otros MCPs para multiplicar por 10

unla + mcphub

Usa Unla para conversión REST-to-MCP y MCPHub para enrutamiento/agrupación

Registra las herramientas expuestas por Unla en MCPHub bajo el grupo 'internal'.✓ Copiado
unla + proxy

Usa mcp-proxy como puente stdio de última milla y Unla como puerta de enlace pública

Conecta mi MCP stdio local a HTTP con mcp-proxy, luego regístralo en Unla.✓ Copiado

Herramientas

Lo que expone este MCP

HerramientaEntradasCuándo llamarCoste
(gateway) yaml-defined REST tools Según se declara en YAML Lo que haga el endpoint REST expuesto 1 solicitud a la API upstream
(gateway) proxied MCP tools Paso directo Igual que downstream Igual que el MCP downstream

Coste y límites

Lo que cuesta ejecutarlo

Cuota de API
Ninguna en la capa de puerta de enlace; se aplican las cuotas de API upstream
Tokens por llamada
Sobrecarga mínima de puerta de enlace
Monetario
Gratis (Apache 2.0)
Consejo
Cachea endpoints GET en la puerta de enlace para evitar facturación duplicada upstream.

Seguridad

Permisos, secretos, alcance

Ámbitos mínimos: Configuración de emisor OAuth + claves API con scope de tenant
Almacenamiento de credenciales: Configuración de puerta de enlace en disco (encriptada a través de tu gestor de secretos); tokens de tenant a través de DB
Salida de datos: La puerta de enlace reenvía a cualquiera que sea las URLs upstream que configures
No conceder nunca: No expongas la interfaz de admin públicamente sin autenticación No codifiques tokens de producción en YAML en git

Resolución de problemas

Errores comunes y soluciones

401 upstream en cada llamada

La puerta de enlace no reenvía el header de autenticación. Agrega una regla de mapeo de Autorización en YAML.

Verificar: curl gateway with -v; check upstream headers
Hot reload no detectó mi cambio de YAML

Primero valida YAML en la pestaña Lint de la interfaz; hot reload rechaza configuraciones inválidas silenciosamente.

Desajuste de OAuth redirect_uri

Registra la URL exacta de la puerta de enlace en tu proveedor OAuth.

SSE se desconecta después de 60s

Timeout de inactividad del balanceador de carga. Aumenta a 3600s o usa HTTP Streamable.

Alternativas

Unla vs otros

AlternativaCuándo usarlaContrapartida
MCPHubQuieres un hub TypeScript con enrutamiento de vector inteligenteMenos enfoque en conversión REST-to-MCP
ToolHiveQuieres aislamiento por MCP en contenedoresNo es un convertidor REST-to-MCP

Más

Recursos

📖 Lee el README oficial en GitHub

🐙 Ver issues abiertas

🔍 Ver todos los 400+ servidores MCP y Skills