Saltar al contenido principal

URIs de redirección OAuth MCP para Cursor, Claude y ChatGPT: Registro de clientes MCP en Casdoor

· 9 min de lectura
Yang Luo
Casdoor Maintainer

Cada cliente MCP envía su propia URI de redirección cuando inicia sesión en un servidor MCP protegido por OAuth. Cursor desktop usa http://localhost:8787/callback (las versiones anteriores a mediados de 2026 usaban cursor://anysphere.cursor-mcp/oauth/callback), Cursor web y Cursor Cloud Agents usan https://www.cursor.com/agents/mcp/oauth/callback, claude.ai, conectores de Claude Desktop, Claude mobile y Cowork usan https://claude.ai/api/mcp/auth_callback, y ChatGPT usa https://chatgpt.com/connector_platform_oauth_redirect o un valor específico por conexión https://chatgpt.com/connector/oauth/<callback-id>. Si activa el registro dinámico de clientes en Casdoor, no introduce ninguno de estos: los clientes se registran solos o proporcionan a Casdoor un documento de metadatos de ID de cliente. Los agrega a Redirect URLs solo cuando crea manualmente una aplicación de Casdoor para un cliente.

URIs de redirección por cliente​

ClienteURI de redirecciónCómo obtiene un ID de cliente de CasdoorNotas
Cursor desktop (actual)http://localhost:8787/callbackDCR, o auth.CLIENT_ID en mcp.jsonPuerto fijo 8787
Cursor web y Cloud Agentshttps://www.cursor.com/agents/mcp/oauth/callbackDCR, o auth.CLIENT_IDCon DCR, la aplicación de escritorio registra esta URI y la de localhost
Cursor desktop (versiones antiguas)cursor://anysphere.cursor-mcp/oauth/callbackDCR, o auth.CLIENT_IDCursor hizo que la URI de loopback fuera la predeterminada en julio de 2026
claude.ai, conectores de Claude Desktop, Claude mobile, Coworkhttps://claude.ai/api/mcp/auth_callbackCIMD, luego DCR, o un ID de cliente introducido en el diálogo de conector personalizadoLos servidores de Anthropic realizan las solicitudes
Claude Codehttp://localhost:<port>/callback y http://127.0.0.1:<port>/callbackCIMDEl puerto cambia por sesión
Claude Desktop mediante mcp-remotehttp://localhost:<port>/oauth/callbackDCREl puerto se deriva de la URL del servidor
ChatGPThttps://chatgpt.com/connector_platform_oauth_redirect, o https://chatgpt.com/connector/oauth/<callback-id>CIMD, DCR, o un cliente predefinidoCopie el valor exacto desde ChatGPT

Estos valores provienen de la documentación de los proveedores a fecha del 2 de noviembre de 2026 (consulte Referencias). Los clientes cambian estos valores. Cuando falla un inicio de sesión, lea el parámetro redirect_uri de la solicitud de autorización en la barra de direcciones del navegador y compárelo con lo que tiene Casdoor.

La tabla se aplica a dos configuraciones: el servidor MCP integrado en Casdoor en /api/mcp, y su propio servidor MCP que utiliza Casdoor como su servidor de autorización. En ambos casos, el cliente encuentra Casdoor a través de los metadatos del recurso protegido (RFC 9728) y obtiene su ID de cliente de Casdoor.

Opción 1: permitir que los clientes se registren por sí mismos​

Casdoor admite el registro dinámico de clientes (RFC 7591) en /api/oauth/register, y los documentos de metadatos de ID de cliente (CIMD), donde el client_id es una URL HTTPS de un documento JSON que enumera las URI de redireccionamiento del cliente. Un interruptor controla ambos: Enable dynamic client registration en la organización. Está desactivado por defecto, para todas las organizaciones incluyendo built-in.

Con el interruptor activado para built-in, el documento de descubrimiento muestra lo que buscan los clientes:

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 luego elige su método:

  • Claude usa CIMD solo cuando los metadatos tienen tanto client_id_metadata_document_supported: true como none en token_endpoint_auth_methods_supported. Casdoor tiene ambos una vez que el interruptor está activado, por lo que Claude se identifica con una URL de documento y Casdoor crea una aplicación llamada cimd_.... De lo contrario, Claude recurre a DCR.
  • ChatGPT prefiere CIMD, con el client_id https://chatgpt.com/oauth/client.json (o una variante por callback), y usa DCR cuando CIMD no está disponible.
  • Cursor se registra a través de DCR como un cliente público sin secreto. La documentación de Cursor no menciona CIMD.
  • mcp-remote se registra a través de DCR.

Las URI de redireccionamiento provienen de la solicitud de registro o del documento de metadatos, por lo que no hay nada que escribir. Los clientes registrados se ejecutan bajo un rol restringido y sus tokens no pueden llamar a la API de gestión. Consulte Dynamic client registration para conocer las reglas completas y la organización en la que aterriza un cliente.

Opción 2: crear una aplicación para el cliente​

Si mantiene el registro desactivado, cree una aplicación por cliente, para poder revocarlos por separado:

  1. En la consola de administración de Casdoor, ve a Identity > Applications y añade una aplicación, por ejemplo cursor-mcp.
  2. Agregue las URI de redireccionamiento del cliente de la tabla a Redirect URLs. Para Cursor, agregue las tres, porque diferentes instalaciones de Cursor envían distintas.
  3. Establezca Category a Agent. Consulte Set up Casdoor for your MCP server para ámbitos y tipos de concesión.
  4. Proporcione el Client ID al cliente.

Un secreto de cliente es opcional para estos clientes. Casdoor acepta un intercambio de código de autorización sin secreto cuando la solicitud usó PKCE, y Cursor, Claude y ChatGPT usan todos PKCE con S256. Si un cliente envía un secreto, debe ser el correcto.

Dónde va el ID de cliente:

  • Cursor: un objeto auth en ~/.cursor/mcp.json o .cursor/mcp.json. Con un CLIENT_ID estático, la aplicación de escritorio de Cursor envía solo su URI de redireccionamiento localhost.

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

  • ChatGPT: ChatGPT también funciona con clientes OAuth predefinidos. Copie la URI de redireccionamiento desde la página de gestión del servidor MCP en ChatGPT, ya que cuál de las dos formas usa depende del servidor de autorización.

Guías paso a paso: Cursor, Claude Desktop, ChatGPT.

Cómo Casdoor hace coincidir las URI de redireccionamiento​

Casdoor compara el redirect_uri de una solicitud con cada entrada en Redirect URLs:

  • El esquema, el host y la ruta deben coincidir. La cadena de consulta no se compara.
  • El puerto debe coincidir, excepto en hosts de bucle invertido (loopback). Cuando ambas URI usan el mismo host de bucle invertido (localhost, 127.0.0.1 o ::1), Casdoor ignora el puerto, como solicita RFC 8252 para aplicaciones nativas. localhost y 127.0.0.1 son hosts diferentes, por lo que Claude Code necesita tanto http://localhost/callback como http://127.0.0.1/callback.
  • Una URI de redireccionamiento en un subdominio de un host registrado también coincide, por lo que https://example.com/cb acepta https://app.example.com/cb. Registre el host más específico posible.
  • Los esquemas personalizados como cursor:// coinciden con las mismas reglas. Las URI javascript:, data: y vbscript: siempre se rechazan.

Debido a que el puerto de bucle invertido se ignora, un registro de mcp-remote o Claude Code sigue funcionando cuando el puerto local cambia entre sesiones.

Dónde vive claude_desktop_config.json​

La documentación de MCP proporciona estas rutas. En Claude Desktop, Settings > Developer > Edit Config abre el archivo y lo crea si falta.

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

Claude Desktop llega a un servidor MCP remoto de una de dos maneras, y usan diferentes URI de redireccionamiento:

  • Como un conector, agregado en la configuración de conectores de Claude. Los servidores de Anthropic ejecutan el flujo OAuth, la URI de redireccionamiento es https://claude.ai/api/mcp/auth_callback, y Casdoor debe ser accesible desde Internet.

  • A través de claude_desktop_config.json, con mcp-remote como puente local. El flujo OAuth se ejecuta en su computadora, y la URI de redireccionamiento es http://localhost:<port>/oauth/callback:

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

Salga completamente de Claude Desktop e inícielo de nuevo después de editar el archivo.

Los clientes alojados necesitan un Casdoor público​

Los conectores de ChatGPT y Claude llaman a su servidor MCP y a Casdoor desde los servidores de sus proveedores, no desde su computadora. Casdoor debe ser accesible mediante HTTPS público con un certificado válido. Las solicitudes de Anthropic provienen de 160.79.104.0/21, si filtra por IP. Cursor desktop, Claude Code y mcp-remote ejecutan el flujo localmente, por lo que un Casdoor en su red funciona para ellos.

Dos cosas más que comprueban los clientes alojados, que Casdoor ya hace:

  • Issuer in the response (RFC 9207): ChatGPT rechaza una respuesta de autorización sin el iss correcto, y usa su URI de redirección estable solo con servidores de autorización que cumplen sus requisitos de RFC 9207. Casdoor anuncia esta compatibilidad en sus metadatos y añade iss a la redirección.
  • Resource indicators (RFC 8707): ChatGPT envía resource con la URL del servidor MCP en las solicitudes de autorización y token. Casdoor coloca ese valor en la reclamación aud del token de acceso, y tu servidor MCP debe verificarlo. Consulta Autenticación MCP para el flujo de descubrimiento.

Lecturas relacionadas en www.casdoor.com: OAuth para agentes de IA y servidores de autorización para MCP.

Referencias​