Aller au contenu
Menu documentation

MCP

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.

TradeCatalog suit la spécification d'autorisation MCP : 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 terminaisonLien vers cette section#

QuelURL
Serveur MCP (ressource protégée)https://tradecatalog.app/mcp
Métadonnées de la ressource protégéehttps://tradecatalog.app/.well-known/oauth-protected-resource/mcp
Métadonnées du serveur d'autorisationhttps://tradecatalog.app/.well-known/oauth-authorization-server
Point de terminaison d'autorisationhttps://tradecatalog.app/oauth/authorize
Point de terminaison de jetonhttps://tradecatalog.app/oauth/token
Enregistrement dynamique du clienthttps://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.

PortéeLien vers cette section#

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.

Flux de découverteLien vers cette section#

  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 clientLien vers cette section#

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é.

AutorisationLien vers cette section#

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 approuverLien vers cette section#

  • 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 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.

TransportsLien vers cette section#

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évocationLien vers cette section#

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émentairesLien vers cette section#