v0.18.0
Serve MCP over HTTP, and stop misreporting the protocol version to older clients
sigil-mcp gains a Streamable HTTP transport beside the existing stdio loop, so a server can be attached to by several agents at once and each can restart without disturbing the others. Both transports share one dispatcher, so they cannot drift apart.
This release also fixes a bug affecting every existing server: initialize answered with a fixed protocol version regardless of what the client asked for. A client pinned to an older revision received a version string it did not know. Codex pins 2025-06-18 by default.
Changes
mcp-server-run-httpserves MCP over a single POST endpoint on loopback. It is stateless and dual-era: it targets protocol revision 2026-07-28, with per-request_metaand no sessions, while still answering the legacyinitializehandshake for clients that have not migrated.initializenow echoes the client's requested version when it is supported, and otherwise offers the newest legacy revision. It never answers with 2026-07-28, which has no handshake at all and would leave a legacy client looking at a version it cannot speak.server/discoveris implemented, reporting supported versions, capabilities and identity. Required of every server from revision 2026-07-28, and answered on both transports.- Origin is validated against the whole host rather than a substring, so a name like
localhost.evil.comis rejected. An absent Origin is allowed, since non-browser clients send none. MCP-Protocol-Version,Mcp-MethodandMcp-Namemust agree with the request body. These headers exist so a proxy can route without parsing JSON, which only holds while the two agree.- An unimplemented method answers 404; an unknown tool answers 200 with an error. Both reach the transport as -32601, so the method name is checked against an explicit list rather than inferred from the response.
- Results carry
resultTypeand_meta.serverInfo. Listings also carryttlMsandcacheScope; tool output is deliberately not cacheable, being a computation rather than a listing.
Upgrade notes
The stdio transport is unchanged apart from the version-negotiation fix, and existing servers need no changes. Verified against courier: built against this release it answers a client asking for 2025-06-18 with 2025-06-18, where the previous release answered 2025-11-25. Its own capabilities and server info are unaffected, and its test suite passes.
Serving over HTTP is opt-in. Call mcp-server-run-http in place of mcp-server-run; this pulls in sigil-http, which is why it is a new dependency.
The sigil: field moves from the grandfathered caret ^0.19 to a bare "0.21", matching the convention that the field is a floor rather than a range.
The commit this tag names.