# OAuth para clientes de MCP

> Cómo los clientes de MCP descubren, registran y obtienen tokens para el servidor TradeCatalog MCP con OAuth 2.1.

Esta página es para personas que construyen un cliente MCP o depuran una conexión. Si solo desea conectar Claude o ChatGPT, consulte [Conectar una aplicación de IA](/docs/mcp).

TradeCatalog sigue la [especificación de autorización MCP](https://modelcontextprotocol.io/specification/latest/basic/authorization): OAuth 2.1 con PKCE, metadatos de recursos protegidos (RFC 9728) y metadatos del servidor de autorización (RFC 8414).

## Puntos finales

| ¿Qué                                    | URL                                                                 |
| --------------------------------------- | ------------------------------------------------------------------- |
| Servidor MCP (recurso protegido)        | `https://tradecatalog.app/mcp`                                      |
| Metadatos del recurso protegido         | `https://tradecatalog.app/.well-known/oauth-protected-resource/mcp` |
| Metadatos del servidor de autorización  | `https://tradecatalog.app/.well-known/oauth-authorization-server`   |
| Punto de autorización                   | `https://tradecatalog.app/oauth/authorize`                          |
| Punto de token                          | `https://tradecatalog.app/oauth/token`                              |
| Registro dinámico de clientes           | `https://tradecatalog.app/oauth/register`                           |
| Aplicaciones conectadas (para personas) | `https://tradecatalog.app/oauth/connections`                        |

Los metadatos del recurso protegido están en la dirección específica de la ruta para `/mcp`, según lo describe el RFC 9728 para un recurso con una ruta. No hay nada en absoluto en `/.well-known/oauth-protected-resource` por sí solo.

La conexión opcional `/mcp/account` agrega un intercambio seguro de facturación exclusivo para el propietario para anfitriones de agentes que permiten la facturación por suscripción de software. Es un descendiente del mismo recurso protegido `/mcp`: utilice los metadatos anteriores y `resource=https://tradecatalog.app/mcp` al autorizar o solicitar tokens. El registro, el consentimiento de OAuth y el acceso al espacio de trabajo utilizan la misma cuenta. Los complementos de ChatGPT se conectan a `/mcp`; consulte [registro y facturación](/docs/mcp#sign-up-and-pay-with-an-agent).

## Ámbito

Solicite `tradecatalog:read` para búsquedas. Solicite `tradecatalog:read tradecatalog:write` para preparar cambios también. La página de consentimiento describe el acceso solicitado. Los permisos existentes de solo lectura nunca obtienen acceso de escritura automáticamente. Los roles y las restricciones de facturación se vuelven a comprobar al proponer y aprobar acciones. Las escrituras consecuentes requieren una confirmación única en el cartón de chat, o en la página de revisión iniciada sesión para clientes sin cartones; consulte [Herramientas](/docs/mcp/tools).

## Flujo de descubrimiento

1. El cliente llama a `https://tradecatalog.app/mcp` sin un token.
2. El servidor responde con `401 Unauthorized` con un encabezado `WWW-Authenticate: Bearer` que apunta a los metadatos del recurso protegido.
3. El cliente lee los metadatos del recurso protegido para encontrar el servidor de autorización, `https://tradecatalog.app`.
4. El cliente lee los metadatos del servidor de autorización para los puntos de conexión anteriores.

```bash
curl https://tradecatalog.app/.well-known/oauth-protected-resource/mcp
```

```json
{
  "resource": "https://tradecatalog.app/mcp",
  "authorization_servers": ["https://tradecatalog.app"],
  "scopes_supported": ["tradecatalog:read", "tradecatalog:write"],
  "bearer_methods_supported": ["header"],
  "resource_name": "TradeCatalog MCP server"
}
```

## Registrar un cliente

Use cualquiera de las siguientes opciones:

- **Documentos de metadatos de ID de cliente** (preferido): use una URL `https` que controle como su `client_id`, sirviendo los metadatos de su cliente. Las personas que aprueben la conexión ven la URL de host como el editor.
- **Registro dinámico de cliente** (RFC 7591) en `/oauth/register`.

Cualquiera puede registrar un cliente bajo cualquier nombre, por lo que la página de aprobación muestra a las personas a dónde se envía la aprobación (el host de redirección) y, para ID de cliente de URL, el editor. El nombre solo se marca como no verificado.

## Autorización

Use el flujo de código de autorización con **PKCE (`S256`)**:

1. Envíe el navegador de la persona a `/oauth/authorize` con `response_type=code`, `client_id`, `redirect_uri`, `code_challenge`, `code_challenge_method=S256`, `state` y `scope=tradecatalog:read`.
2. Si no están iniciadas sesión, TradeCatalog las pide que se inicien sesión con un código por correo electrónico (o Google o Microsoft, donde esté habilitado), luego las devuelve.
3. Ven qué aplicación está pidiendo, la cuenta con la que están iniciadas sesión y lo que puede hacer, luego eligen **Permitir** o **Denegar**.
4. **Permitir** redirige a su `redirect_uri` con `code` y `state`. **Denegar** redirige con `error=access_denied`.
5. Intercambie el código en `/oauth/token` con su `code_verifier`. Recibe un token de acceso y un token de actualización.

Envíe el token de acceso en cada solicitud MCP:

```http
POST /mcp HTTP/1.1
Host: tradecatalog.app
Authorization: Bearer <access token>
Content-Type: application/json
Accept: application/json, text/event-stream
```

Los tokens de acceso tienen una vida útil corta. Use el token de actualización en `/oauth/token` para obtener uno nuevo.

## ¿Quién puede aprobar

- Cualquier usuario de TradeCatalog iniciado sesión: personal de proveedores o compradores.
- No visitantes de demostración (sesiones de invitado). Se les envía a iniciar sesión correctamente.
- No hay forma de crear una cuenta a través de este flujo, y no hay acceso solo de máquina (credenciales de cliente). Para acceso de servidor a servidor, utilice la [API REST](/docs/api) con una clave de API.

La concesión lleva solo la identidad de la persona. Cada llamada a la herramienta vuelve a comprobar lo que pueden ver, por lo que si pierden el acceso a un espacio de trabajo, la aplicación de IA también lo hace.

## Transporte

El servidor es **sin estado** HTTP transmisible. No emite identificadores de sesión; cada solicitud es independiente, y responde con JSON en lugar de un flujo de eventos.

## Revocar

Las personas ven y desconectan aplicaciones aprobadas en `/oauth/connections`. Desconectar revoca inmediatamente la concesión y sus tokens.

## También publicado

- [`/auth.md`](/auth.md): un resumen breve de esta página para agentes.
- [`/.well-known/mcp/server-card.json`](/.well-known/mcp/server-card.json): la tarjeta del servidor MCP con la lista de herramientas.
