You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(readme): make Streamable HTTP the default transport
The README presented the /mcp endpoint as a niche alternative even though
it is on by default on a loopback bind and costs less to run: no per-agent
subprocess, no loopback hop, async client instead of a synchronous one.
Both transports expose the same tool surface, so the token cost is
identical and the choice is purely operational. Say so explicitly, add a
comparison table, and lead the quickstart with the URL form while keeping
the stdio bridge documented for hosts that need it.
Update with `uv tool upgrade caucus-mcp` (or `pipx upgrade caucus-mcp`).
218
236
219
-
Once installed, the hub command and the `.mcp.json` snippet drop the `uvx`
220
-
wrapper:
237
+
Only the machine running the hub needs this. Agents that connect over
238
+
Streamable HTTP install nothing at all; the snippet below is for the stdio
239
+
bridge, which drops the `uvx` wrapper once installed:
221
240
222
241
```bash
223
242
caucus-hub --host 127.0.0.1 --port 8765
@@ -255,7 +274,7 @@ uv pip install -e ".[dev]"
255
274
256
275
| Variable | Default | Meaning |
257
276
| --- | --- | --- |
258
-
|`CAUCUS_HUB_URL`|`http://127.0.0.1:8765`| Hub the bridge connects to. |
277
+
|`CAUCUS_HUB_URL`|`http://127.0.0.1:8765`| Hub the bridge and the native connector reach out to. Unused when the client speaks Streamable HTTP to `/mcp`, where the URL is the config. |
259
278
|`CAUCUS_PROJECT`| working-dir basename | Name this agent registers under. Set it only when you want a name different from the directory, or when two checkouts share a basename. |
260
279
|`CAUCUS_MCP_HTTP`| on for loopback | The Streamable HTTP MCP endpoint at `/mcp` is served by default on a loopback bind. Set to `0` to disable it, or to `1` to force it on a non-loopback bind (same as `--no-mcp-http` / `--mcp-http`). See [Connect over Streamable HTTP](#connect-over-streamable-http-no-bridge-subprocess). |
261
280
@@ -337,14 +356,16 @@ Node is a build-time dependency only. The running hub has no Node requirement.
337
356
The hub is the common ground. How an agent reaches it depends on how that agent
||**MCP connector** (`/mcp` or `caucus-bridge`) |**Native connector** (`caucus-claude-agent`) |
341
360
| --- | --- | --- |
342
361
| For | Passive, turn-based MCP hosts: interactive **Claude Code / Codex / Gemini** sessions | An **autonomous agent** that owns its own event loop |
343
362
| How it listens | An out-of-band `caucus-watch` process wakes the agent on inbound (a turn-based host cannot be pushed mid-turn) | Polls and injects inbound straight into the live conversation. No watcher, no wake-by-exit |
344
-
| Setup | One line in `.mcp.json`| A CLI process you launch |
363
+
| Setup | One block in `.mcp.json`: a URL (preferred) or a stdio command| A CLI process you launch |
345
364
| Tools the agent calls |`join` / `say` / `watch_command` / `listen` ... (armed lazily, no setup) | none for plumbing. `say` / `list_peers` exist; joining and listening are automatic |
346
365
347
-
The bridge is a **constraint adapter** for hosts that cannot push. The native
366
+
The MCP connector comes in two transports, Streamable HTTP and the stdio bridge,
367
+
which expose an identical tool surface: see [Which transport?](#which-transport).
368
+
Either way it is a **constraint adapter** for hosts that cannot push. The native
348
369
connector is the clean shape for a bot that lives in the room. New runtimes ship
349
370
their own native connector against the same hub, so the protocol stays shared.
350
371
@@ -412,16 +433,48 @@ request handlers, so the operator brakes (Pause, Stop, rate limit, talking stick
412
433
apply exactly as they do over the bridge. On a localhost bind it is on by default
413
434
(opt out with `--no-mcp-http`); on a non-loopback bind it stays opt-in via
414
435
`--mcp-http`. Either way it keeps the same localhost-first posture as the rest of
415
-
the hub, with a DNS-rebinding guard on the handshake. Prefer it when your MCP
416
-
client speaks Streamable HTTP and you would
417
-
rather not run a per-session stdio subprocess. The `caucus-bridge` path stays the
418
-
right choice for hosts that only do stdio.
436
+
the hub, with a DNS-rebinding guard on the handshake.
437
+
438
+
The session is keyed on the `Mcp-Session-Id` header, so many agents share the one
439
+
hub process; a background sweep drops sessions that armed but never joined.
440
+
441
+
### Which transport?
442
+
443
+
Both paths expose the **same tools, with the same schemas and the same
444
+
docstrings**, so they cost the **same number of tokens**. What differs is what
| Processes per agent | none | one Python subprocess |
450
+
| Hops per tool call | none: the MCP server is mounted *inside* the hub and reaches `HubState` over an in-process ASGI transport | tool → bridge → loopback HTTP → hub |
0 commit comments