URIs de redirección OAuth MCP para Cursor, Claude y ChatGPT: Registro de clientes MCP en Casdoor
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
| Cliente | URI de redirección | Cómo obtiene un ID de cliente de Casdoor | Notas |
|---|---|---|---|
| Cursor desktop (actual) | http://localhost:8787/callback | DCR, o auth.CLIENT_ID en mcp.json | Puerto fijo 8787 |
| Cursor web y Cloud Agents | https://www.cursor.com/agents/mcp/oauth/callback | DCR, o auth.CLIENT_ID | Con DCR, la aplicación de escritorio registra esta URI y la de localhost |
| Cursor desktop (versiones antiguas) | cursor://anysphere.cursor-mcp/oauth/callback | DCR, o auth.CLIENT_ID | Cursor hizo que la URI de loopback fuera la predeterminada en julio de 2026 |
| claude.ai, conectores de Claude Desktop, Claude mobile, Cowork | https://claude.ai/api/mcp/auth_callback | CIMD, luego DCR, o un ID de cliente introducido en el diálogo de conector personalizado | Los servidores de Anthropic realizan las solicitudes |
| Claude Code | http://localhost:<port>/callback y http://127.0.0.1:<port>/callback | CIMD | El puerto cambia por sesión |
Claude Desktop mediante mcp-remote | http://localhost:<port>/oauth/callback | DCR | El puerto se deriva de la URL del servidor |
| ChatGPT | https://chatgpt.com/connector_platform_oauth_redirect, o https://chatgpt.com/connector/oauth/<callback-id> | CIMD, DCR, o un cliente predefinido | Copie 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: truecomononeentoken_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 llamadacimd_.... De lo contrario, Claude recurre a DCR. - ChatGPT prefiere CIMD, con el
client_idhttps://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-remotese 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:
- En la consola de administración de Casdoor, ve a Identity > Applications y añade una aplicación, por ejemplo
cursor-mcp. - 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.
- Establezca Category a
Agent. Consulte Set up Casdoor for your MCP server para ámbitos y tipos de concesión. - 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
authen~/.cursor/mcp.jsono.cursor/mcp.json. Con unCLIENT_IDestá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.1o::1), Casdoor ignora el puerto, como solicita RFC 8252 para aplicaciones nativas.localhosty127.0.0.1son hosts diferentes, por lo que Claude Code necesita tantohttp://localhost/callbackcomohttp://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/cbaceptahttps://app.example.com/cb. Registre el host más específico posible. - Los esquemas personalizados como
cursor://coinciden con las mismas reglas. Las URIjavascript:,data:yvbscript: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 system | Path |
|---|---|
| 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, conmcp-remotecomo puente local. El flujo OAuth se ejecuta en su computadora, y la URI de redireccionamiento eshttp://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
isscorrecto, 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ñadeissa la redirección. - Resource indicators (RFC 8707): ChatGPT envía
resourcecon la URL del servidor MCP en las solicitudes de autorización y token. Casdoor coloca ese valor en la reclamaciónauddel 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
- Cursor: Model Context Protocol (MCP), sección "Static OAuth for remote servers"
- Foro de Cursor: OAuth redirect URI changed from cursor:// to http://localhost
- Anthropic: Authentication for connectors
- Model Context Protocol: Connect to local MCP servers
- OpenAI: Authenticate users
mcp-remote: README- Casdoor: Dynamic client registration, Set up Casdoor for your MCP server