/ Verzeichnis / Playground / Unla
● Community AmoyLab ⚡ Sofort

Unla

von AmoyLab · AmoyLab/Unla

Turn any REST API into an MCP server from YAML — zero code changes, hot reload, multi-tenant, SSE + Streamable HTTP.

Unla (AmoyLab) is a lightweight Go gateway that converts REST APIs and existing MCP services into MCP endpoints via YAML configuration. Web UI for management, multi-tenant, OAuth pre-auth, Docker-first deployment.

Warum nutzen

Hauptfunktionen

Live-Demo

In der Praxis

unla.replay ▶ bereit
0/0

Installieren

Wählen Sie Ihren Client

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

Öffne Claude Desktop → Settings → Developer → Edit Config. Nach dem Speichern neu starten.

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

Cursor nutzt das gleiche mcpServers-Schema wie Claude Desktop. Projektkonfiguration schlägt die globale.

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

Klicken Sie auf das MCP-Servers-Symbol in der Cline-Seitenleiste, dann "Edit Configuration".

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

Gleiche Struktur wie Claude Desktop. Windsurf neu starten zum Übernehmen.

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

Continue nutzt ein Array von Serverobjekten statt einer Map.

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

In context_servers hinzufügen. Zed lädt beim Speichern neu.

claude mcp add unla -- npx -y Unla

Einzeiler. Prüfen mit claude mcp list. Entfernen mit claude mcp remove.

Anwendungsfälle

Praxisnahe Nutzung: Unla

How to expose your internal REST API as MCP without writing a server

👤 Platform engineers, internal tools teams ⏱ ~30 min intermediate

Wann einsetzen: You have a company REST API and want Claude/Cursor to use it without building a bespoke MCP.

Voraussetzungen
  • Docker — docker.com/get-started
  • OpenAPI/Swagger spec for the API (helpful but optional) — Most internal APIs already have one
Ablauf
  1. Deploy Unla
    docker run -d --name unla -p 8080:80 -p 5234:5234 -p 5235:5235 ghcr.io/amoylab/unla/allinone:latest✓ Kopiert
    → Web UI at :8080
  2. Add a YAML server definition
    In the UI, create a server 'internal-api' with endpoints /users (GET) and /orders (GET, POST), mapped to https://api.internal/v1.✓ Kopiert
    → Tools show up: get_users, get_orders, create_order
  3. Point your client at it
    Add https://gateway.internal/mcp/internal-api to Claude Desktop.✓ Kopiert
    → New tools appear in the client

Ergebnis: Your internal API usable from any MCP client within an hour.

Fallstricke
  • Auth leaks if you map sensitive headers unrestricted — Use Unla's OAuth pre-auth to gate per-user; never hardcode admin tokens in YAML
  • Write endpoints expose destructive calls — Mark POST/DELETE endpoints as 'confirm' so they require explicit user approval
Kombinieren mit: mcphub

How to give each customer their own MCP namespace

👤 SaaS teams offering MCP access to customers ⏱ ~45 min advanced

Wann einsetzen: You run a platform and want per-tenant tool isolation.

Ablauf
  1. Create tenants in Unla
    In admin, create tenants 'acme' and 'globex', each with their own API key mapping.✓ Kopiert
    → Two isolated namespaces
  2. Route per-tenant
    Acme users hit /mcp/acme, globex hits /mcp/globex.✓ Kopiert
    → Tools show tenant-scoped data

Ergebnis: Multi-tenant MCP without running multiple gateways.

Fallstricke
  • Cross-tenant leakage via shared YAML templates — Use tenant-scoped variables, never $ENV references that resolve cross-tenant

How to put your existing MCPs behind a single authenticated URL

👤 Teams with scattered MCP deployments ⏱ ~20 min intermediate

Wann einsetzen: Multiple stdio MCPs in different places and you want one public URL with OAuth.

Ablauf
  1. Register each downstream MCP
    In Unla, add github-mcp (stdio) and postgres-mcp (HTTP) as proxied servers.✓ Kopiert
    → Both show as healthy
  2. Enable OAuth
    Turn on GitHub OAuth for the gateway.✓ Kopiert
    → Login flow works end-to-end

Ergebnis: One endpoint, one login, all your MCPs.

Kombinationen

Mit anderen MCPs für 10-fache Wirkung

unla + mcphub

Use Unla for REST-to-MCP conversion and MCPHub for routing/grouping

Register Unla-exposed tools in MCPHub under the 'internal' group.✓ Kopiert
unla + proxy

Use mcp-proxy as a last-mile stdio bridge and Unla as the public-facing gateway

Bridge my local stdio MCP to HTTP with mcp-proxy, then register it in Unla.✓ Kopiert

Werkzeuge

Was dieses MCP bereitstellt

WerkzeugEingabenWann aufrufenKosten
(gateway) yaml-defined REST tools As declared in YAML Whatever the exposed REST endpoint does 1 request to upstream API
(gateway) proxied MCP tools Pass-through Same as downstream Same as downstream MCP

Kosten & Limits

Was der Betrieb kostet

API-Kontingent
None at the gateway layer; upstream API quotas still apply
Tokens pro Aufruf
Minimal gateway overhead
Kosten in €
Free (Apache 2.0)
Tipp
Cache GET endpoints at the gateway to avoid duplicate upstream billing.

Sicherheit

Rechte, Secrets, Reichweite

Minimale Scopes: OAuth issuer config + tenant-scoped API keys
Credential-Speicherung: Gateway config on disk (encrypt via your secret manager); tenant tokens via DB
Datenabfluss: The gateway forwards to whichever upstream URLs you configure
Niemals gewähren: Do not expose the admin UI publicly without auth Do not YAML-encode production tokens in git

Fehlerbehebung

Häufige Fehler und Lösungen

Upstream 401 on every call

Gateway isn't forwarding auth header. Add an Authorization mapping rule in YAML.

Prüfen: curl gateway with -v; check upstream headers
Hot reload didn't pick up my YAML change

Validate YAML in the UI's Lint tab first; hot reload rejects invalid configs silently.

OAuth redirect_uri mismatch

Register the exact gateway URL in your OAuth provider.

SSE disconnects after 60s

Load balancer idle timeout. Raise to 3600s or use Streamable HTTP.

Alternativen

Unla vs. andere

AlternativeWann stattdessenKompromiss
MCPHubYou want a TypeScript hub with smart vector routingLess focus on REST-to-MCP conversion
ToolHiveYou want containerized per-MCP isolationNot a REST-to-MCP converter

Mehr

Ressourcen

📖 Offizielle README auf GitHub lesen

🐙 Offene Issues ansehen

🔍 Alle 400+ MCP-Server und Skills durchsuchen