# セルフホスティング環境での MCP

> セルフホスティング環境の Nodaro で MCP サーバーを有効にし、Claude、Cursor、ChatGPT などの MCP クライアントが、専用の MCP ホスト名から OAuth で環境を使えるようにします。

Source: https://nodaro.ai/ja/docs/self-hosting/mcp

Nodaro の **MCP サーバー**を使うと、Claude、Cursor、Cline、Continue、Goose、ChatGPT などの AI クライアントが、ユーザーに代わってセルフホスティング環境のツールを使えるようになります。MCP サーバーは、デフォルトではオフです。有効にするには、MCP 専用のホスト名を用意してそのホスト名を API にルーティングし、2 つの変数を設定します。その後、ユーザーは自分のクライアントから OAuth で環境にログインします。

## MCP の提供のしくみ
- **MCP は API が提供します**。`nodaro` コンテナ内のポート `9000` で、パス `/mcp` に応答します。
- **ポート `3000` の Web サーバーは、MCP のリクエストを拒否します**。アプリのメインのアドレスで `/mcp` にリクエストすると、`405` とエラー `wrong_mcp_host`、そして本来のエンドポイントのアドレスが返されます。
- **そのため、MCP には専用のホスト名が必要です**。`mcp.nodaro.example.com` のように、トラフィックが API に直接届くホスト名を用意します。
- **ログインはメインのドメインのままです**。OAuth のディスカバリードキュメント `/.well-known/oauth-authorization-server` と同意画面は、`PUBLIC_URL` で提供されます。

## MCP を有効にする
### MCP のホスト名を API にルーティングする
`mcp.<your-domain>` の DNS レコードを作成し、自分のサーバーに解決されるようにします。CDN を経由してプロキシしないでください。プロキシを通すと、MCP が使う長時間の Server-Sent Events 接続が切断されます。

**Docker Compose**

Compose ファイルは、API のポートを公開していません。`nodaro` サービスの下で、ループバックインターフェイスに公開します。

```yaml
nodaro:
ports:
      - "3000:3000"
      - "127.0.0.1:9000:9000"
```

次に、リバースプロキシに MCP ホスト用の 2 つ目のサイトを追加し、`127.0.0.1:3000` ではなく `127.0.0.1:9000` に転送するようにします。[nginx の例](https://nodaro.ai/docs/self-hosting/reverse-proxy#option-a-nginx)と同じように、レスポンスのバッファリングはオフのままにします。

**Railway**

MCP のホスト名を、backend サービスのカスタムドメインとして追加します。

```bash
railway domain add mcp.your-domain.com --service backend
```

または、Railway のダッシュボードで **Project › backend service › Settings › Domains › Add custom domain** を開きます。その後、DNS プロバイダーで CNAME レコードを追加します。

### 変数を設定する
```bash
MCP_ENABLED=true                              # required; the default is off
MCP_PUBLIC_URL=https://mcp.your-domain.com    # the hostname from step 1
```

Compose スタックでは、どちらも `nodaro` サービスの `environment:` の下に追加します。Compose ファイルは、これらを `.env` から渡さないためです。その後、`docker compose -f docker-compose.community.yml up -d` を実行します。

`MCP_PUBLIC_URL` は、ディスカバリーエンドポイントが保護されたリソース（RFC 9728）の識別子として公開する値で、ツールが返すアップロードリンクのベースにもなります。設定しないと、環境は Nodaro Cloud の MCP ホストを公開してしまいます。サブドメインではなくメインのドメインで MCP を提供する場合は、`PUBLIC_URL` と同じ値を設定します。その場合も、`/mcp` へのリクエストは API のポートに直接届く必要があります。

### ディスカバリーエンドポイントを確認する
```bash
curl https://mcp.your-domain.com/.well-known/oauth-protected-resource
curl https://your-domain.com/.well-known/oauth-authorization-server
```

どちらも、ステータス `200` で JSON を返す必要があります。

### クライアントにコネクタを追加する
MCP のエンドポイントは `https://mcp.your-domain.com/mcp` です。Claude では、**Settings**（設定）› **Connectors**（コネクタ）› **Add custom connector**（カスタムコネクタを追加）を開き、この URL を入力します。ほかのクライアントについては、[クライアントを接続](https://nodaro.ai/docs/mcp/connect)を参照し、Nodaro Cloud の URL の代わりに自分の MCP の URL を使ってください。

## 登録できるクライアント
MCP クライアントは、OAuth でログインします。対応しているクライアントは、動的クライアント登録（RFC 7591）によって、自分自身を環境に登録します。登録は 2 つの変数で制御でき、ほとんどの環境ではデフォルトのままで問題ありません。

| 変数 | デフォルト | 説明 |
| --- | --- | --- |
| `MCP_DYNAMIC_REGISTRATION` | `allowlist` | `allowlist` は、`MCP_DCR_ALLOWLIST` にあるクライアント名だけを受け付けます。`open` は、任意のクライアントを受け付けます。`off` は、動的登録を無効にします。 |
| `MCP_DCR_ALLOWLIST` | 既知の 14 のクライアント | `allowlist` モードで受け付けるクライアント名を、カンマ区切りで指定します。 |

デフォルトの許可リストは、Claude、Claude Code、Cursor、Cline、Continue、Goose、ChatGPT、OpenAI、Lovable、Gemini、Gemini CLI、Codex、MCP Inspector、mcp-inspector です。独自のクライアントを追加するには、リスト全体を設定します。

```bash
MCP_DCR_ALLOWLIST=Claude,Cursor,Cline,Continue,Goose,YourCustomClient
```

推奨のモードは `allowlist` です。

## クライアントでできること
MCP サーバーには、画像、動画、音声、キャラクター、ロケーション、オブジェクトの生成ツールと、ギャラリー、ワークフロー、アプリ、保存したコンポーネント、モデルのためのツールがあります。各ユーザーは、環境上の自分のアカウントとして操作します。[MCP ツール](https://nodaro.ai/docs/mcp/tools)のリファレンスと、[MCP のトラブルシューティング](https://nodaro.ai/docs/mcp/troubleshooting)を参照してください。

## Frequently asked questions

### セルフホスティング環境の Nodaro では、MCP はデフォルトでオンですか？

いいえ。MCP_ENABLED=true と MCP_PUBLIC_URL を設定し、MCP 用のホスト名を API にルーティングしてから再起動します。Compose スタックでは、この 2 つの変数を nodaro サービスの environment ブロックに追加します。Compose ファイルは、これらを .env から渡さないためです。

### MCP クライアントに 405 wrong_mcp_host が返されるのはなぜですか？

クライアントがアプリのメインのアドレスを使っており、そこでは Web サーバーが MCP のリクエストを拒否するためです。クライアントの接続先を、MCP ホストの https://your-mcp-host/mcp に変更してください。MCP ホストは、ポート 9000 の API に直接届く必要があります。

### 自分の環境に登録できる MCP クライアントはどれですか？

デフォルトでは、Claude、Claude Code、Cursor、Cline、Continue、Goose、ChatGPT、Codex など、既知の 14 のクライアントです。ほかのクライアントを許可するには MCP_DCR_ALLOWLIST に名前を追加し、任意のクライアントを受け付けるには MCP_DYNAMIC_REGISTRATION=open を設定します。

### MCP ホストの前に CDN を置けますか？

トラフィックをプロキシする CDN は置けません。MCP は Server-Sent Events の接続を長時間開いたままにするため、プロキシする CDN はその接続を切断してしまいます。DNS は、サーバーを直接指すように設定してください。
