$ the-wire · showcase
Laravel MCP serves legacy clients, middleware priority list fixes land
By RepoJournal · Filed · About Laravel · Composed from the cited sources · methodology
Laravel's MCP server now answers both protocol eras on one endpoint, so claude.ai, Claude Desktop, and ChatGPT connectors that still open with initialize stop failing, and two middleware priority fixes correct insertion when the referenced middleware is the first item.
laravel/mcp since 1.0 spoke only MCP `2026-07-28`, so clients using initialization-based handshakes got `-32601` and stopped. The server now supports both eras on the same endpoint, following "[the specification allows a dual-era server]" [1]. If you run the MCP server today, clients that never migrated to the modern handshake will reconnect without a config change on your side.
Two framework fixes correct middleware priority insertion. `appendToPriorityList()` previously placed new middleware at the end when the referenced middleware was the first item of the priority list, so it ran after session, auth, and throttling with no warning [2]. `addToMiddlewarePriorityAfter()` had the same symptom for a different reason: the insertion index started at 0, so a match at position 0 never moved, and a match whose index equalled the current insertion point was skipped, inserting `['B', 'C']` between the two instead of after C [3]. Both are 13.x changes; if you order middleware programmatically, verify the resulting list rather than assuming the append landed where you asked.
On the test side, `MailSesTransportTest` mocked `SesClient` directly "so it never actually ran" [4]. It now builds a real `SesClient` wired to AWS's `Aws\MockHandler`, so the SDK's real command building and validation execute and assertions read the real outgoing request [4].
The only other change in the window is a dependabot bump of `@babel/core` from 7.13.1 to 7.29.7 in laravel/vapor-js, a routine version jump on a build-time dependency [5].
Action items
- → Re-test MCP clients on the legacy initialize handshake against the updated laravel/mcp server laravel/mcp [plan]
- → Audit middleware ordering in 13.x apps using appendToPriorityList() or addToMiddlewarePriorityAfter() with a first-item reference laravel/framework [plan]
- → Rebase test suites that mock SesClient directly onto the real client with Aws\MockHandler laravel/framework [monitor]
References
- [1] Serve legacy initialize clients alongside the modern protocol ↗ laravel/mcp
- [2] [13.x] Fix appendToPriorityList() when the referenced middleware is the first item ↗ laravel/framework
- [3] Fix addToMiddlewarePriorityAfter() placing middleware at the end when the referenced middleware is first (#61567) ↗ laravel/framework
- [4] Strengthen mocked tests with the real thing ↗ laravel/framework
- [5] Bump @babel/core from 7.13.1 to 7.29.7 ↗ laravel/vapor-js