Dual-era release. This server now speaks both MCP protocol revisions from one process and decides which one a request wants from what the request itself carries — no flag, no setting, no flag day.
2026-07-28 went GA on 2026-07-28 and removes the initialize handshake entirely: the protocol becomes stateless, every request carries its own protocol version and client capabilities, and servers must implement server/discover. It is the largest breaking change in MCP's history.
Existing clients need no changes and see no difference. Legacy output is byte-identical to 0.3.1 — asserted by exact-equality tests, not by intention.
Added
- MCP
2026-07-28alongside2025-11-25,2025-06-18and2025-03-26. server/discover, answered even without_meta— on stdio it is the backward-compatibility probe, and any error there tells a dual-era client "legacy server", a verdict the spec has it cache for the life of the process.-32022for a modern request naming a revision this server does not speak, carrying the list to retry with. Deliberately the opposite ofinitialize, which still never errors and downgrades instead.- 36 new tests for the modern era. Every one confirmed to fail against a deliberately broken server before being kept.
Changed
HANDLERSentries are records carrying handler, protocol era and cacheability, so a method cannot be added without declaring its era.- Modern results carry
resultType,serverInfoin_meta, and cache hints where the spec requires them. pingis served in both eras.
Now live
uvx perplexity-agent-mcp # the MCP server
llm install llm-perplexity-agent # the llm CLI pluginVerified end-to-end against the PyPI artifact with Simon Willison's mcp-explorer: doctor reports healthy in both stateless and legacy modes.