The MCP server
Every workflow is also an MCP server, so outside agents can read cards, move them and trigger workers — the tools it offers, how tokens are scoped, and what a token can never do.
Every workflow's board is also an MCP server. Point an outside agent at it — Claude Code, Codex, Kiro, Devin, anything that speaks the Model Context Protocol — and it can read cards, move them and trigger the worker on a station.
This is how CodeBook works with the agents you already use rather than instead of them: they do their work wherever they run, and the factory is where that work is queued, routed, gated and recorded.
The endpoint
https://app.codebook.work/kanban/api/mcp
It speaks JSON-RPC over Streamable HTTP: one POST per message, no stdio, no long-lived stream. It implements initialize, tools/list, tools/call and ping.
The token
The credential is an API token, created on the workflow itself. A token names exactly one workflow.
That is a design decision worth understanding: because the token names the workflow, the workflow is never a parameter. There is no tool you can call with somebody else's id, because there is no id to pass. A card id guessed from another workflow reads as no such card.
Scopes
A token is read-only unless its scope is write.
Anything else — a missing scope, an unrecognised value, a token minted before write support existed — is treated as read-only. It fails closed, deliberately.
tools/list still shows the write tools to a read-only token, and says plainly why they cannot be called. A tool that is invisible produces a client that guesses; a tool that explains its refusal produces one that tells you what to fix.
The tools
Reading
| Tool | What it does |
|---|---|
board_overview |
The workflow's board, its groups and columns, with counts |
list_columns |
The columns |
list_cards |
Cards, filterable |
get_card |
One card in full — fields, checklist, discussion |
list_comments |
A card's discussion |
Writing (requires scope: write)
| Tool | What it does |
|---|---|
create_card |
Create a card in a column |
update_card |
Change a card's fields |
move_card |
Move a card to another column — entering a station starts its worker, exactly as a drag would |
delete_card |
Delete a card and its child content |
add_comment |
Add to a card's discussion |
trigger_worker |
Queue the station's worker for a card |
trigger_worker
This is the one that makes CodeBook part of a toolchain rather than a destination. An agent in your editor that has just discovered a bug can file the card and start the QA worker on it; a nightly job can move a release card and let the line take over.
It respects everything the workflow already enforces: approvals, the station's permissions, and the retry limit. A trigger through MCP is the same job as a trigger through a drag.
What a token is not
A token is not a person. It does not impersonate a member and it is not resolved to one.
- Writes go through the same services the app's own controllers use, so the workflow's rules and validation apply identically. A refused move comes back as a refusal, not a silent no-op.
- A card or comment created through a token carries the token's name —
Claude,QA agent— as its author label, so the discussion shows what actually wrote it.
Connecting a client
In your MCP client's configuration, add the endpoint above with the token as a bearer credential. In Claude Code or Claude Desktop that is a remote MCP server entry; in another agent or editor it is whatever it calls a remote MCP server.
Then ask it to list your columns. If that works, everything else will.
Connecting tools to a worker
The MCP server is CodeBook answering. The reverse — a worker on a station using somebody else's MCP server, such as live documentation or a browser test runner — is Tool connections.