Listed from the MCP registry; nobody on Odel publishes it.
Self-hosted kanban for humans and agents. One 4 MB binary, starts in 2 ms, zero setup.
Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Distributed via cargo as `kanzo`.
English | 简体中文
Kanzo is a kanban board in your browser and an MCP server in one 4.7 MB program, so you and your coding agents work on the same tasks: on one computer, or on one board shared by all of them. No account, no server, no setup: run kanzo and it works.
You never edit a file. Everything is done in one of three places:
kanzo command, for the terminal and scripts.
Tip
Just ask your agent: "install Kanzo from github.com/emanuele-em/kanzo."
curl -LsSf https://github.com/emanuele-em/kanzo/releases/latest/download/kanzo-installer.sh | sh
For macOS and Linux, including every Raspberry Pi. On Windows, in PowerShell:
powershell -ExecutionPolicy Bypass -c "irm https://github.com/emanuele-em/kanzo/releases/latest/download/kanzo-installer.ps1 | iex"
Both add Kanzo to your PATH, for terminals you open from then on. To use it in the one you installed from, run source $HOME/.cargo/env (env.fish in fish), or open a new one.
Or download the Windows zip from the latest release and put kanzo.exe in a folder named bin on your PATH, like %USERPROFILE%\.cargo\bin: the board updates itself only there.
Every release is signed by GitHub: check a download with gh attestation verify <file> --repo emanuele-em/kanzo. Or with Cargo:
cargo install kanzo
Tip
Just ask your agent: "start Kanzo and keep it running at login."
kanzo
The board opens at http://localhost:4242. That's all the setup there is: the first run creates ~/kanzo, and the whole board lives in it.
| Key | Does |
|---|---|
n | New task |
/ or ⌘K | Search every project |
f | Filter the board; ↵ keeps the filter |
Tab | Move to the description |
⌘↵ | Save and close |
Esc | Keep what you typed in a description or tags; cancel other fields |
Tip
Just ask your agent: "mark kanzo#12 as human, and set its URL to github.com/acme/api/pull/482."
⌘-click them, or drag on empty board space, then move, tag or delete them together. Drag one and the rest follow.url.[name](file:///path) in a description or comment opens in your editor.⌘1–⌘8 pick a project, ⌘9 the last one, ⌘0 all of them. On macOS, kanzo then opens it instead of a tab, on the default port.Tip
Just ask your agent: "add Kanzo as your MCP server," then restart it.
claude mcp add kanzo --scope user -- kanzo mcp # Claude Code
codex mcp add kanzo -- kanzo mcp # Codex
Other MCP clients: run kanzo mcp (apps like Raycast need the full path, from which kanzo), or use the running board at http://localhost:4242/mcp.
Then ask: "take the next task from kanzo and do it." The agent:
doing and comments as it works;review, comments how to resume its session.
Turn on Backlog in Settings for a column agents leave alone, until you move its tasks to todo.
Tip
Just ask your agent: "make kanzo#12 wait on #10 and #11."
waits_on.next_task skips it, and its card is dimmed and says what it waits on. You can still move it yourself.done. A task in review still blocks.is:waiting.
Tip
Just ask your agent: "take the next kanzo task tagged billing," or "list what's left in kanzo with tag:billing."
The board's filter (f), search (/) and the filter of list_tasks and next_task all understand the same words, like on GitHub:
- negates a qualifier: tag:billing -status:done.
| Qualifier | Finds | Example |
|---|---|---|
tag: | that exact tag | tag:bug, tag:"needs review" |
status: | a column | status:doing |
project: | a project | project:api |
title:, description:, url:, comment: | text in that field | title:login, comment:"on hold" |
id:, comments:, images: | a number, or a range | id:12, comments:>2, images:1..3 |
created:, updated: | a date, or a range | created:2026-11-05, updated:<2026-01-31 |
is:human | tasks for you, not agents | -is:human |
is:waiting | tasks waiting on unfinished ones | -is:waiting |
has:, no: | description, tags, url, comments or images | has:url, no:tags |
Anything else is plain text. Use quotes for a phrase, "on hold", or to look for text that reads like a qualifier, "tag:bug". Agents can't filter through a property you've hidden in Settings.
Two ways, neither with any setup: share one board live, or sync it between machines.
Tip
Just ask your agent: "share my Kanzo board" on one computer, and "join the Kanzo board at 192.168.1.20" on the others.
Several computers, one board, at the same time: everyone sees the same tasks, and every agent works on them.
Nothing restarts and nothing needs configuring. Their board shows the shared one, and their agents use it through the same kanzo mcp, still finding the project from the repo they work in. Turn sharing off, or click Leave, at any time.
From a terminal, or for an agent, it's kanzo share on and kanzo join <address>, then kanzo share off and kanzo leave.
The same two commands work wherever the board lives; only the address changes:
Your computer shares its board. Others join it from theirs, on the same network.
flowchart LR
B["💻 Laptop B<br><code>kanzo#nbsp;join#nbsp;192.168.1.20</code>"] -- home network --> A["💻 Laptop A<br><i>192.168.1.20</i><br><code>kanzo#nbsp;share#nbsp;on</code>"]
A Raspberry Pi keeps the board. Every computer joins it, and none has to stay on.
flowchart LR
A["💻 Laptop A<br><code>kanzo#nbsp;join#nbsp;192.168.1.50</code>"] -- home network --> pi["🍓 Raspberry Pi<br><i>192.168.1.50</i><br><code>kanzo#nbsp;share#nbsp;on</code>"]
B["💻 Laptop B<br><code>kanzo#nbsp;join#nbsp;192.168.1.50</code>"] -- home network --> pi
The Raspberry Pi is somewhere else, over the internet. Put a VPN on the Pi and on each computer, like Tailscale, NetBird or WireGuard: kanzo share on then shows the Pi's VPN address too.
flowchart LR
A["💻 Laptop A<br><code>kanzo#nbsp;join#nbsp;100.101.32.7</code>"] -- VPN --> net(("🌐 Internet"))
B["💻 Laptop B<br><code>kanzo#nbsp;join#nbsp;100.101.32.7</code>"] -- VPN --> net
net -- VPN --> pi["🍓 Raspberry Pi<br><i>100.101.32.7</i><br><code>kanzo#nbsp;share#nbsp;on</code>"]
On a Pi, kanzo service install keeps the board running after a restart. There are no logins: share only on a network you trust.
Tip
Just ask your agent: "sync my Kanzo board," or the first time, "set up Kanzo sync with github.com/you/kanzo-data."
To carry the board between machines you use one at a time, a private git repo you own keeps it in step.
~/kanzo a git repo and pushes the board.From then on, choose Sync, or run kanzo sync, when you switch machines. It commits the board and pulls or pushes it, and it's safe while the board and your agents are running. If both machines changed the board, Kanzo asks which one to keep. To move to another repo, change it in Settings, under Sync.
| Command | Does |
|---|---|
kanzo | Starts the board at http://localhost:4242 and opens it; --port for another port, --no-open to not open it |
kanzo service install | Keeps the board running and starts it at login; uninstall removes it |
kanzo mcp | The MCP server for agents: they start it, not you |
kanzo share on | Shares the board with the other computers on your network; off stops, while the board keeps running |
kanzo join <ip> | Uses the board another computer shares, from this one's board and agents; kanzo leave goes back |
kanzo sync | Commits the board and pulls or pushes it; --repo <url> sets the repo, --keep-local or --keep-remote when both sides changed |
kanzo export | Prints the board as Markdown; -f json for JSON, -p <project> for one project, -o <file> to save it |
kanzo update | Installs the latest release and restarts the board's service; the board offers new versions too |
kanzo init | Creates the data folder; the first run does this too |
kanzo --version | Prints the version |
Every command takes --home <dir> to use another data folder.
Tip
Just ask your agent: "run Kanzo on port 4300."
Everything lives in ~/kanzo: the board in kanzo.db, settings in config.toml. You never need to open either; use another folder with --home or KANZO_HOME.
port = 4242
listen = "127.0.0.1" # sharing opens the board to your network; "0.0.0.0" keeps it open
mcp_http = true # MCP at /mcp
editor = "/usr/local/bin/cursor" # opens file:/// links; on macOS, your text editor without it
These settings stay on each machine: kanzo sync leaves them out.
Settings on the board:
| Program | 4.7 MB, SQLite included |
| Memory | 5 MB idle, 12 MB with 3,000 tasks |
| Start | 3 ms |
| Board of 3,000 tasks | 17 ms to load in the browser |
| Agents' tool list | about 1,000 tokens, once per session |
| Agents' replies | 10 to 60 tokens of plain text |
Measured on an Apple M4.
AGPL-3.0: use it, change it and share it; if you offer a changed version over a network, share its source too. To help, see CONTRIBUTING.
mcp-name: io.github.emanuele-em/kanzo