Skip to content
Conduit

mcp server

agent-kanban

Local-first kanban for AI-agent workflows. Drag a task to Approved and your AI coding agent picks it up via MCP and drives it through analyst → in_progress → testing on its own. MCP for Claude Code &

nerkoman/agent-kanbancommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 17, 2026

agent-kanban

Local-first kanban for AI-agent workflows. SQLite, FastAPI, no auth, no cloud.

License: MIT Python

A self-hosted kanban board designed to be driven by AI coding agents (Claude Code, Cline, opencode, Open WebUI, any function-calling LLM). Drag-drop in browser, REST + MCP for agents. Multi-project, light/dark theme, markdown plan-file import, automation rules.

Dark themeCyberpunk profileHorizon profile

Toggle theme with t, cycle profiles with p. Or pin a theme/profile via URL: ?theme=light&profile=cyberpunk.

Features

  • 9 workflow columns: Backlog → Approved → Analyst → In progress → Testing → UAT → Done, plus Blocked / Cancelled.
  • Multiple projects in one DB, URL-routed (/p/{slug}), each with optional Claude Code-project directory binding.
  • Light/dark theme switcher (t), density toggle (d), collapsible columns, sidebar.
  • Search + filter chips, keyboard shortcuts (/, n, r, \, Esc).
  • Inbox watcher: drop a .md into kanban_data/inbox/, get a card in 5 sec. Point KANBAN_INBOX_DIR at any folder you like — even ~/.claude/projects/<proj>/memory/inbox/ for Claude session captures.
  • PLAN.md import (loose-mode parser, one-shot): any ## Section → cards in backlog with section-name in description.
  • Automation rules (kanban_data/rules.json): task_moved, task_idle, blockers_done, task_count_in_status → move, comment, assign, set priority, archive, run a command. Polling rules act once per stay in a column; WIP limits, a pause switch. Hot-reloaded.
  • Agent launcher (examples/agent-launcher/): card lands in Approved → headless Claude Code works it to Testing, with a timeout, one run per card, max_concurrent / max_runs, and the card blocked with a reason when a run goes wrong.
  • Outbound webhooks (kanban_data/webhooks.json): POST to Slack / Telegram / any HTTP endpoint on task_created/task_moved/task_commented/task_updated. 3 formats: generic, slack, telegram.
  • MCP server (kanban_mcp/) with 16 tools for Claude Code / Cline, strict arguments and compact answers; agents can't close cards themselves (configurable). python -m kanban_mcp.connect <dir> --project <id> writes the .mcp.json + CLAUDE.md block.
  • One event stream: every change — UI, REST, MCP agent, script, rule — lands in the task history, and rules and webhooks react to it the same way.
  • REST API + auto-generated OpenAPI for opencode / Open WebUI / any LLM with function calling. Scripts sign their changes with X-Kanban-Actor.
  • Archive instead of delete: archived cards leave the board but keep their status. Links to single cards: /t/T-042.

Quickstart

5 minutes from clone to an AI agent doing your work for you: see QUICKSTART.md.

Bare minimum (one command after install):

# Install uv once: `curl -LsSf https://astral.sh/uv/install.sh | sh` or `brew install uv`
git clone https://github.com/<your-user>/agent-kanban.git
cd agent-kanban
uv run python -m kanban_ui                     # http://localhost:7777

uv run auto-creates a .venv/, installs deps from pyproject.toml (~5 sec on a warm cache), and launches the server.

python3.12 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python -m kanban_ui                  # http://localhost:7777

requirements.txt is kept in sync with pyproject.toml for Dependabot and pip-only environments.

Optional — auto-start on login (macOS):

bash scripts/install_launchd.sh install        # macOS launchd
bash scripts/install_launchd.sh status
bash scripts/install_launchd.sh uninstall

Logs: ~/Library/Logs/agent-kanban/{stdout,stderr}.log.

AI agent integrations

Pick the integration matching your agent:

AgentTransportReference
Claude Code (Anthropic CLI)MCP stdio via ~/.claude.json or .mcp.jsondocs/INTEGRATION.md#claude-code
Cline (VSCode extension, legacy stdio)MCP stdio, same config blockdocs/INTEGRATION.md#cline
🆕 CursorHTTP MCP @ http://localhost:7777/mcpdocs/INTEGRATION.md#cursor
🆕 Cline (new versions)HTTP MCP @ http://localhost:7777/mcpdocs/INTEGRATION.md#cline-http
opencode (sst/opencode)OpenAPI tools / RESTdocs/INTEGRATION.md#opencode
Open WebUIOpenAPI Tool Server pointing at /openapi.jsondocs/INTEGRATION.md#open-webui
Generic LLM (Hermes / Llama / Ollama / Mistral / vLLM)function-calling + RESTdocs/INTEGRATION.md#generic-llm
MCP Inspector (debugging)HTTP MCP @ http://localhost:7777/mcpdocs/INTEGRATION.md#mcp-inspector

The kanban serves MCP over stdio (python -m kanban_mcp, for Claude Code / Cline), streamable HTTP at /mcp (Cursor, new Cline, MCP Inspector) and SSE at /sse for clients that only speak the older transport.

Static OpenAPI schema: docs/openapi.yaml. Interactive Swagger: http://localhost:7777/docs.

Real-world flows: docs/USECASES.md — 11 use cases (solo dev, team Slack, legacy import, multi-project, agent session, auto-launch, etc.).

Why

  • vs. Trello/Jira/Linear — local-first; no SaaS account, no rate limits, your data on your disk.
  • vs. plain TODO.md — drag-drop, history, multi-project, MCP integration, automation rules.
  • vs. building your own — it has been run daily with Claude Code agents across several projects; the CHANGELOG for v0.2 lists what that surfaced and how it was fixed.

Configuration (env vars)

VariableDefaultPurpose
KANBAN_HOST127.0.0.1bind address
KANBAN_PORT7777port
KANBAN_DB<repo>/tasks.dbSQLite path (web server, MCP server, maintenance CLI)
KANBAN_ACTORuser (web) / claude (MCP)author name written to history; REST callers can override per request with X-Kanban-Actor
KANBAN_DEFAULT_PROJECT_IDdefaultid of seed project on first launch
KANBAN_DEFAULT_PROJECT_NAMEDefaultdisplay name of seed project
KANBAN_DEFAULT_PROJECT_COLOR#F10D30accent color of seed project
KANBAN_INBOX_DIR<repo>/kanban_data/inboxinbox watcher folder
KANBAN_RULES_FILE<repo>/kanban_data/rules.jsonautomation rules
KANBAN_WEBHOOKS_FILE<repo>/kanban_data/webhooks.jsonoutbound webhook notifications
KANBAN_AUTOMATION_INTERVAL60rule engine interval for polling rules (sec)
KANBAN_EVENTS_INTERVAL1how often the event feed looks for changes made by other processes (sec)
KANBAN_EVENTS_QUIET_ACTORSplan-import,maintenancebulk writers that don't trigger webhooks or rules
KANBAN_RULE_LOOP_LIMIT5a reactive rule may fire on one card at most N times per 10 min
KANBAN_LOG_DIR<repo>/kanban_data/logsdefault log folder for run_command rules
KANBAN_INBOX_INTERVAL5inbox poll interval (sec)
KANBAN_CORS_ORIGINS(empty)comma-separated origins for CORS (e.g. for remote Open WebUI)
KANBAN_PROJECT_ID(empty)MCP server: this agent's project (default for kanban_create, scope of list/search/board)
KANBAN_MCP_HUMAN_ONLYdoneMCP server: statuses agents may not move/create cards into
KANBAN_URLhttp://localhost:7777MCP server: base URL for card links in tool answers

Project layout

agent-kanban/
├── kanban_store/    SQLite store + schema (5 migrations) + maintenance CLI
├── kanban_ui/       FastAPI web UI + automation/{events,inbox,rules,webhooks,plan_md}
│   └── static/      index.html · styles.css · app.js · vendor/Sortable
├── kanban_mcp/      MCP server (16 tools) + connect helper
├── seed/            generic example tasks
├── examples/        llm-tool-calling demo scripts
├── docs/            INTEGRATION.md, openapi.yaml, screenshots
├── tests/           pytest tests
├── scripts/         install_launchd.sh
├── snapshots/       JSON snapshots (gitignored except .gitkeep)
└── kanban_data/     runtime DB, inbox/, rules.json (gitignored)

Maintenance

python -m kanban_store.maintenance doctor             # health report, read-only
python -m kanban_store.maintenance dedupe-history     # dry run; --apply to delete (backup first)
python -m kanban_store.maintenance restore-archived   # done cards an old rule relabelled "cancelled"
python -m kanban_store.maintenance vacuum             # reclaim space (stop the server first)

Upgrading from 0.1.x: see CHANGELOG.md.

Roadmap

  • Plan-file sync that survives edits on both sides (today: one-shot import).
  • GitHub Issues importer (already has source-config table; needs gh API client).
  • Multi-user mode with simple cookie-based auth.
  • Optional Postgres backend.

License

MIT

↑↓ navigate openesc close