/ ディレクトリ / プレイグラウンド / Unla
● コミュニティ AmoyLab ⚡ 即起動

Unla

作者 AmoyLab · AmoyLab/Unla

任意のREST APIをYAMLからMCPサーバーに変換 — コード変更なし、ホットリロード、マルチテナント、SSE + Streamable HTTP。

Unla(AmoyLab)は軽量なGoゲートウェイで、REST APIと既存MCPサービスをYAML設定を介してMCPエンドポイントに変換します。管理用Web UI、マルチテナント対応、OAuth事前認証、Dockerファースト展開に対応しています。

なぜ使うのか

主な機能

ライブデモ

実際の動作

unla.replay ▶ 準備完了
0/0

インストール

クライアントを選択

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

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

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

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

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

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

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

Claude Desktop と同じ形式。Windsurf を再起動して反映。

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

Continue はマップではなくサーバーオブジェクトの配列を使用。

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

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add unla -- npx -y Unla

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Unla

サーバーを書かずに内部REST APIをMCPとして公開する方法

👤 プラットフォームエンジニア、社内ツールチーム ⏱ ~30 min intermediate

使うタイミング: 社内REST APIがあり、カスタムMCPを構築せずにClaude/Cursorに使わせたい場合。

前提条件
  • Docker — docker.com/get-started
  • API用のOpenAPI/Swaggerスペック(あると便利ですが必須ではありません) — ほとんどの社内APIは既に持っています
フロー
  1. Unlaをデプロイ
    docker run -d --name unla -p 8080:80 -p 5234:5234 -p 5235:5235 ghcr.io/amoylab/unla/allinone:latest✓ コピーしました
    → :8080のWeb UI
  2. YAMLサーバー定義を追加
    UIで 'internal-api' という名前のサーバーを作成し、エンドポイント /users(GET)と /orders(GET、POST)を https://api.internal/v1 にマッピングします。✓ コピーしました
    → ツールが表示されます:get_users、get_orders、create_order
  3. クライアントをポイント
    https://gateway.internal/mcp/internal-api を Claude Desktop に追加します。✓ コピーしました
    → クライアントに新しいツールが表示されます

結果: 社内APIが1時間以内に任意のMCPクライアントから使用可能になります。

注意点
  • 機密ヘッダーを無制限にマッピングするとauth漏洩が発生 — Unlaの OAuth事前認証を使用してユーザーごとにゲート;YAML に管理者トークンをハードコードしないでください
  • 書き込みエンドポイントが破壊的な呼び出しを公開 — POST/DELETE エンドポイントを 'confirm' としてマークし、明示的なユーザー承認を必要とします
組み合わせ: mcphub

各顧客に独自のMCPネームスペースを提供する方法

👤 顧客にMCPアクセスを提供するSaaSチーム ⏱ ~45 min advanced

使うタイミング: プラットフォームを運用しており、テナントごとのツール分離が必要な場合。

フロー
  1. Unlaでテナントを作成
    管理画面で 'acme' と 'globex' テナントを作成し、それぞれ独自のAPIキーマッピングを持たせます。✓ コピーしました
    → 2つの独立したネームスペース
  2. テナントごとにルート
    Acmeユーザーは /mcp/acme、globexは /mcp/globex にアクセスします。✓ コピーしました
    → ツールはテナントスコープのデータを表示

結果: 複数のゲートウェイを実行せずにマルチテナント MCPを実現します。

注意点
  • 共有YAML テンプレート経由のテナント間漏洩 — テナントスコープ変数を使用し、テナント間で解決される $ENV 参照は避けてください

既存のMCPを単一の認証URLの背後に配置する方法

👤 分散されたMCP デプロイを持つチーム ⏱ ~20 min intermediate

使うタイミング: 複数のstdio MCPが異なる場所にあり、OAuthを使用した1つのパブリックURLが必要な場合。

フロー
  1. 各下流MCPを登録
    Unlaで github-mcp(stdio)と postgres-mcp(HTTP)をプロキシサーバーとして追加します。✓ コピーしました
    → 両方が正常と表示される
  2. OAuthを有効化
    ゲートウェイのGitHub OAuthをオンにします。✓ コピーしました
    → ログインフローがエンドツーエンドで機能

結果: 1つのエンドポイント、1つのログイン、すべてのMCP。

組み合わせ

他のMCPと組み合わせて10倍の力を

unla + mcphub

REST-to-MCP変換にUnlaを使用し、ルーティング/グループ化にMCPHubを使用

Unlaで公開されたツールをMCPHubの 'internal' グループに登録します。✓ コピーしました
unla + proxy

mcp-proxyをラストマイルstdioブリッジとして使用し、Unlaをパブリック向けゲートウェイとして使用

ローカルstdio MCPをmcp-proxyでHTTPにブリッジし、Unlaに登録します。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
(gateway) yaml-defined REST tools YAML で宣言されたとおり 公開されたREST エンドポイントが行うことに応じて 上流API への 1 つのリクエスト
(gateway) proxied MCP tools パススルー ダウンストリームと同じ ダウンストリームMCPと同じ

コストと制限

運用コスト

APIクォータ
ゲートウェイレイヤーではクォータなし;上流APIのクォータは引き続き適用
呼び出しあたりのトークン
最小限のゲートウェイオーバーヘッド
金額
無料(Apache 2.0)
ヒント
ゲートウェイでGETエンドポイントをキャッシュして、重複する上流請求を避けます。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: OAuth発行者設定 + テナントスコープAPIキー
認証情報の保管: ディスク上のゲートウェイ設定(シークレットマネージャーで暗号化);DB経由のテナントトークン
データ送信先: ゲートウェイは設定した上流URLに転送します
絶対に付与しない: 認証なしに管理UI をパブリックに公開しないでください 本番環境トークンをYAMLでエンコードしてgitに入れないでください

トラブルシューティング

よくあるエラーと対処法

すべての呼び出しで上流401

ゲートウェイが認証ヘッダーを転送していません。YAMLでAuthorization マッピング ルールを追加します。

確認: curl gateway with -v; check upstream headers
ホットリロードがYAML変更を反映していない

最初にUIのLintタブでYAMLを検証してください;ホットリロー���は無効な設定を黙って拒否します。

OAuth redirect_uri の不一致

正確なゲートウェイURLをOAuth プロバイダーに登録してください。

SSEが60秒後に切断

ロードバランサーのアイドルタイムアウト。3600sに上げるか、Streamable HTTPを使用します。

代替案

Unla 他との比較

代替案代わりに使う場面トレードオフ
MCPHubスマートベクトルルーティング機能を備えたTypeScriptハブが必要な場合REST-to-MCP変換への焦点が低い
ToolHiveMCP単位のコンテナ化された分離が必要な場合REST-to-MCP変換ツールではない

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る