Restons en contact

Social

IA· 12 min de lecture

MCP 2026-07-28 : ce qui change pour brancher des agents IA sur votre SI

Spécification MCP 2026-07-28 : cœur sans état, requêtes multi-allers-retours, OAuth durci. Ce qui change pour connecter vos agents IA à votre SI.

Publiée le 28 juillet 2026, la spécification MCP 2026-07-28 est la révision la plus structurante du Model Context Protocol depuis sa création : protocole sans état, requêtes multi-allers-retours, en-têtes de routage, autorisation durcie. Voici ce qui change concrètement pour connecter des agents IA à votre ERP, votre CRM ou votre ticketing, avec une architecture type, les règles de sécurité et une checklist de migration.

MCP en 2026 : le rappel express

Le Model Context Protocol standardise la façon dont une application d’IA (l’hôte : IDE, assistant, agent) se connecte à des serveurs qui exposent des outils, des ressources et des prompts. Vous écrivez un serveur MCP pour votre CRM, et tout client compatible peut l’utiliser.

Les 7 changements de la spécification MCP 2026-07-28

SujetJusqu’à 2025-11-25Depuis 2026-07-28Impact pour votre SI
ÉtatPoignée de main initialize, en-tête Mcp-Session-IdAucune session ; version et capacités dans _meta de chaque requêteRépartition de charge simple, pas de stockage de session partagé
Interactions serveur → clientRequêtes initiées par le serveur sur flux SSEMulti Round-Trip Requests (input_required)Plus de connexion longue à maintenir pour un appel d’outil
RoutageIl fallait lire le corps JSONEn-têtes Mcp-Method et Mcp-Name obligatoiresPasserelles, WAF et limiteurs de débit plus simples
ListesAucune indication de fraîcheurttlMs et cacheScope obligatoiresMoins d’appels, cache maîtrisé
AutorisationValidation de l’émetteur non exigéeRFC 9207, identifiants liés à l’émetteur, CIMDMoins d’attaques par confusion de serveurs

1. Un cœur sans état

C’est le changement majeur (SEP-2575 et SEP-2567). La poignée de main initialize et l’en-tête Mcp-Session-Id disparaissent. Chaque requête transporte dans _meta sa version de protocole et les capacités du client. Une nouvelle méthode server/discover, obligatoire côté serveur, permet au client de connaître à l’avance les versions et capacités supportées.

Conséquence : une requête peut atterrir sur n’importe quelle instance derrière un répartiteur de charge. Si un outil a besoin d’un état entre deux appels (panier, transaction), le serveur crée un identifiant explicite (un « handle ») que le modèle repasse en argument.

2. Les Multi Round-Trip Requests

Avant, un serveur qui avait besoin d’une information en cours d’appel envoyait lui-même une requête au client sur un flux ouvert. Désormais (SEP-2322), il répond avec un résultat intermédiaire, et le client rejoue la requête d’origine avec les réponses :

json
{
  "jsonrpc": "2.0",
  "id": 7,
  "result": {
    "resultType": "input_required",
    "inputRequests": {
      "confirmation": {
        "method": "elicitation/create",
        "params": {
          "mode": "form",
          "message": "Créer l'avoir de 1 240 € pour le client C-0042 ?",
          "requestedSchema": {
            "type": "object",
            "properties": { "confirme": { "type": "boolean" } },
            "required": ["confirme"]
          }
        }
      }
    },
    "requestState": "eyJhdm9pciI6IkMtMDA0MiJ9"
  }
}

Le client pose la question à l’utilisateur, puis renvoie le même tools/call (nouvel id) avec inputResponses et requestState. Pour un SI, c’est une excellente nouvelle : la confirmation humaine d’une action sensible devient un mécanisme standard du protocole.

3. Le routage par en-têtes

Sur le transport Streamable HTTP, chaque POST porte Mcp-Method et, pour tools/call, resources/read et prompts/get, Mcp-Name (nom de l’outil, du prompt ou URI de la ressource) (SEP-2243). Un paramètre d’outil peut être recopié dans un en-tête Mcp-Param-{nom} via x-mcp-header, jamais pour des données sensibles. Le serveur doit rejeter toute requête dont les en-têtes ne correspondent pas au corps (HeaderMismatch, code -32020) : une passerelle qui route sur l’en-tête ne peut pas être trompée par un corps différent.

4. Des résultats de liste cachables

Les réponses à tools/list, prompts/list, resources/list, resources/read et resources/templates/list incluent désormais ttlMs (fraîcheur en millisecondes) et cacheScope (public ou private) (SEP-2549), et les outils devraient être renvoyés dans un ordre déterministe, ce qui améliore aussi le cache de prompt des modèles. Si la liste d’outils dépend des droits de l’appelant, c’est private.

5. Une autorisation durcie

  • RFC 9207 (SEP-2468) : les serveurs d’autorisation devraient renvoyer le paramètre iss, et le client doit le valider avant d’échanger le code. Cela bloque les attaques par confusion de serveurs d’autorisation (« mix-up »), que PKCE seul n’empêche pas.
  • application_type obligatoire lors de l’enregistrement dynamique (SEP-837), pour les applications de bureau et CLI.
  • Identifiants liés à l’émetteur (SEP-2352) : jamais réutilisés auprès d’un autre serveur d’autorisation.
  • Dynamic Client Registration dépréciée au profit des Client ID Metadata Documents (CIMD), tout en restant disponible pour la compatibilité.

6. Un cadre d’extensions

Les capacités client et serveur gagnent un champ extensions. Les tâches longues quittent le cœur pour l’extension io.modelcontextprotocol/tasks (interrogation via tasks/get, nouvelle méthode tasks/update, SEP-2663). Selon l’annonce officielle, le cadre couvre aussi MCP Apps et l’Enterprise Managed Authorization. Les notifications de changement passent par un unique flux subscriptions/listen, auquel le client s’abonne par type de notification.

7. Dépréciations et SDK

Roots, Sampling et Logging sont dépréciés (SEP-2577) mais restent fonctionnels au moins douze mois : passez les répertoires en paramètres d’outil, appelez directement l’API du modèle, journalisez via stderr ou OpenTelemetry. Le transport HTTP+SSE est déprécié et la reprise des flux SSE (Last-Event-ID) supprimée : un flux coupé impose de relancer la requête.

Les quatre SDK de Tier 1 (TypeScript, Python, Go, C#) implémentaient la révision dès sa publication, Rust en bêta. Le tableau officiel des SDK classe aujourd’hui Rust en Tier 1 (100 % de réussite aux tests de conformité exigés), Java et Ruby en Tier 2, PHP, Kotlin et Swift en Tier 3. Pour une stack PHP, c’est à arbitrer : SDK de Tier 3, ou serveur MCP en TypeScript ou Go devant votre application Symfony ou Laravel.

Brancher des agents sur votre SI : l’architecture type

Voici l’architecture que nous recommandons pour exposer un SI à des agents autonomes :

  • Hôte d’agent (IDE, assistant interne, agent de tickets) : modèle, outils autorisés, confirmations utilisateur.
  • Passerelle MCP : point d’entrée unique, OAuth, filtrage par Mcp-Method / Mcp-Name, limitation de débit, journal d’audit.
  • Serveurs MCP par domaine : ERP, CRM, ticketing, documentation.
  • Fournisseur d’identité : jetons à portée minimale, émis pour chaque serveur MCP.
  • Systèmes métier, via leurs API ou une réplique en lecture, jamais en écriture directe sur la base de production.

Un serveur MCP par domaine métier

SystèmeOutils exposés (exemples)Mode par défautÉcriture possible ?
ERPcommande_consulter, stock_disponibleLectureNon, ou via workflow métier validé
CRMclient_rechercher, historique_contactsLectureCréation de note, avec confirmation MRTR
Ticketing (Redmine, Jira)ticket_lire, tickets_similairesLectureCommentaire interne après validation humaine
Base de donnéesrequete_lecture sur schéma dédiéLecture seule stricteJamais
Documentationdoc_rechercherLectureNon

Découper par domaine limite l’impact d’un serveur compromis, simplifie les portées OAuth et rend l’audit lisible. Évitez le serveur « fourre-tout » : le modèle choisit aussi moins bien parmi trop d’outils.

Exemple : exposer une base Postgres en lecture seule

La barrière doit être dans la base, pas dans le prompt. Sur une réplique :

sql
CREATE ROLE mcp_lecture LOGIN;  -- mot de passe injecté depuis le coffre-fort
ALTER ROLE mcp_lecture SET default_transaction_read_only = on;
ALTER ROLE mcp_lecture SET statement_timeout = '5s';
GRANT CONNECT ON DATABASE crm TO mcp_lecture;
GRANT USAGE ON SCHEMA reporting TO mcp_lecture;
GRANT SELECT ON ALL TABLES IN SCHEMA reporting TO mcp_lecture;

default_transaction_read_only peut être modifié par la session : c’est une seconde barrière. La vraie protection, ce sont les droits limités à SELECT sur un schéma de vues qui masquent les colonnes sensibles.

Sécurité : les règles non négociables

Lecture seule par défaut et liste blanche

Lors de notre expérimentation EXP-01 du iones lab, une équipe de 8 développeurs a utilisé 5 serveurs MCP pendant 8 semaines : Redmine en lecture, Postgres en lecture seule, Playwright, documentation projet et Git. Un serveur MCP en écriture sur Redmine a été abandonné après 2 tickets modifiés par erreur. Depuis, notre règle est simple : lecture seule par défaut, écriture uniquement sur une liste blanche explicite.

Exemple de politique appliquée par la passerelle (format illustratif, à adapter à votre outil) :

yaml
serveurs:
  crm:
    outils_autorises: [client_rechercher, historique_contacts, note_creer]
    confirmation_humaine: [note_creer]      # via MRTR / confirmation de l'hôte
  ticketing:
    outils_autorises: [ticket_lire, tickets_similaires]
  base_reporting:
    outils_autorises: [requete_lecture]
par_defaut: refuser                         # tout outil non listé est bloqué
epinglage_descriptions: sha256              # alerte si une description d'outil change

La spécification va dans ce sens : pour les outils, il devrait toujours y avoir un humain dans la boucle capable de refuser un appel, et les annotations d’outil (comme readOnlyHint ou destructiveHint) doivent être considérées comme non fiables, sauf si elles viennent de serveurs de confiance.

OAuth : ce que la spécification impose

Les bonnes pratiques de sécurité MCP sont explicites :

  • Pas de « token passthrough » : un serveur MCP n’accepte que des jetons émis pour lui et ne relaie jamais ceux du client vers une API en aval.
  • Portées minimales : lecture d’abord, élévation à la demande, jamais * ou admin d’emblée.
  • Handles d’état aléatoires, liés côté serveur à l’utilisateur authentifié : posséder un handle ne vaut pas authentification.
  • Serveurs locaux : commande exacte affichée avant exécution, bac à sable, écoute sur localhost uniquement.

Prompt injection et tool poisoning

Un agent lit des contenus qu’il ne contrôle pas : tickets, e-mails, pages web. Une instruction cachée dans un ticket peut tenter de détourner l’agent : c’est la prompt injection, toujours en tête (LLM01) du Top 10 OWASP 2026 pour les applications LLM. Variante propre à MCP, le tool poisoning, décrit par Invariant Labs le 1er avril 2025 : des instructions malveillantes sont cachées dans la description d’un outil, invisible pour l’utilisateur mais lue par le modèle.

Contre-mesures :

  • serveurs dont vous maîtrisez le code ou l’éditeur, uniquement ;
  • épinglage des descriptions d’outils (empreinte), alerte en cas de changement ;
  • contenu renvoyé par un outil traité comme une donnée, jamais comme une instruction ;
  • séparation des flux : un agent qui lit des e-mails externes n’écrit pas dans l’ERP ;
  • blocage côté passerelle de toute action non listée.

Dans notre expérimentation EXP-06 sur les agents autonomes, la liste blanche d’actions et le blocage de toute commande touchant la production ont intercepté 7 actions risquées, dont 2 suppressions de données de test. Ces garde-fous se transposent tels quels à des outils MCP.

Déploiement cloud-native : ce que le sans-état simplifie

Avant 2026-07-28, un serveur MCP HTTP avec sessions imposait l’affinité de session ou un stockage partagé. Désormais :

  • Mise à l’échelle horizontale : des réplicas identiques derrière un répartiteur en round-robin, avec un autoscaling Kubernetes classique.
  • Déploiements sans coupure : aucune session à migrer ; un flux interrompu est simplement relancé.
  • Politiques réseau par en-tête, par exemple limiter les appels d’outils plus strictement que les lectures de liste :
nginx
map $http_mcp_method $mcp_cle_outils {
    default       "";
    "tools/call"  $binary_remote_addr;
}
limit_req_zone $mcp_cle_outils zone=mcp_outils:10m rate=5r/s;

server {
    location /mcp {
        limit_req zone=mcp_outils burst=10;
        proxy_buffering off;   # flux SSE
        proxy_pass http://serveurs_mcp;
    }
}
  • Observabilité : propagation du contexte de trace OpenTelemetry (traceparent) dans _meta, de l’agent jusqu’au système métier.

C’est le chantier que nous menons côté infrastructure, DevOps et sécurité web : conteneurs, Kubernetes (AWS, OVHcloud), supervision Grafana, secrets.

Migrer depuis 2025-11-25 : la checklist

  • [ ] Inventorier serveurs, clients, SDK et versions ; mettre à jour les SDK (changements cassants)
  • [ ] Supprimer toute dépendance à Mcp-Session-Id ; remplacer l’état implicite par des handles liés à l’utilisateur
  • [ ] Remplacer les requêtes initiées par le serveur par le schéma MRTR
  • [ ] Ajouter ttlMs et cacheScope aux listes ; ordonner les outils de façon déterministe
  • [ ] Valider iss, lier les identifiants à l’émetteur, prévoir CIMD
  • [ ] Router et filtrer sur Mcp-Method / Mcp-Name dans la passerelle
  • [ ] Remplacer Logging par OpenTelemetry et Sampling par un appel direct au modèle
  • [ ] Tester la compatibilité avec les clients anciens, revoir liste blanche et portées OAuth

Questions fréquentes

Qu’est-ce que le Model Context Protocol (MCP) ?
MCP est un protocole ouvert qui standardise la connexion entre une application d’IA et des serveurs exposant des outils, des ressources et des prompts. Créé par Anthropic et publié le 25 novembre 2024, il est gouverné depuis décembre 2025 par l’Agentic AI Foundation, hébergée par la Linux Foundation. Un même serveur MCP fonctionne avec tous les clients compatibles.
Qu’est-ce qui change avec la spécification MCP 2026-07-28 ?
Le protocole devient sans état : plus de poignée de main ni de session, chaque requête porte sa version et ses capacités. Les requêtes initiées par le serveur sont remplacées par les Multi Round-Trip Requests. S’ajoutent des en-têtes de routage obligatoires, des listes cachables, une autorisation durcie (RFC 9207), un cadre d’extensions et une politique de dépréciation de douze mois minimum.
Faut-il migrer tout de suite ses serveurs MCP ?
Planifiez la migration sans précipitation. Les fonctions dépréciées restent utilisables au moins douze mois et les clients peuvent détecter la version d’un serveur. En revanche, les changements sont cassants : mettez à jour les SDK, retirez la dépendance aux sessions et adoptez les Multi Round-Trip Requests avant d’exposer de nouveaux systèmes métier.
Un agent IA peut-il écrire dans mon ERP via MCP ?
Techniquement oui, mais nous le déconseillons par défaut. Commencez en lecture seule, puis ouvrez l’écriture outil par outil, sur liste blanche, avec une confirmation humaine via les Multi Round-Trip Requests et un journal d’audit. Lors de notre expérimentation EXP-01, un serveur MCP en écriture sur Redmine a été abandonné après deux tickets modifiés par erreur.
Qu’est-ce que le tool poisoning ?
C’est une attaque où des instructions malveillantes sont cachées dans la description d’un outil MCP : l’utilisateur ne les voit pas, mais le modèle les lit et peut être amené à exfiltrer des données ou à détourner d’autres outils. Parades : serveurs de confiance uniquement, épinglage des descriptions, liste blanche d’outils et séparation des flux de données.
Existe-t-il un SDK MCP pour PHP ?
Oui, un SDK PHP officiel existe, mais il est classé en Tier 3 (expérimental ou partiel) dans le tableau officiel des SDK. Pour un serveur MCP en production devant une application Symfony ou Laravel, on peut aussi écrire le serveur avec un SDK de Tier 1 (TypeScript, Python, Go, C# ou Rust) qui appelle les API de l’application.

MCP 2026-07-28 : le bon moment pour industrialiser vos connecteurs d’agents

La spécification 2026-07-28 fait de MCP un protocole d’infrastructure : sans état, routable, cachable, avec une autorisation alignée sur les bonnes pratiques OAuth. Le périmètre, la lecture seule, la liste blanche et la supervision restent votre responsabilité.

Vous voulez connecter des agents à votre ERP, votre CRM ou votre ticketing sans ouvrir de brèche ? Nous concevons et déployons des serveurs MCP et des agents autonomes avec leurs garde-fous, en direct ou en marque blanche pour les agences. Contactez-nous : réponse sous 48 à 72 h, sous NDA.

Sources

  1. The 2026-07-28 Specificationblog officiel MCP, 28 juillet 2026
  2. Spécification 2026-07-28 : <a href="https://modelcontextprotocol.io/specification/2026-07-28/changelog">Key Changes</a>, <a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http">Streamable HTTP</a>, <a href="https://modelcontextprotocol.io/specification/2026-07-28/server/tools">Tools</a>, <a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/security_best_practices">Security Best Practices</a> — modelcontextprotocol.io
  3. SDKsmodelcontextprotocol.io (consulté le 19 septembre 2026)
  4. Introducing the Model Context ProtocolAnthropic, 25 novembre 2024
  5. MCP joins the Agentic AI Foundationblog officiel MCP, 9 décembre 2025
  6. Formation of the Agentic AI FoundationLinux Foundation, décembre 2025
  7. MCP Security Notification: Tool Poisoning AttacksInvariant Labs, 1er avril 2025
  8. RFC 9207IETF
  9. OWASP GenAI LLM Top 10 2026OWASP, 3 août 2026
  10. EXP-01 — Skills &amp; MCP</a> et <a href="/iones-lab/jarvis-openclaw-agents-autonomes/">EXP-06 — Agents Jarvis &amp; OpenClawiones lab

Démarrer un projet

Prêt à passer à l’action ?

Expliquez-nous votre besoin — nous revenons rapidement avec une lecture technique et un plan d’attaque.

  • Réponse sous 48–72 h
  • Échange sans engagement
  • Confidentialité NDA