MCP
chime mcp serve runs a standard Model Context Protocol
server over stdio (JSON-RPC 2.0). It’s the portable integration layer: any
MCP-capable agent host can call it, not just Claude Code.
The six tools
Section titled “The six tools”chime_status
Section titled “chime_status”Current daemon status: paired state, machine routing id, peer routing id, relay URL, and registered aliases. No input.
chime_setup
Section titled “chime_setup”Onboarding helper. Reports whether the daemon is running and the machine is
paired, and returns the exact next step (e.g. “run chime pair and scan the
QR”). Also where you choose a session alias: pass an optional
human-friendly alias (e.g. "auth-refactor") — normalized to a
[a-z0-9-] slug — to use for every send this session. Single-identity
agents should reuse one stable alias across sessions; omit it to keep the
friendly auto-generated default.
| Field | Type | Required |
|---|---|---|
alias |
string | no |
chime_notify
Section titled “chime_notify”Sends a notification to the paired phone: a ping, an approval card, an ack, freeform text, or a rich A2UI card.
| Field | Type | Required | Notes |
|---|---|---|---|
message |
string | yes | Message text (also the title for approval/ui cards). |
alias |
string | no | Usually omit — defaults to the session alias. The phone groups threads by working directory + harness + model, not by alias. |
kind |
ping | approval | ack | text | ui |
no | Default ping. |
options |
string[] | no | Choice labels for approval; the mandatory plain-text fallback for ui. |
surface |
object | no | An A2UI surface (declarative UI-as-data — Card/Column/Row/Text/Button/ChoicePicker) for kind: ui. Rendered natively on the phone, never executed as code. |
reply_to |
string | no | A relay message id this notification replies to — the phone shows a quoted snippet above it, visually threading the reply. |
chime_receive
Section titled “chime_receive”Non-blocking drain of currently queued inbound messages for an alias. Returns immediately with whatever’s waiting — nothing if the queue is empty.
| Field | Type | Required |
|---|---|---|
alias |
string | no — defaults to the session alias |
chime_wait
Section titled “chime_wait”Blocks until the next inbound message arrives for the alias, or until
timeout_secs elapses. This is the “wait for the human’s approval/reply”
primitive to call right after chime_notify sends an approval or question.
| Field | Type | Required | Notes |
|---|---|---|---|
alias |
string | no | Defaults to the session alias. |
timeout_secs |
number | no | Default 300. |
chime_reply
Section titled “chime_reply”Convenience wrapper: replies to the most recently received message’s alias.
Sends an approval response if choice is given, otherwise a text/ack. Alias
and kind are derived from context automatically.
| Field | Type | Required | Notes |
|---|---|---|---|
choice |
string | no | The option label chosen, for approval replies. |
message |
string | no | Freeform text, for text/ack replies. |
alias |
string | no | Defaults to the last-received alias, then the session alias. |
reply_to |
string | no | The specific inbound message id being replied to; the phone shows a quoted snippet of it. |
Configure
Section titled “Configure”Claude Code
Section titled “Claude Code”The zero-build path — chime mcp install writes the config for you (see
Install — run this yourself after installing the CLI, the
install script doesn’t run it for you):
chime mcp install # writes ./.mcp.json (project-scoped)chime mcp install --global # writes ~/.claude.json (user-scoped)Or register it directly with Claude Code’s own CLI:
claude mcp add chime -- chime mcp serveBoth produce the same shape, an mcpServers entry running chime mcp serve:
{ "mcpServers": { "chime": { "command": "chime", "args": ["mcp", "serve"] } }}Any other MCP host
Section titled “Any other MCP host”Same JSON shape, a stdio server invoking chime mcp serve — only the config
file path and dialect differ per host (~/.cursor/mcp.json,
~/.codeium/windsurf/mcp_config.json, ~/.gemini/settings.json
mcpServers, ~/.kimi/mcp.json, etc.):
{ "mcpServers": { "chime": { "command": "chime", "args": ["mcp", "serve"], "env": { "CHIME_HOME": "~/.chime-<harness>" } } }}The optional CHIME_HOME override keeps each harness’s identity/session
state in its own directory, so running several harnesses on one machine
doesn’t collide.
- CLI — the shell-only equivalent of every MCP tool above.
- Quickstart — install, pair, first message.