veilletech.fr
11 oct. Feed du jour
#04 MCP Article

MCP : trois réponses à un outil qui n'existe pas

Une erreur qui arrive en succès, c'est l'erreur qu'on ne rattrape pas.

Un développeur a demandé un outil inexistant à onze serveurs MCP et relevé trois formes de réponse : erreur JSON-RPC -32602, résultat avec isError à vrai, et succès HTTP 200 dont le texte porte l'erreur, que seul un client prudent détecte. Six cibles répondent -32602, comme l'exemple de la spécification. Mesure d'un auteur isolé, sur des serveurs non indépendants : un relevé, pas une norme.

4 min de lectureavancévidéo 1:15
Partager
Sommaire7 sections
  1. Ce qui se passe
  2. Les trois réponses
  3. Ce que onze cibles ont répondu
  4. Un détail de la révision du 28 juillet
  5. Les limites, écrites par l'auteur
  6. Comment s'y prendre
  7. À retenir

Ce qui se passe

L'auteur de mcp-era-probe, une sonde en lecture seule qui détecte la version du protocole MCP parlée par un serveur, a ajouté une vérification dans sa version 0.8 : que répond un serveur quand un client appelle un outil qui n'existe pas ? La sonde envoie un tools/call sur un nom impossible, era-probe-nonexistent-tool, et ne touche jamais à un vrai outil.

Les trois réponses

  1. Erreur de protocole. Une erreur JSON-RPC standard, en pratique -32602 « Unknown tool ». C'est la forme que montre l'exemple de gestion d'erreurs de la spécification.
  2. Erreur d'exécution. Une réponse réussie dont le résultat porte isError: true. La spécification place les échecs d'exécution ainsi, mais une faute de frappe sur le nom n'est pas un échec d'exécution : c'est une requête malformée.
  3. Succès qui porte l'erreur en texte. HTTP 200, isError absent, et un bloc de contenu qui dit « Unknown tool: X ». Un client qui teste isError puis lit le contenu prend le message pour la sortie de l'outil.

Ce que onze cibles ont répondu

Serveur Ère Réponse Code
goji.agency moderne, strict erreur de protocole -32602
projectory.ae moderne, strict erreur de protocole -32602
botinfo.ai moderne, strict erreur de protocole -32602
bidclub.ai moderne, strict erreur de protocole -32602
bizmoon.ai moderne, strict erreur de protocole -32602
context7 (npm, stdio) moderne, strict erreur de protocole -32602
getle.ad moderne, double ère erreur de protocole 401 (appels protégés, liste publique)
askmiles.ai moderne, souple erreur d'exécution isError: true
mcp.aivonic.ai ancien erreur d'exécution (en session) isError: true
mcp.autonomad.ai ancien erreur d'exécution (en session) isError: true
agentberg.ai ancien succès + texte d'erreur (en session) aucun, isError absent

Les trois serveurs anciens ne répondent pas sur la route moderne sans état : ils exigent une session. Avec un second nom impossible, les six serveurs retestés donnent le même classement. Seul goji.agency a divergé au premier passage, parce qu'il limitait les appels rapprochés ; un second essai espacé a concordé.

Un détail de la révision du 28 juillet

D'après l'auteur, la révision 2026-07-28 du transport HTTP exige que l'en-tête Mcp-Name d'un tools/call reprenne le nom de l'outil du corps. Sa sonde envoyait son propre nom client : les cinq serveurs stricts ont refusé avec l'erreur -32020 (en-têtes et corps en désaccord), un serveur souple l'a acceptée en silence.

Les limites, écrites par l'auteur

Comment s'y prendre

Côté client, dans cet ordre de confiance :

  1. l'erreur de protocole d'abord (requête malformée) ;
  2. puis isError (échec d'exécution) ;
  3. seulement ensuite, lire le contenu.

Pour fermer le troisième cas, qu'aucun code d'erreur ne signale, vérifier le nom de l'outil contre la liste de tools/list avant l'appel : c'est un ajout de la rédaction, pas de l'auteur. Côté serveur, répondre à un outil inconnu par une erreur de protocole suffit à coller à l'exemple de la spécification.

Source : I asked MCP servers for a tool that doesn't exist. I got three kinds of answer., DEV Community, 11 octobre 2026.