@ahmedshaikh/blackboard-mcp
v0.1.0
Published
A shared blackboard for multi-agent coordination, as an MCP server — channels of messages plus shared key/value state, backed by one SQLite file so a main agent and its spawned subagents can read/write the same board.
Maintainers
Readme
blackboard
A shared blackboard for multi-agent coordination. When a main agent spawns subagents, they start cold and can't talk to each other. This gives them one shared board — message channels plus shared key/value state — backed by a single SQLite file every agent process opens.
main: post("work", "summarize the auth module", author="main")
sub: read("work") → [{ content: "summarize the auth module" }]
sub: post("results", "uses JWTs in src/auth/session.ts", author="sub")
main: read("results", after_id) → the answer, when it landsTools
post(channel, content, author?)— append a message; returns its id.read(channel, after_id?, limit?)— messages newer thanafter_id(poll to wait for a reply).set_state(key, value)·get_state(key)— shared key/value (results, flags, counters).list_channels()— channels + message counts.
How it works
One SQLite file (default ~/.agent-blackboard/board.db, override with
BLACKBOARD_DB) in WAL mode with a busy-timeout, so concurrent agent processes
read and write the same board safely. node:sqlite — no native deps.
A typical pattern: main posts tasks to a channel, subagents read to pick them
up and post results back; read(channel, after_id) polls for the reply.
Setup
npm install # Node 22+ (built-in node:sqlite)
npm testclaude mcp add blackboard -e BLACKBOARD_DB=/tmp/run123.db -- node /abs/path/blackboard/dist/server.js
# CLI: agent-board post work "task" --author main | read work --after 0 | set k v | get k | channelsHonest limits
- No auth/ACLs — any process pointed at the file can read/write. Scope a run
with its own
BLACKBOARD_DBif you want isolation. - Poll-based, not push — readers poll with
after_id; there's no blocking wait. - Messages accumulate until you rotate/delete the db (no auto-expiry).
