Skip to main content
Les échecs remontent à deux niveaux. Les problèmes d’authentification, d’origine et de limite de débit sont rejetés avant MCP, sous forme de réponses HTTP classiques. Tout ce qui se produit à l’intérieur d’un appel d’outil revient sous forme de résultat d’outil MCP avec isError: true.

Niveau HTTP

Ces réponses sont en dehors de l’enveloppe MCP ; une bibliothèque client MCP les remonte généralement comme des erreurs de transport.

Erreurs d’outil

Un appel d’outil qui échoue est un succès JSON-RPC normal dont le résultat porte isError: true, un unique bloc texte et pas de structuredContent :
Parse le texte en JSON pour obtenir : Rien d’autre issu de l’échec sous-jacent n’est exposé : ni traces de pile, ni SQL, ni réponses upstream, ni identifiants internes. Chaque requête est journalisée côté serveur avec le x-request-id renvoyé dans la réponse HTTP ; cite-le quand tu contactes le support.

Codes

Reprise

Les lectures (readOnlyHint: true) peuvent être réessayées sans risque après TIMEOUT, UPSTREAM_UNAVAILABLE ou INTERNAL_ERROR, avec backoff. Les écritures, c’est différent. create-discount-code et create-payment-link sont marqués idempotentHint: false et n’ont pas de clé d’idempotence. Un TIMEOUT est renvoyé lorsque le budget de 30 secondes est épuisé, ce qui peut se produire après que la ligne a été committée : le code ou le lien peut déjà exister. Avant de réessayer une écriture :
  1. Appelle list-discount-codes et cherche le code, ou list-payment-links filtré par établissement et cherche le titre/la référence.
  2. N’appelle l’écriture à nouveau que si elle est absente.
Ne réessaie jamais les écritures automatiquement. C’est pour cette raison que retryable est false sur chaque code aujourd’hui : le serveur ne sait pas si ton écriture a abouti, donc il ne te dit pas de réessayer.

Erreurs de validation venant de ton client

Comme les erreurs ne portent pas de structuredContent, les clients conformes à la spec (dont le SDK TypeScript officiel) sautent la validation d’output-schema sur ces réponses et remontent l’enveloppe. Si ton client rapporte plutôt une erreur -32602 ou « structured content does not match schema », c’est qu’il valide le texte contre l’outputSchema de l’outil ; lis directement le bloc texte.