FREN

Let’s keep in touch

Social

AI· 12 min read

MCP 2026-07-28: what changes when connecting AI agents to your information system

MCP 2026-07-28 specification: stateless core, multi round-trip requests, hardened OAuth. What changes when connecting your AI agents to your information system.

Published on 28 July 2026, the MCP 2026-07-28 specification is the most fundamental revision of the Model Context Protocol since its creation: a stateless protocol, multi round-trip requests, routing headers, hardened authorisation. Here is what changes in practice when connecting AI agents to your ERP, CRM or ticketing system, with a typical architecture, the security rules and a migration checklist.

MCP in 2026: the quick recap

The Model Context Protocol standardises the way an AI application (the host: IDE, assistant, agent) connects to servers that expose tools, resources and prompts. You write an MCP server for your CRM, and any compatible client can use it.

The 7 changes in the MCP 2026-07-28 specification

TopicUp to 2025-11-25Since 2026-07-28Impact on your information system
Stateinitialize handshake, Mcp-Session-Id headerNo session; version and capabilities in the _meta of each requestSimple load balancing, no shared session storage
Server → client interactionsServer-initiated requests over an SSE streamMulti Round-Trip Requests (input_required)No more long-lived connection to maintain for a tool call
RoutingThe JSON body had to be readMcp-Method and Mcp-Name headers mandatorySimpler gateways, WAFs and rate limiters
ListsNo indication of freshnessttlMs and cacheScope mandatoryFewer calls, controlled caching
AuthorisationIssuer validation not requiredRFC 9207, issuer-bound credentials, CIMDFewer server-confusion attacks

1. A stateless core

This is the major change (SEP-2575 and SEP-2567). The initialize handshake and the Mcp-Session-Id header disappear. Each request carries its protocol version and the client’s capabilities in _meta. A new server/discover method, mandatory on the server side, lets the client know in advance which versions and capabilities are supported.

Consequence: a request can land on any instance behind a load balancer. If a tool needs state between two calls (a basket, a transaction), the server creates an explicit identifier (a “handle”) that the model passes back as an argument.

2. Multi Round-Trip Requests

Previously, a server that needed information mid-call itself sent a request to the client over an open stream. Now (SEP-2322), it replies with an intermediate result, and the client replays the original request with the answers:

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"
  }
}

The client asks the user the question, then sends the same tools/call again (new id) with inputResponses and requestState. For an information system, this is excellent news: human confirmation of a sensitive action becomes a standard mechanism of the protocol.

3. Routing by headers

On the Streamable HTTP transport, each POST carries Mcp-Method and, for tools/call, resources/read and prompts/get, Mcp-Name (the name of the tool or prompt, or the resource URI) (SEP-2243). A tool parameter can be copied into an Mcp-Param-{name} header via x-mcp-header, never for sensitive data. The server must reject any request whose headers do not match the body (HeaderMismatch, code -32020): a gateway that routes on the header cannot be fooled by a different body.

4. Cacheable list results

Responses to tools/list, prompts/list, resources/list, resources/read and resources/templates/list now include ttlMs (freshness in milliseconds) and cacheScope (public or private) (SEP-2549), and tools should be returned in a deterministic order, which also improves models’ prompt caching. If the list of tools depends on the caller’s rights, it is private.

5. Hardened authorisation

  • RFC 9207 (SEP-2468): authorisation servers should return the iss parameter, and the client must validate it before exchanging the code. This blocks authorisation server confusion attacks (“mix-up”), which PKCE alone does not prevent.
  • application_type mandatory during dynamic registration (SEP-837), for desktop and CLI applications.
  • Issuer-bound credentials (SEP-2352): never reused with another authorisation server.
  • Dynamic Client Registration deprecated in favour of Client ID Metadata Documents (CIMD), while remaining available for compatibility.

6. An extensions framework

Client and server capabilities gain an extensions field. Long-running tasks leave the core for the io.modelcontextprotocol/tasks extension (polling via tasks/get, new tasks/update method, SEP-2663). According to the official announcement, the framework also covers MCP Apps and Enterprise Managed Authorization. Change notifications go through a single subscriptions/listen stream, to which the client subscribes by notification type.

7. Deprecations and SDKs

Roots, Sampling and Logging are deprecated (SEP-2577) but remain functional for at least twelve months: pass directories as tool parameters, call the model API directly, log via stderr or OpenTelemetry. The HTTP+SSE transport is deprecated and resumption of SSE streams (Last-Event-ID) is removed: an interrupted stream means the request must be restarted.

The four Tier 1 SDKs (TypeScript, Python, Go, C#) implemented the revision as soon as it was published, Rust in beta. The official SDK table now classes Rust as Tier 1 (100% pass rate on the required conformance tests), Java and Ruby as Tier 2, and PHP, Kotlin and Swift as Tier 3. For a PHP stack, this needs a decision: a Tier 3 SDK, or an MCP server in TypeScript or Go in front of your Symfony or Laravel application.

Connecting agents to your information system: the typical architecture

This is the architecture we recommend for exposing an information system to autonomous agents:

  • Agent host (IDE, internal assistant, ticket agent): model, authorised tools, user confirmations.
  • MCP gateway: single entry point, OAuth, filtering by Mcp-Method / Mcp-Name, rate limiting, audit log.
  • MCP servers by domain: ERP, CRM, ticketing, documentation.
  • Identity provider: minimum-scope tokens, issued for each MCP server.
  • Business systems, through their APIs or a read replica, never with direct write access to the production database.

One MCP server per business domain

SystemExposed tools (examples)Default modeWrite possible?
ERPcommande_consulter, stock_disponibleReadNo, or via a validated business workflow
CRMclient_rechercher, historique_contactsReadNote creation, with MRTR confirmation
Ticketing (Redmine, Jira)ticket_lire, tickets_similairesReadInternal comment after human validation
Databaserequete_lecture on a dedicated schemaStrictly read-onlyNever
Documentationdoc_rechercherReadNo

Splitting by domain limits the impact of a compromised server, simplifies OAuth scopes and makes the audit readable. Avoid the catch-all server: the model also chooses less well among too many tools.

Example: exposing a Postgres database read-only

The barrier must be in the database, not in the prompt. On a replica:

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 can be changed by the session: it is a second barrier. The real protection is the rights limited to SELECT on a schema of views that mask sensitive columns.

Security: the non-negotiable rules

Read-only by default and an allowlist

In our iones lab experiment EXP-01, a team of 8 developers used 5 MCP servers for 8 weeks: Redmine read-only, Postgres read-only, Playwright, project documentation and Git. An MCP server with write access to Redmine was dropped after 2 tickets were modified by mistake. Since then, our rule is simple: read-only by default, write access only on an explicit allowlist.

An example of a policy applied by the gateway (illustrative format, to be adapted to your tool):

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

The specification goes in this direction: for tools, there should always be a human in the loop able to deny a call, and tool annotations (such as readOnlyHint or destructiveHint) must be considered untrusted unless they come from trusted servers.

OAuth: what the specification requires

The MCP security best practices are explicit:

  • No “token passthrough”: an MCP server only accepts tokens issued for it and never relays the client’s tokens to a downstream API.
  • Minimum scopes: read first, elevation on demand, never * or admin from the outset.
  • Random state handles, bound server-side to the authenticated user: possessing a handle does not amount to authentication.
  • Local servers: exact command displayed before execution, sandbox, listening on localhost only.

Prompt injection and tool poisoning

An agent reads content it does not control: tickets, emails, web pages. An instruction hidden in a ticket can try to hijack the agent: this is prompt injection, still number one (LLM01) in the OWASP Top 10 2026 for LLM applications. A variant specific to MCP is tool poisoning, described by Invariant Labs on 1 April 2025: malicious instructions are hidden in a tool’s description, invisible to the user but read by the model.

Countermeasures:

  • only servers whose code or publisher you control;
  • pinning of tool descriptions (fingerprint), with an alert on change;
  • content returned by a tool treated as data, never as an instruction;
  • separation of flows: an agent that reads external emails does not write to the ERP;
  • blocking any unlisted action at the gateway.

In our EXP-06 experiment on autonomous agents, the action allowlist and the blocking of any command touching production intercepted 7 risky actions, including 2 deletions of test data. These guardrails transpose directly to MCP tools.

Cloud-native deployment: what statelessness simplifies

Before 2026-07-28, an HTTP MCP server with sessions required session affinity or shared storage. Now:

  • Horizontal scaling: identical replicas behind a round-robin load balancer, with standard Kubernetes autoscaling.
  • Zero-downtime deployments: no session to migrate; an interrupted stream is simply restarted.
  • Header-based network policies, for example limiting tool calls more strictly than list reads:
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;
    }
}
  • Observability: propagation of the OpenTelemetry trace context (traceparent) in _meta, from the agent to the business system.

This is the work we do on the infrastructure, DevOps and web security side: containers, Kubernetes (AWS, OVHcloud), Grafana monitoring, secrets.

Migrating from 2025-11-25: the checklist

  • [ ] Inventory servers, clients, SDKs and versions; update the SDKs (breaking changes)
  • [ ] Remove any dependency on Mcp-Session-Id and replace implicit state with user-bound handles
  • [ ] Replace server-initiated requests with the MRTR pattern
  • [ ] Add ttlMs and cacheScope to lists; order tools deterministically
  • [ ] Validate iss, bind credentials to the issuer, plan for CIMD
  • [ ] Route and filter on Mcp-Method / Mcp-Name in the gateway
  • [ ] Replace Logging with OpenTelemetry and Sampling with a direct call to the model
  • [ ] Test compatibility with older clients, review the allowlist and OAuth scopes

Frequently asked questions

What is the Model Context Protocol (MCP)?
MCP is an open protocol that standardises the connection between an AI application and servers exposing tools, resources and prompts. Created by Anthropic and released on 25 November 2024, it has been governed since December 2025 by the Agentic AI Foundation, hosted by the Linux Foundation. A single MCP server works with all compatible clients.
What changes with the MCP 2026-07-28 specification?
The protocol becomes stateless: no more handshake or session, each request carries its version and capabilities. Server-initiated requests are replaced by Multi Round-Trip Requests. On top come mandatory routing headers, cacheable lists, hardened authorisation (RFC 9207), an extensions framework and a deprecation policy of at least twelve months.
Do you need to migrate your MCP servers straight away?
Plan the migration without rushing. Deprecated features remain usable for at least twelve months and clients can detect a server’s version. The changes are breaking, however: update the SDKs, remove the dependency on sessions and adopt Multi Round-Trip Requests before exposing new business systems.
Can an AI agent write to my ERP via MCP?
Technically yes, but we advise against it by default. Start read-only, then open write access tool by tool, on an allowlist, with human confirmation via Multi Round-Trip Requests and an audit log. In our EXP-01 experiment, an MCP server with write access to Redmine was dropped after two tickets were modified by mistake.
What is tool poisoning?
It is an attack in which malicious instructions are hidden in the description of an MCP tool: the user does not see them, but the model reads them and may be led to exfiltrate data or hijack other tools. Defences: trusted servers only, pinning of descriptions, a tool allowlist and separation of data flows.
Is there an MCP SDK for PHP?
Yes, an official PHP SDK exists, but it is classed as Tier 3 (experimental or partial) in the official SDK table. For a production MCP server in front of a Symfony or Laravel application, you can also write the server with a Tier 1 SDK (TypeScript, Python, Go, C# or Rust) that calls the application’s APIs.

MCP 2026-07-28: the right time to industrialise your agent connectors

The 2026-07-28 specification makes MCP an infrastructure protocol: stateless, routable, cacheable, with authorisation aligned with OAuth best practice. The scope, read-only access, the allowlist and monitoring remain your responsibility.

Do you want to connect agents to your ERP, CRM or ticketing system without opening a breach? We design and deploy MCP servers and autonomous agents with their guardrails, directly or on a white-label basis for agencies. Contact us: reply within 48 to 72 hours, under NDA.

Sources

  1. The 2026-07-28 Specification – official MCP blog, 28 July 2026
  2. 2026-07-28 specification: <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. SDKs – modelcontextprotocol.io (accessed 19 September 2026)
  4. Introducing the Model Context Protocol – Anthropic, 25 November 2024
  5. MCP joins the Agentic AI Foundation – official MCP blog, 9 December 2025
  6. Formation of the Agentic AI Foundation – Linux Foundation, December 2025
  7. MCP Security Notification: Tool Poisoning Attacks – Invariant Labs, 1 April 2025
  8. RFC 9207 – IETF
  9. OWASP GenAI LLM Top 10 2026 – OWASP, 3 August 2026
  10. EXP-01 – Skills &amp; MCP</a> and <a href="/iones-lab/jarvis-openclaw-agents-autonomes/">EXP-06 – Agents Jarvis &amp; OpenClaw – iones lab

Start a project

Ready to take action?

Tell us what you need – we will get back to you quickly with a technical assessment and an action plan.

  • Reply within 48–72 hours
  • No-obligation conversation
  • NDA confidentiality