> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xtarify.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticación

> Cómo se conecta un cliente: OAuth 2.1 con registro dinámico, PKCE y tokens atados al servidor.

Esta página es para quien construye un cliente MCP o quiere saber qué pasa por debajo. Si solo quieres conectar Claude, ve a [Conectar con Claude](https://docs.xtarify.com/mcp/claude.md).

## Resumen

| | |
| - | - |
| Servidor MCP | `https://mcp.xtarify.com/mcp` (Streamable HTTP, sin sesión) |
| Versiones del protocolo | `2025-11-25`, `2025-06-18` y `2025-03-26` |
| Autorización | OAuth 2.1 con código de autorización y PKCE `S256` obligatorio |
| Registro de clientes | Dinámico ([RFC 7591](https://www.rfc-editor.org/rfc/rfc7591)), sin aprobación previa |
| Scope | `factory` |
| Token de acceso | Bearer, dura 1 hora |
| Token de refresco | Dura 60 días y rota en cada uso |

## Descubrimiento

Un pedido sin token recibe `401` con la dirección de los metadatos:

```http theme={null}
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.xtarify.com/.well-known/oauth-protected-resource/mcp", scope="factory"
```

| Metadatos | URL |
| - | - |
| Recurso protegido ([RFC 9728](https://www.rfc-editor.org/rfc/rfc9728)) | `https://mcp.xtarify.com/.well-known/oauth-protected-resource/mcp` |
| Servidor de autorización ([RFC 8414](https://www.rfc-editor.org/rfc/rfc8414)) | `https://mcp.xtarify.com/.well-known/oauth-authorization-server` |

| Endpoint | URL |
| - | - |
| Autorización | `https://mcp.xtarify.com/oauth/authorize` |
| Token | `https://mcp.xtarify.com/oauth/token` |
| Registro | `https://mcp.xtarify.com/oauth/register` |
| Revocación ([RFC 7009](https://www.rfc-editor.org/rfc/rfc7009)) | `https://mcp.xtarify.com/oauth/revoke` |

## El flujo

**1. Registro**

El cliente se registra con `POST /oauth/register` mandando `client_name` y sus `redirect_uris`. Se aceptan clientes públicos (`token_endpoint_auth_method: none`) y con secreto (`client_secret_post` o `client_secret_basic`).

**2. Autorización**

El cliente abre `/oauth/authorize` en el navegador con `response_type=code`, `client_id`, `redirect_uri`, `code_challenge`, `code_challenge_method=S256`, `state` y, recomendado, `resource=https://mcp.xtarify.com/mcp`.

**3. Consentimiento en xtarify.com**

El usuario inicia sesión en xtarify.com y ve qué app pide acceso, a dónde volverá y qué podrá hacer. Las apps conocidas (Claude, ChatGPT, Cursor, VS Code, Windsurf y clientes locales) aparecen como verificadas; las demás muestran un aviso. Si acepta, vuelve al `redirect_uri` con `code` y `state`.

**4. Token**

El cliente canjea el código en `POST /oauth/token` con `grant_type=authorization_code`, el `code_verifier` y el mismo `redirect_uri`. El código dura 5 minutos y sirve una sola vez: si se usa dos veces, se revocan los tokens que emitió.

**5. Llamadas**

Cada pedido al servidor MCP lleva `Authorization: Bearer <access_token>`. Para renovar, `grant_type=refresh_token`: devuelve un par nuevo y el refresco anterior deja de servir.

## Reglas

* **Tokens atados al servidor** ([RFC 8707](https://www.rfc-editor.org/rfc/rfc8707)): un token emitido para otro recurso no abre `https://mcp.xtarify.com/mcp`, y un `resource` distinto en el pedido de token devuelve `invalid_target`.
* **Direcciones de retorno:** `https://`, `http://` solo para `localhost`, `127.0.0.1` o `::1`, y esquemas propios de apps de escritorio (`cursor://`, `vscode://`). Nunca `javascript:`, `data:` ni `file:`, y sin fragmento (`#`).
* **Límite de registros:** 30 por hora por dirección IP.
* **Desconexión:** el usuario puede revocar una app en xtarify.com/fabrica (**Apps conectadas**) y sus tokens dejan de servir al instante. El cliente también puede revocar sus tokens con `/oauth/revoke`.

## Transporte

* `POST /mcp` con un mensaje JSON-RPC (o un lote) responde con JSON. Las notificaciones reciben `202`.
* `GET /mcp` responde `405`: el servidor no abre flujos SSE y no usa `Mcp-Session-Id`, porque cada pedido es independiente.
* Si mandas `MCP-Protocol-Version` con una versión que no está en la lista, recibes `400`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.