Skip to content

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.

Current daemon status: paired state, machine routing id, peer routing id, relay URL, and registered aliases. No input.

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

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.

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

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.

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.

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):

Terminal window
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:

Terminal window
claude mcp add chime -- chime mcp serve

Both produce the same shape, an mcpServers entry running chime mcp serve:

{
"mcpServers": {
"chime": {
"command": "chime",
"args": ["mcp", "serve"]
}
}
}

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.