Skip to content

v1.21.1 — MCP notifications acknowledged with 202 (Codex CLI rmcp connect fix)

Choose a tag to compare

@goldenwo goldenwo released this 07 Sep 18:53
· 5 commits to main since this release
896edee
  • MCP transport: notifications acknowledged with 202 (PR #302): POST /mcp now answers a JSON-RPC notification (any message without an id, e.g. notifications/initialized) with HTTP 202 Accepted and no body, per the MCP streamable-HTTP transport — previously 200 + Content-Type: application/json + an empty body, which is not a JSON document. Fixes OpenAI Codex CLI (rmcp client) dropping the um server at connect time (worker quit with fatal: Deserialize error: EOF while parsing a value at line 1 column 0, when send initialized notification, retried 3× → no memory tools in Codex). Responses to requests (messages carrying an id) are byte-identical. The OpenAPI /mcp path documents the 202.

Deploy notes: server-only change; no env, config, schema, or data-shape change; no CLI or plugin behaviour change (their version fields move in lockstep as always). Post-deploy proof-of-life: POST /mcp with {"jsonrpc":"2.0","method":"notifications/initialized"} returns 202 with no Content-Type and an empty body; initialize still returns 200 JSON with serverInfo.version = 1.21.1; codex exec … "Reply OK" logs no rmcp EOF error and codex mcp list shows um enabled.

Artifact verification: ghcr.io/goldenwo/universal-memory-server:1.21.1 manifest carries amd64 + arm64 (release.yml run 34152798727, both legs green). amd64 pulled and booted locally against a throwaway qdrant v1.13.0 with UM_TEST_MOCK_SDK=1 (node v22.23.2 in-image): /health 200; POST /mcp notifications/initialized and notifications/cancelled202 Accepted, no Content-Type, 0 bytes; initialize → 200 application/json with serverInfo.version 1.21.1; tools/list → 4 tools; unknown method with an id → JSON-RPC -32601. arm64: verified on the Pi (aarch64) by install.sh --upgrade 1.21.1 — pre-flight passed (image loads mem0ai/oss + lib/stats.mjs), container swapped, /health 200 with all 608 memories intact; rollback image kept as um-rollback:previous.