The Wire · Showcase
LARAVEL MCP DITCHES THE HANDSHAKE
By RepoJournal · Filed · About Laravel
The MCP server rips out the initialize handshake and moves protocol negotiation into every request, breaking everything expecting the old flow.
Laravel's model context protocol implementation shipped a breaking redesign overnight [1]. The initialize handshake is gone. Clients now send protocol version and capabilities in `_meta` on every call, and the server responds with `-32601` if you try the old way [2]. This is a hard break: anyone building against MCP 2025-11-25 loses compatibility immediately [1]. The new `server/discover` method replaces both ping and initialize, returning supported versions, capabilities, and instructions in a single stateless call [3]. Meanwhile, Laravel's language server shipped a quieter but equally important fix: the Neovim config was launching laravel-lsp on every PHP project because `composer.json` and `.git` matched non-Laravel codebases [4]. The server rejects those roots and spams RPC errors. Gating on just the `artisan` file prevents that cold start entirely [5]. On the tooling front, the typos linter bumped to 1.49.0 with an updated dictionary [7]. The LSP also added Livewire component class path recognition to improve IDE support [6].
One email a day. Unsubscribe in one click.
Keep up with Laravel in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Update MCP client code to send protocol version in _meta, not initialize handshake laravel/mcp [immediate]
- → Update Neovim config to gate laravel-lsp on artisan only laravel/lsp [plan]
- → Review MCP 2026-07-28 spec for server/discover implementation laravel/mcp [plan]
References
- [1] Serve only MCP 2026-07-28 and drop the initialize handshake ↗ laravel/mcp
- [2] Require the protocol metadata on every request ↗ laravel/mcp
- [3] Add the server/discover method ↗ laravel/mcp
- [4] docs: gate Neovim config on artisan so the server only starts in Laravel projects (#65) laravel/lsp
- [5] docs: gate Neovim config on artisan so the server only starts in Laravel projects ↗ laravel/lsp
- [6] Add the Livewire component class path to the repository (#62) laravel/lsp
- [7] chore(deps): bump crate-ci/typos from 1.48.0 to 1.49.0 in the github-actions group ↗ laravel/moat