# OAuth pour les clients MCP

> Comment les clients MCP découvrent, enregistrent et obtiennent des jetons pour le serveur TradeCatalog MCP avec OAuth 2.1.

Cette page est destinée aux personnes qui construisent un client MCP ou déboguent une connexion. Si vous souhaitez uniquement connecter Claude ou ChatGPT, consultez [Connectez une application AI](/docs/mcp).

TradeCatalog suit la [spécification d'autorisation MCP](https://modelcontextprotocol.io/specification/latest/basic/authorization) : OAuth 2.1 avec PKCE, métadonnées des ressources protégées (RFC 9728) et métadonnées du serveur d'autorisation (RFC 8414).

## Points de terminaison

| Quel                                         | URL                                                                 |
| -------------------------------------------- | ------------------------------------------------------------------- |
| Serveur MCP (ressource protégée)             | `https://tradecatalog.app/mcp`                                      |
| Métadonnées de la ressource protégée         | `https://tradecatalog.app/.well-known/oauth-protected-resource/mcp` |
| Métadonnées du serveur d'autorisation        | `https://tradecatalog.app/.well-known/oauth-authorization-server`   |
| Point de terminaison d'autorisation          | `https://tradecatalog.app/oauth/authorize`                          |
| Point de terminaison de jeton                | `https://tradecatalog.app/oauth/token`                              |
| Enregistrement dynamique du client           | `https://tradecatalog.app/oauth/register`                           |
| Applications connectées (pour les personnes) | `https://tradecatalog.app/oauth/connections`                        |

Les métadonnées de la ressource protégée se trouvent à l'adresse spécifique au chemin pour `/mcp`, comme décrit dans le RFC 9728 pour une ressource avec un chemin. Il n'y a délibérément rien à `/.well-known/oauth-protected-resource` seul.

La connexion `/mcp/account` facultative ajoute un transfert sécurisé exclusif à l'administrateur pour les hôtes d'agents qui autorisent la facturation par abonnement logiciel. Il s'agit d'une ressource protégée `/mcp` : utilisez les métadonnées ci-dessus et `resource=https://tradecatalog.app/mcp` lors de l'autorisation ou de la demande de jetons. L'inscription, la consentement OAuth et l'accès aux espaces de travail utilisent le même compte. Les plugins ChatGPT se connectent à `/mcp` ; voir [inscription et facturation](/docs/mcp#sign-up-and-pay-with-an-agent).

## Portée

Demandez `tradecatalog:read` pour les recherches. Demandez `tradecatalog:read tradecatalog:write` pour préparer également des modifications. La page de consentement décrit l'accès demandé. Les autorisations en lecture seule existantes ne gagnent jamais automatiquement un accès en écriture. Les rôles et les restrictions de facturation sont réexaminés lors de la proposition et de l'approbation des actions. Les écritures conséquentes nécessitent une confirmation unique dans la carte de discussion, ou la page de revue connectée pour les clients sans cartes ; voir [Outils](/docs/mcp/tools).

## Flux de découverte

1. Le client appelle `https://tradecatalog.app/mcp` sans jeton.
2. Le serveur répond avec `401 Unauthorized` avec un en-tête `WWW-Authenticate: Bearer` pointant vers les métadonnées de la ressource protégée.
3. Le client lit les métadonnées de la ressource protégée pour trouver le serveur d'autorisation, `https://tradecatalog.app`.
4. Le client lit les métadonnées du serveur d'autorisation pour les points de terminaison ci-dessus.

```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"
}
```

## Enregistrement d'un client

Utilisez l'une des deux options :

- **Documents de métadonnées d'identifiant client** (recommandé) : utilisez une URL `https` que vous contrôlez comme votre `client_id`, fournissant les métadonnées de votre client. Les personnes approuvant la connexion voient l'hôte de cette URL comme l'éditeur.
- **Enregistrement dynamique du client** (RFC 7591) à `/oauth/register`.

Tout le monde peut enregistrer un client sous n'importe quel nom, donc la page d'approbation montre aux personnes où l'approbation est envoyée (l'hôte de redirection) et, pour les identifiants de client URL, l'éditeur. Le nom seul est marqué comme non vérifié.

## Autorisation

Utilisez le flux de code d'autorisation avec **PKCE (`S256`)** :

1. Envoyez le navigateur de la personne à `/oauth/authorize` avec `response_type=code`, `client_id`, `redirect_uri`, `code_challenge`, `code_challenge_method=S256`, `state` et `scope=tradecatalog:read`.
2. Si elle n'est pas connectée, TradeCatalog lui demande de s'inscrire avec un code envoyé par courriel (ou Google ou Microsoft, si activé), puis la redirige.
3. Elle voit quelle application demande, le compte avec lequel elle est connectée et ce qu'elle peut faire, puis choisit **Autoriser** ou **Refuser**.
4. **Autoriser** redirige vers votre `redirect_uri` avec `code` et `state`. **Refuser** redirige avec `error=access_denied`.
5. Échangez le code à `/oauth/token` avec votre `code_verifier`. Vous obtenez un jeton d'accès et un jeton de rafraîchissement.

Envoyez le jeton d'accès sur chaque demande MCP :

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

Les jetons d'accès sont à courte durée. Utilisez le jeton de rafraîchissement à `/oauth/token` pour en obtenir un nouveau.

## Qui peut approuver

- Tout utilisateur connecté à TradeCatalog : personnel fournisseur ou acheteurs.
- Pas les visiteurs de démonstration (sessions invitées). Ils sont redirigés vers une connexion correcte.
- Il n’existe aucun moyen de créer un compte via ce flux, et pas d'accès uniquement machine (informations d'identification du client). Pour un accès serveur à serveur, utilisez l'[API REST](/docs/api) avec une clé API.

Le droit porte uniquement sur l'identité de la personne. Chaque appel d'outil vérifie à nouveau ce qu'elle peut voir, donc si elle perd l'accès à un espace de travail, l'application IA y perd aussi.

## Transports

Le serveur est **HTTP streamable sans état**. Il n'émet pas d'identifiants de session ; chaque demande est indépendante, et il répond avec du JSON plutôt qu'un flux d'événements.

## Révocation

Les personnes voient et déconnectent les applications approuvées à `/oauth/connections`. La déconnexion révoque immédiatement le droit et ses jetons.

## Publications supplémentaires

- [`/auth.md`](/auth.md) : un résumé court de cette page pour les agents.
- [`/.well-known/mcp/server-card.json`](/.well-known/mcp/server-card.json) : la carte du serveur MCP avec la liste des outils.
