Released4 Sep 2026Commit7e36bcceLine0.18.xLateston its line

v0.18.0

Serve MCP over HTTP, and stop misreporting the protocol version to older clients

Notes

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-http serves MCP over a single POST endpoint on loopback. It is stateless and dual-era: it targets protocol revision 2026-07-28, with per-request _meta and no sessions, while still answering the legacy initialize handshake for clients that have not migrated.
  • initialize now 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/discover is 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.com is rejected. An absent Origin is allowed, since non-browser clients send none.
  • MCP-Protocol-Version, Mcp-Method and Mcp-Name must 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 resultType and _meta.serverInfo. Listings also carry ttlMs and cacheScope; 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.

Commit

7e36bcce

The commit this tag names.

Releases