Pular para o conteúdo principal

URIs de Redirecionamento OAuth MCP para Cursor, Claude e ChatGPT: Registrando Clientes MCP no Casdoor

· Leitura de 9 min
Yang Luo
Casdoor Maintainer

Todo cliente MCP envia sua própria URI de redirecionamento ao fazer login em um servidor MCP protegido por OAuth. O Cursor desktop usa http://localhost:8787/callback (versões anteriores a meados de 2026 usavam cursor://anysphere.cursor-mcp/oauth/callback), o Cursor na web e os Agentes Cloud do Cursor usam https://www.cursor.com/agents/mcp/oauth/callback, claude.ai, conectores do Claude Desktop, Claude mobile e Cowork usam https://claude.ai/api/mcp/auth_callback, e o ChatGPT usa https://chatgpt.com/connector_platform_oauth_redirect ou um https://chatgpt.com/connector/oauth/<callback-id> por conexão. Se você ativar o registro dinâmico de clientes no Casdoor, não precisará inserir nenhum destes: os clientes se registram sozinhos ou fornecem ao Casdoor um documento de metadados do ID do cliente. Você os adiciona a Redirect URLs somente quando cria uma aplicação Casdoor para um cliente manualmente.

URIs de Redirecionamento por cliente​

ClienteURI de RedirecionamentoComo obtém um ID de cliente do CasdoorObservações
Cursor desktop (atual)http://localhost:8787/callbackDCR, ou auth.CLIENT_ID em mcp.jsonPorta fixa 8787
Cursor web e Agentes Cloudhttps://www.cursor.com/agents/mcp/oauth/callbackDCR, ou auth.CLIENT_IDCom DCR, o aplicativo desktop registra esta URI e a de localhost
Cursor desktop (versões antigas)cursor://anysphere.cursor-mcp/oauth/callbackDCR, ou auth.CLIENT_IDO Cursor tornou a URI loopback padrão em julho de 2026
claude.ai, Conectores do Claude Desktop, Claude mobile, Coworkhttps://claude.ai/api/mcp/auth_callbackCIMD, depois DCR, ou um ID de cliente inserido no diálogo do conector personalizadoOs servidores da Anthropic fazem as solicitações
Claude Codehttp://localhost:<port>/callback e http://127.0.0.1:<port>/callbackCIMDA porta muda por sessão
Claude Desktop via mcp-remotehttp://localhost:<port>/oauth/callbackDCRA porta é derivada da URL do servidor
ChatGPThttps://chatgpt.com/connector_platform_oauth_redirect, ou https://chatgpt.com/connector/oauth/<callback-id>CIMD, DCR, ou um cliente predefinidoCopie o valor exato do ChatGPT

Estes valores vêm da documentação dos fornecedores em 2 de novembro de 2026 (veja Referências). Os clientes podem alterá-los. Quando um login falhar, leia o parâmetro redirect_uri da solicitação de autorização na barra de endereços do navegador e compare-o com o que o Casdoor possui.

A tabela se aplica a duas configurações: o servidor MCP integrado ao Casdoor em /api/mcp, e seu próprio servidor MCP que usa o Casdoor como seu servidor de autorização. Em ambos, o cliente encontra o Casdoor através dos metadados do recurso protegido (RFC 9728) e obtém seu ID de cliente do Casdoor.

Opção 1: permitir que os clientes se registrem automaticamente​

O Casdoor suporta registro dinâmico de clientes (RFC 7591) em /api/oauth/register, e documentos de metadados de ID de cliente (CIMD), onde o client_id é uma URL HTTPS de um documento JSON que lista as URIs de redirecionamento do cliente. Um interruptor controla ambos: Enable dynamic client registration na organização. Está desativado por padrão, para todas as organizações, incluindo built-in.

Com o interruptor ativado para built-in, o documento de descoberta mostra o que os clientes procuram:

curl -s https://your-casdoor.com/.well-known/openid-configuration | jq '{
registration_endpoint,
client_id_metadata_document_supported,
code_challenge_methods_supported,
token_endpoint_auth_methods_supported,
authorization_response_iss_parameter_supported
}'
{
"registration_endpoint": "https://your-casdoor.com/api/oauth/register",
"client_id_metadata_document_supported": true,
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "private_key_jwt", "none"],
"authorization_response_iss_parameter_supported": true
}

Cada cliente então escolhe seu método:

  • Claude usa CIMD apenas quando os metadados possuem tanto client_id_metadata_document_supported: true quanto none em token_endpoint_auth_methods_supported. O Casdoor possui ambos assim que o interruptor é ativado, então o Claude se identifica com uma URL de documento e o Casdoor cria uma aplicação chamada cimd_.... Caso contrário, o Claude recorre ao DCR.
  • ChatGPT prefere CIMD, com o client_id https://chatgpt.com/oauth/client.json (ou uma variante por callback), e usa DCR quando o CIMD não está disponível.
  • Cursor registra-se através de DCR como um cliente público sem segredo. A documentação do Cursor não menciona CIMD.
  • mcp-remote registra-se através de DCR.

As URIs de redirecionamento vêm da solicitação de registro ou do documento de metadados, portanto não há nada para digitar. Os clientes registrados funcionam sob um papel restrito e seus tokens não podem chamar a API de gerenciamento. Veja Dynamic client registration para as regras completas e a organização em que um cliente cai.

Opção 2: criar uma aplicação para o cliente​

Se você mantiver o registro desativado, crie uma aplicação por cliente, para que possa revogá-las separadamente:

  1. No console de administração do Casdoor, vá para Identity > Applications e adicione uma aplicação, por exemplo, cursor-mcp.
  2. Adicione as URIs de redirecionamento do cliente da tabela em Redirect URLs. Para o Cursor, adicione todas as três, porque diferentes instalações do Cursor enviam diferentes.
  3. Defina Category como Agent. Veja Set up Casdoor for your MCP server para escopos e tipos de concessão.
  4. Forneça o Client ID ao cliente.

Um segredo de cliente é opcional para esses clientes. O Casdoor aceita uma troca de código de autorização sem um segredo quando a solicitação usava PKCE, e Cursor, Claude e ChatGPT todos usam PKCE com S256. Se um cliente enviar um segredo, ele deve ser o correto.

Para onde vai o ID do cliente:

  • Cursor: um objeto auth em ~/.cursor/mcp.json ou .cursor/mcp.json. Com um CLIENT_ID estático, o aplicativo desktop do Cursor envia apenas sua URI de redirecionamento localhost.

    {
    "mcpServers": {
    "casdoor": {
    "url": "https://your-casdoor.com/api/mcp",
    "auth": {
    "CLIENT_ID": "${env:CASDOOR_MCP_CLIENT_ID}",
    "scopes": ["application:read", "user:read"]
    }
    }
    }
    }
  • Claude: o campo de ID de cliente OAuth no diálogo de conector personalizado. Registre https://claude.ai/api/mcp/auth_callback.

  • ChatGPT: O ChatGPT também funciona com clientes OAuth predefinidos. Copie a URI de redirecionamento da página de gerenciamento do servidor MCP no ChatGPT, pois qual das duas formas ele usa depende do servidor de autorização.

Guias passo a passo: Cursor, Claude Desktop, ChatGPT.

Como o Casdoor corresponde às URIs de redirecionamento​

O Casdoor compara o redirect_uri de uma solicitação com cada entrada em Redirect URLs:

  • O esquema, o host e o caminho devem corresponder. A string de consulta não é comparada.
  • A porta deve corresponder, exceto em hosts de loopback. Quando ambas as URIs usam o mesmo host de loopback (localhost, 127.0.0.1 ou ::1), o Casdoor ignora a porta, conforme solicitado pela RFC 8252 para aplicativos nativos. localhost e 127.0.0.1 são hosts diferentes, então o Claude Code precisa de ambos http://localhost/callback e http://127.0.0.1/callback.
  • Uma URI de redirecionamento em um subdomínio de um host registrado também corresponde, então https://example.com/cb aceita https://app.example.com/cb. Registre o host mais específico possível.
  • Esquemas personalizados como cursor:// correspondem pelas mesmas regras. URIs javascript:, data: e vbscript: são sempre rejeitadas.

Como a porta de loopback é ignorada, um registro mcp-remote ou Claude Code continua funcionando quando a porta local muda entre sessões.

Onde fica o claude_desktop_config.json​

A documentação MCP fornece estes caminhos. No Claude Desktop, Settings > Developer > Edit Config abre o arquivo e o cria se estiver ausente.

Operating systemPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json

O Claude Desktop alcança um servidor MCP remoto de uma das duas maneiras, e elas usam URIs de redirecionamento diferentes:

  • Como um conector, adicionado nas configurações de conector do Claude. Os servidores da Anthropic executam o fluxo OAuth, a URI de redirecionamento é https://claude.ai/api/mcp/auth_callback, e o Casdoor deve estar acessível pela internet.

  • Através de claude_desktop_config.json, com mcp-remote como uma ponte local. O fluxo OAuth roda no seu computador, e a URI de redirecionamento é http://localhost:<port>/oauth/callback:

    {
    "mcpServers": {
    "casdoor": {
    "command": "npx",
    "args": ["mcp-remote", "https://your-casdoor.com/api/mcp"]
    }
    }
    }

Feche completamente o Claude Desktop e inicie-o novamente após editar o arquivo.

Clientes hospedados precisam de um Casdoor público​

Conectores ChatGPT e Claude chamam seu servidor MCP e o Casdoor dos servidores de seus fornecedores, não do seu computador. O Casdoor deve estar acessível via HTTPS público com um certificado válido. As solicitações da Anthropic vêm de 160.79.104.0/21, se você filtrar por IP. Cursor desktop, Claude Code e mcp-remote executam o fluxo localmente, então um Casdoor na sua rede funciona para eles.

Mais duas coisas que os clientes hospedados verificam, e que o Casdoor já faz:

  • Issuer na resposta (RFC 9207): O ChatGPT rejeita uma resposta de autorização sem o iss correto e usa sua URI de redirecionamento estável apenas com servidores de autorização que atendem aos requisitos da RFC 9207. O Casdoor anuncia esse suporte em seus metadados e adiciona iss ao redirecionamento.
  • Indicadores de recurso (RFC 8707): O ChatGPT envia resource com a URL do servidor MCP nas solicitações de autorização e token. O Casdoor coloca esse valor na claim aud do token de acesso, e seu servidor MCP deve verificá-lo. Consulte Autenticação MCP para o fluxo de descoberta.

Leitura relacionada em www.casdoor.com: OAuth para agentes de IA e servidores de autorização para MCP.

Referências​