← RATTLEBOARD
mcp · for ai agents · MIT

rattleboard for ai agents
v0.9.1 · free · model context protocol

Rattleboard for AI agents

Your coding agent finishes a long task while you're across the room. The board tells you. Rattleboard is a split-flap message board with a built-in MCP server, so Claude Code, Cursor, Codex and friends can flip it to TESTS PASSED or NEED YOUR INPUT.

>upgrade the payments service, run the tests, and tell me on the board when you're done
read 42 files · edited 17
$ npm test → 318 passed, 0 failed
● rattleboard · show_status
text: "TESTS PASSED"
color: green · seconds: 600
Done. All 318 tests pass; it's on your board.
the board across the room · payments-api

why · walk away from the screen

Agents are good at long tasks now. Upgrading a dependency, chasing a flaky test, migrating a schema: you hand it over and it works for a while. The awkward part is knowing when to come back. Check too early and you interrupt yourself; too late and the agent has sat waiting on a question for half an hour.

Rattleboard puts the answer somewhere you'll see it from the kitchen: a split-flap board on a spare laptop, a TV, or the corner of your own screen. Agents post to it as a tool call, and the flaps rattle round to the news.

One click to set up. Settings → Agents finds the agent apps on your computer and connects them, showing you the change first.

Two kinds of message. A status that goes away by itself (“BUILDING”), or a message that stays until you've seen it (“TESTS PASSED”).

Nothing leaves your computer. The key stays in your keychain, and agents can only put things on the board.

  • Claude Code
  • opencode
  • Claude Desktop
  • Cursor
  • Codex CLI
  • Gemini CLI
  • VS Code (Copilot)

set up · one click in settings → agents

  1. 1Install Rattleboard and open it.It needs to be running; Connect turns on its API server for you, for this computer only.
  2. 2Open Settings → Agents and click Connect next to your agent app.Review the change, then click Confirm. Where the app supports skills, the Rattleboard skill is installed too.
  3. 3Start a new session in the agent app and ask:“When you finish, put DONE on my Rattleboard.”

Each app also gets an optional Alert me when the agent finishes or needs input switch, and a Sends to choice for its default board.

PREVIEW FIRST

You see a before/after of the app's settings file, and nothing changes until you click Confirm.

A BACKUP OF EVERY FILE

A timestamped copy of each file you already had is saved next to it, such as settings.json.rattleboard-backup-20261019-101500.

THE REST STAYS AS IT WAS

Comments, key order, indentation and trailing commas are kept, in VS Code, opencode and Gemini CLI's JSON-with-comments and in Codex's TOML.

DISCONNECT IS EXACT

Disconnect removes exactly what Connect added and nothing else. Connecting twice changes nothing, and if the file changed since the preview, nothing is written.

where it writes · per app

Claude Codemcp~/.claude.json → mcpServersalertsStop and Notification hooks in ~/.claude/settings.jsonskill~/.claude/skills/rattleboard/
opencodemcp~/.config/opencode/opencode.json (or .jsonc) → mcpalertsa small plugin, ~/.config/opencode/plugins/rattleboard.jsskill~/.config/opencode/skills/rattleboard/
Claude Desktopmcpclaude_desktop_config.json → mcpServersalerts—skill—
Cursormcp~/.cursor/mcp.json → mcpServersalertsstop hook in ~/.cursor/hooks.jsonskill~/.cursor/skills/rattleboard/
Codex CLImcp~/.codex/config.toml → [mcp_servers.rattleboard]alertsnotify in the same file, unless another program already uses itskill~/.agents/skills/rattleboard/
Gemini CLImcp~/.gemini/settings.json → mcpServersalertsAfterAgent and Notification hooks in the same fileskill~/.gemini/skills/rattleboard/
VS Code (Copilot)mcpuser mcp.json → serversalertsStop hook in ~/.copilot/hooks/rattleboard.json (a preview feature)skill~/.copilot/skills/rattleboard/

Claude Desktop's file is in ~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows and ~/.config/Claude/ on Linux. VS Code's mcp.json is in its user settings folder. CODEX_HOME, CLAUDE_CONFIG_DIR and XDG_CONFIG_HOME are honoured. Restart the agent app, or start a new session, after connecting.

the tools · six of them

send_message{text, color?, size?, strategy?, link?, priority?, board?}Text that stays until something replaces it. color adds a chip; link is opened by clicking the board; board is this one, a saved board or group by name, or all.
show_status{text, seconds?, color?, link?, priority?}A temporary status, 15 seconds by default. Afterwards the board goes back to what it was showing.
send_layout{characters, board?}An exact grid of character codes, up to 12 × 40.
list_boardsThis board, your saved boards and groups, with their kinds and sizes.
play_sequence{frames: [{text or characters, hold}], loop?}1 to 100 frames, each with its own hold time, optionally looping.
get_boardWhat the board shows now, as text and as character codes.

priority: "alert"gets through a Focus or Do Not Disturb that holds pop-ups, if you let alerts through. The tool descriptions tell the model the board's size and the characters it can show; a message that doesn't fit is still sent, and the answer says it was cut off. Everything agents send appears once in Message History, labelled with the app, such as “Claude Code via MCP”.

try asking · example prompts

  • When you finish, put DONE on my Rattleboard.
  • Run the full test suite. Put the result on the board in green if it passes, red if it doesn't.
  • If you need a decision from me, send NEED YOUR INPUT to the board as an alert, then wait.
  • Show a status on the board for each stage of the deploy: BUILDING, TESTING, SHIPPED.
  • When the migration is done, send the summary to the Kitchen TV.
  • Count down the last five minutes of the benchmark on the board.

alerts · no prompt needed

Agents forget. Hooks don't. Turn on Alert me when the agent finishes or needs input (off by default) and Rattleboard adds the agent app's own hooks. The board then shows “Claude Code is done” or “Claude Code needs you” every time, with the project's name on the line below.

The hook runs --notify, which reads the key from your keychain, so the key never goes into a hook file. --seconds 20 makes it a status that goes away again, and --hook reads the hook's JSON for the project name and never fails the hook.

a hook, by hand
/Applications/Rattleboard.app/Contents/MacOS/rattleboard --notify "Claude Code is done" --color green --source "Claude Code" --hook
codex cli · ~/.codex/config.toml
notify = ["/Applications/Rattleboard.app/Contents/MacOS/rattleboard", "--notify", "Codex is done", "--color", "green"]

remote boards · three ways

An agent can write to a board on another device: a TV, another computer, a Rattleboard Web container, or a real board on its Local or Cloud API.

1THROUGH THIS COMPUTER

The default. Save the other board in Settings → Boards and agents can send to it by name, a group, or all. It goes out the same way as Compose's Send.

send to · --target
# list_boards shows your saved boards and groups;
# send_message and send_layout take a board name:
send_message { "text": "DEPLOYED", "color": "green", "board": "Kitchen TV" }

# Settings → Agents → Sends to: a default board per agent app,
# written into its config as:
/Applications/Rattleboard.app/Contents/MacOS/rattleboard --mcp --target "Kitchen TV"
2STRAIGHT TO ANOTHER BOARD

For a server, or a computer not running Rattleboard. All six tools act on that board. The key comes from a board saved with that address, or RATTLEBOARD_KEY.

--mcp --url
rattleboard --mcp --url http://192.168.1.20:7070
rattleboard --notify "Backup done" --url http://192.168.1.20:7070
3RATTLEBOARD WEB OVER HTTP

For agent apps that support remote MCP servers: POST /mcp with Authorization: Bearer <key>. Get the key with docker exec rattleboard rattleboard-web key.

http mcp · /mcp
# Claude Code
claude mcp add --transport http --scope user rattleboard http://<server>:7070/mcp --header "Authorization: Bearer <key>"

Cursor, VS Code, opencode, Gemini CLI and Codex CLI snippets for the HTTP endpoint are in the README. Claude Desktop needs a public HTTPS address for remote servers, so use --mcp --url there instead.

by hand · any mcp app

Prefer to edit the files yourself? Add Rattleboard as a stdio MCP server. These use the macOS path; on Windows and Linux, use the path shown at the bottom of Settings → Agents. Rattleboard has to be running, with Settings → API server on.

Claude Code · terminal
claude mcp add --scope user rattleboard -- /Applications/Rattleboard.app/Contents/MacOS/rattleboard --mcp
Claude Code · ~/.claude.json
{
  "mcpServers": {
    "rattleboard": {
      "type": "stdio",
      "command": "/Applications/Rattleboard.app/Contents/MacOS/rattleboard",
      "args": ["--mcp"]
    }
  }
}
opencode · ~/.config/opencode/opencode.json
{ "mcp": { "rattleboard": { "type": "local", "command": ["/Applications/Rattleboard.app/Contents/MacOS/rattleboard", "--mcp"], "enabled": true } } }
Claude Desktop · claude_desktop_config.json, and Gemini CLI · ~/.gemini/settings.json
{ "mcpServers": { "rattleboard": { "command": "/Applications/Rattleboard.app/Contents/MacOS/rattleboard", "args": ["--mcp"] } } }
Cursor · ~/.cursor/mcp.json
{ "mcpServers": { "rattleboard": { "type": "stdio", "command": "/Applications/Rattleboard.app/Contents/MacOS/rattleboard", "args": ["--mcp"] } } }
VS Code · MCP: Open User Configuration
{ "servers": { "rattleboard": { "type": "stdio", "command": "/Applications/Rattleboard.app/Contents/MacOS/rattleboard", "args": ["--mcp"] } } }
Codex CLI · ~/.codex/config.toml
[mcp_servers.rattleboard]
command = "/Applications/Rattleboard.app/Contents/MacOS/rattleboard"
args = ["--mcp"]

security · private by design

LOCAL BY DEFAULT

rattleboard --mcp talks only to the API server on 127.0.0.1. Agents don't need network access turned on. Other boards are reached through the app's Send, or with --url only when you set that up.

THE KEY STAYS IN YOUR KEYCHAIN

--mcp and --notify read the API key from the OS credential store each time. Settings → Agents never writes it into an agent's config, a hook or a skill, and it never appears in a tool's answer or a log.

WRITE-ONLY TO THE BOARD

The tools can show messages and read what the board shows. They can't change settings, sources, plugins or keys, and can't read your other boards' keys.

NOTHING HIDDEN

Every edit to an agent's files is previewed, backed up and reversible with Disconnect. No accounts, no analytics, no server of ours.

faq

Does it cost anything?

No. The desktop apps and Rattleboard Web are free and open source under the MIT licence. If it earns a spot on your wall, you can buy me a coffee.

Which operating systems?

macOS, Windows and Linux (Raspberry Pi included), plus Rattleboard Web in Docker on any server, NAS or Pi. On Windows and Linux, use the path shown at the bottom of Settings → Agents in place of the macOS path.

Does my API key end up in config files?

No. The one-click setup and the hooks read the key from your keychain each time. The exceptions are ones you choose: an HTTP connection to Rattleboard Web, which stores the key in that agent app's config, and the RATTLEBOARD_KEY environment variable for --url when the board isn't saved in Settings → Boards. Both are documented, and both can be avoided.

Will my agent spam me?

It shouldn't. The built-in skill tells agents to post only when something is worth looking up for, and to keep it short. Statuses go away on their own, and you decide what the agent is asked to post. Disconnect removes it all in one click.

Get Rattleboard

Free and MIT licensed. Version 0.9.1. Install it, open Settings → Agents, and click Connect.