Spécification du protocole
Spec MCP 2026-07-28 : les sept changements, et ce qu'il faut faire
- Publiée le
- 2026-07-28
- Révision précédente
- 2025-11-25
Cette page est un point de repère technique, pas une page de vente. Elle liste ce qui change entre la révision 2025-11-25 et la révision 2026-07-28, ce que ça casse concrètement dans un serveur existant, et ce qu'il faut reprendre. Les numéros de SEP sont là pour que vous puissiez tout vérifier à la source.
Les sept changements en un coup d'œil
- Charge Lourde
Le serveur ne garde plus rien entre deux appels
Votre serveur ne peut plus retenir qui parle entre deux appels.
- Charge Moyenne
Deux informations deviennent obligatoires dans chaque requête
Deux informations deviennent obligatoires sur chaque requête.
- Charge Lourde
Le serveur ne peut plus parler quand on ne lui demande rien
Le serveur ne peut plus envoyer de message en dehors d'une requête.
- Charge Légère
Un code d'erreur change de numéro
Un code d'erreur change de numéro.
- Charge Légère
Les tâches longues sortent du socle
Les tâches longues deviennent une extension séparée.
- Charge Moyenne
L'authentification devient plus stricte
L'authentification exige plus de contrôles côté serveur.
- Charge Moyenne
Quatre fonctions entrent en fin de vie
Quatre fonctions entrent en fin de vie, avec 12 mois devant elles.
Le détail, changement par changement
Le serveur ne garde plus rien entre deux appels
SEP-2575SEP-2567- Ce qui casse
- Aujourd'hui votre serveur ouvre une session au premier contact et s'en sert pour retenir qui parle et où il en est. Cette session disparaît.
- Ce qu'on fait
- Chaque outil devient autonome et reçoit tout ce dont il a besoin à chaque appel. C'est le poste le plus lourd de la migration, et le seul qui touche vraiment votre architecture.
Avant
const sessions = new Map<string, AuthContext>();// The handshake seeds everything that follows.onInitialize((req) => { const id = randomUUID(); sessions.set(id, authFrom(req)); return { sessionId: id };});tool("list_forms", (args, ctx) => listForms(sessions.get(ctx.sessionId)));Après
// No handshake, no session map, no Mcp-Session-Id.// Each handler resolves its own auth, and paging// state travels as an explicit argument.tool("list_forms", ({ cursor }, req) => listForms(authFrom(req), cursor));Deux informations deviennent obligatoires dans chaque requête
SEP-2243- Ce qui casse
- Le serveur doit les exiger, et refuser les requêtes qui se contredisent.
- Ce qu'on fait
- On vérifie toute la chaîne réseau. Un pare-feu ou un proxy qui supprime ces en-têtes casse le serveur en silence, et le symptôme ressemble à un bug côté client. C'est la panne la plus chère à diagnostiquer quand on ne l'a jamais vue.
Le serveur ne peut plus parler quand on ne lui demande rien
SEP-2260SEP-2322- Ce qui casse
- Les barres de progression et les notifications envoyées en continu pendant un traitement s'arrêtent.
- Ce qu'on fait
- L'outil pose sa question, rend la main, et le client revient avec la réponse. Vos parcours interactifs sont à repenser plutôt qu'à recopier.
Avant
// Pushing on the long-lived GET channel.tool("import_listings", async (args, ctx) => { for (const row of args.rows) { await ctx.notify({ progress: row.index }); } return { imported: args.rows.length };});Après
// The server cannot push outside an active// request. Ask, return, let the client come back.tool("import_listings", (args) => { if (!args.confirmed) { return InputRequiredResult({ prompt: "Import 412 listings?", }); } return { imported: args.rows.length };});// The client replies with inputResponses.Un code d'erreur change de numéro
SEP-2164- Ce qui casse
- Ressource introuvable passe de -32002 à -32602.
- Ce qu'on fait
- On remonte tous les tests qui comparent ce numéro en dur. C'est la ligne la plus discrète de la mise à jour, et celle qui casse le plus silencieusement vos tests et vos clients maison.
Avant
if (!form) { throw new McpError(-32002, "Form not found");}Après
if (!form) { throw new McpError(-32602, "Form not found");}Les tâches longues sortent du socle
SEP-2663- Ce qui casse
- Tasks devient une extension à part, avec ses propres règles.
- Ce qu'on fait
- On rebranche sur l'extension, ou on retire la dépendance. Beaucoup de serveurs déclarent Tasks sans jamais s'en servir, et c'est l'occasion de s'en apercevoir.
L'authentification devient plus stricte
RFC 9207RFC 9728- Ce qui casse
- Le serveur doit contrôler davantage de choses sur les jetons qu'il reçoit, et publier ses informations de connexion au format exact attendu.
- Ce qu'on fait
- On reprend la configuration OAuth de bout en bout. L'ancienne façon d'enregistrer les clients est dépréciée : elle fonctionne encore, elle partira.
Quatre fonctions entrent en fin de vie
SEP-2577SEP-2596- Ce qui casse
- Roots, Sampling, Logging et l'ancien transport SSE sont dépréciés.
- Ce qu'on fait
- Chacune a un remplaçant simple : des paramètres d'outil, un appel direct au modèle, des logs classiques, le nouveau transport. Rien d'insurmontable, mais quatre horloges qui tournent en même temps.
Ce qui ne casse pas
Aucun serveur ne s'est arrêté le 28 juillet 2026. Une date de publication n'est pas un interrupteur, et un serveur écrit pour la révision 2025-11-25 continue de répondre normalement aujourd'hui. La politique du protocole garantit au moins 12 mois avant tout retrait effectif, donc rien de ce qui est déprécié ici ne peut disparaître avant juillet 2027. Ce qui bouge avant cette date, ce sont les revues d'annuaire et les tests de compatibilité des clients, qui se calent déjà sur la nouvelle révision.
Vous voulez savoir ce que ça donne sur votre serveur ?
L'audit compare votre serveur ligne à ligne avec cette révision, classe ce qui casse par gravité et chiffre chaque poste. 950 €, deux jours, un document écrit. Si le diagnostic est que vous n'avez rien à migrer, vous gardez le document et je ne vous vends rien d'autre.
Faire auditer mon serveur MCP