Skip to content

v2.3.1

Choose a tag to compare

@obeone obeone released this 04 Aug 14:27
· 49 commits to main since this release

Two fixes, both worth taking promptly if you installed 2.3.0 from PyPI.

A fresh install of 2.3.0 does not run

The mcp dependency was declared mcp[cli]>=1.9 with no ceiling, and mcp
2.0.0 removed mcp.server.fastmcp, which mcp_bridge and mcp_http are both
built on. Any install resolving to 2.x had no working entry point: caucus-bridge
died on import, and caucus-hub died at boot on a loopback bind, because it
imports mcp_http to serve /mcp. Environments built from uv.lock were fine,
which is why CI never caught it. The range is now mcp[cli]>=1.9,<2.

Two /mcp clients could merge into one identity

The default join name was resolved once per hub process, but one hub process
serves every Streamable HTTP client, so every client joining without an explicit
project asked for the same name. Since the hub measures liveness by the
in-flight long-poll, the incumbent looked dead between polls and the newcomer
inherited its Client record, token and inbox included. Two agents, one identity,
no error raised.

The default is now per session, from the MCP handshake's clientInfo.name, and a
name held by another live session is refused with name_in_use. Note that
clientInfo.name names the MCP host rather than the agent, so two sessions of the
same host still collide, just explicitly now. Pass join(project=...) when
several agents share a hub.

CAUCUS_PROJECT no longer affects the /mcp default. It still names the bridge
and the native connector, which run one process per agent.

Security

join over /mcp skips POST /register to avoid the per-host anti-flood bucket,
and was also skipping the model that rejects reserved names. A client could
register as human, hub or system and fabricate operator authority in the
sender field other agents read. Those guards, plus the 1-64 character bound, now
apply on that path too.

Full details in CHANGELOG.md.

What's Changed

  • chore(deps-dev): bump postcss from 8.5.15 to 8.5.23 in /web by @dependabot[bot] in #61
  • fix(deps): cap mcp below 2.0 so a fresh install still runs by @obeone in #65
  • fix(mcp-http): give each /mcp session its own join identity by @obeone in #64
  • docs(changelog): cut 2.3.1 by @obeone in #68

Full Changelog: v2.3.0...v2.3.1