# MCP em uma instalação self-hosted

> Ative o servidor MCP de um Nodaro self-hosted para que Claude, Cursor, ChatGPT e outros clientes MCP usem a instalação por OAuth, em um host MCP próprio.

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

O **servidor MCP** do Nodaro permite que clientes de IA como Claude, Cursor, Cline, Continue, Goose e ChatGPT usem as ferramentas da sua instalação self-hosted em nome de um usuário. Ele vem desativado por padrão. Para ativá-lo, você dá ao MCP um nome de host próprio, direciona esse nome de host para a API e define duas variáveis. Os usuários, então, fazem login na sua instalação com OAuth a partir do cliente deles.

## Como o MCP é servido
- **A API serve o MCP** no caminho `/mcp`, na porta `9000` dentro do contêiner `nodaro`.
- **O servidor web na porta `3000` recusa requisições MCP.** Uma requisição a `/mcp` no endereço principal do app responde `405`, com o erro `wrong_mcp_host` e o endereço do endpoint real.
- **Por isso, o MCP precisa de um nome de host próprio**, como `mcp.nodaro.example.com`, cujo tráfego chegue diretamente à API.
- **O login continua no seu domínio principal.** O documento de descoberta OAuth `/.well-known/oauth-authorization-server` e a tela de consentimento são servidos em `PUBLIC_URL`.

## Ativar o MCP
### Direcionar um nome de host MCP para a API
Crie um registro DNS para `mcp.<your-domain>` que aponte para o seu servidor. Não passe esse registro pelo proxy de uma CDN: os proxies quebram as conexões de Server-Sent Events de longa duração que o MCP usa.

**Docker Compose**

O arquivo do Compose não publica a porta da API. Publique-a na interface de loopback, no serviço `nodaro`:

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

Depois, dê ao seu proxy reverso um segundo site para o host MCP, que encaminhe para `127.0.0.1:9000` em vez de `127.0.0.1:3000`. Mantenha o buffering das respostas desligado, como no [exemplo do nginx](https://nodaro.ai/docs/self-hosting/reverse-proxy#option-a-nginx).

**Railway**

Adicione o nome de host MCP como um domínio personalizado do serviço backend:

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

Ou, no painel do Railway: **Project › backend service › Settings › Domains › Add custom domain**. Depois, adicione o registro CNAME no seu provedor de DNS.

### Definir as variáveis
```bash
MCP_ENABLED=true                              # required; the default is off
MCP_PUBLIC_URL=https://mcp.your-domain.com    # the hostname from step 1
```

Na stack do Compose, adicione as duas em `environment:` do serviço `nodaro`: o arquivo do Compose não as repassa do `.env`. Depois, rode `docker compose -f docker-compose.community.yml up -d`.

`MCP_PUBLIC_URL` é a identidade que os endpoints de descoberta anunciam para o recurso protegido (RFC 9728) e a base dos links de upload que as ferramentas retornam. Sem ela, a sua instalação anuncia o host MCP do Nodaro Cloud. Se você servir o MCP no seu domínio principal em vez de um subdomínio, defina essa variável com o mesmo valor de `PUBLIC_URL`. Nesse caso, as requisições a `/mcp` ainda precisam chegar diretamente à porta da API.

### Verificar os endpoints de descoberta
```bash
curl https://mcp.your-domain.com/.well-known/oauth-protected-resource
curl https://your-domain.com/.well-known/oauth-authorization-server
```

Os dois precisam retornar JSON com o status `200`.

### Adicionar o conector no seu cliente
O endpoint MCP é `https://mcp.your-domain.com/mcp`. No Claude, abra **Settings › Connectors › Add custom connector** e digite essa URL. Para outros clientes, veja [Conectar um cliente](https://nodaro.ai/docs/mcp/connect) e use a sua própria URL do MCP em vez da URL do Nodaro Cloud.

## Quais clientes podem se registrar
Os clientes MCP fazem login com OAuth. Os clientes compatíveis se registram na sua instalação por registro dinâmico de clientes (RFC 7591). Duas variáveis controlam esse registro, e os padrões delas servem para a maioria das instalações:

| Variável | Padrão | O que faz |
| --- | --- | --- |
| `MCP_DYNAMIC_REGISTRATION` | `allowlist` | `allowlist` só aceita os nomes de cliente de `MCP_DCR_ALLOWLIST`. `open` aceita qualquer cliente. `off` desativa o registro dinâmico. |
| `MCP_DCR_ALLOWLIST` | 14 clientes conhecidos | Os nomes de cliente aceitos no modo `allowlist`, separados por vírgula. |

A lista de permissões padrão é: Claude, Claude Code, Cursor, Cline, Continue, Goose, ChatGPT, OpenAI, Lovable, Gemini, Gemini CLI, Codex, MCP Inspector e mcp-inspector. Para adicionar o seu próprio cliente, defina a lista completa:

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

`allowlist` é o modo recomendado.

## O que os clientes podem fazer
O servidor MCP cobre as ferramentas de geração de imagem, vídeo, áudio, personagens, locais e objetos, e as ferramentas da galeria, dos workflows, dos apps, dos componentes salvos e dos modelos. Cada usuário age como a própria conta na sua instalação. Veja a [Referência das ferramentas MCP](https://nodaro.ai/docs/mcp/tools) e a [Solução de problemas do MCP](https://nodaro.ai/docs/mcp/troubleshooting).

## Frequently asked questions

### O MCP vem ativado por padrão em um Nodaro self-hosted?

Não. Defina MCP_ENABLED=true e MCP_PUBLIC_URL, direcione um nome de host MCP para a API e reinicie. Na stack do Compose, adicione as duas variáveis no bloco environment do serviço nodaro, porque o arquivo do Compose não as repassa do .env.

### Por que o meu cliente MCP recebe 405 wrong_mcp_host?

O cliente usa o endereço principal do app, onde o servidor web recusa requisições MCP. Aponte o cliente para o host MCP, https://your-mcp-host/mcp, que precisa alcançar a API na porta 9000 diretamente.

### Quais clientes MCP podem se registrar na minha instalação?

Por padrão, 14 clientes conhecidos, entre eles Claude, Claude Code, Cursor, Cline, Continue, Goose, ChatGPT e Codex. Adicione nomes a MCP_DCR_ALLOWLIST, ou defina MCP_DYNAMIC_REGISTRATION=open para aceitar qualquer cliente.

### Posso colocar uma CDN na frente do host MCP?

Não uma que faça proxy do tráfego. O MCP mantém abertas conexões de Server-Sent Events de longa duração, e uma CDN que faz proxy as quebra. Aponte o DNS diretamente para o seu servidor.
