tasks-mcp
This server lets you manage a personal kanban board (backlog → in_progress → testing → done) backed by SQLite, through typed MCP tools.
Add tasks (
add_task): Create a task with a required title and optional description, priority (low/normal/high), and tags. New tasks land inbacklog.List tasks (
list_tasks): Retrieve tasks with optional AND-combined filters by status, tag, priority, and whether to include archived tasks.Get a single task (
get_task): Fetch full details of one task by its numeric ID, including archived tasks.Edit tasks (
edit_task): Update a task's title, description, priority, and/or tags — only provided fields change; passing an empty string clears the description; passing tags replaces the entire tag list.Move tasks (
move_task): Move a task to any of the four kanban columns.Archive tasks (
archive_task): Soft-delete a task so it disappears from listings and the board but remains in the database (no hard delete exists).View the full board (
get_board): Get all unarchived tasks grouped by column, always returning all four columns in order, even if empty.
An optional web interface provides a drag-and-drop board UI over the same SQLite database, running alongside the MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tasks-mcpadd a task for weekly report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tasks-mcp
A personal kanban board as a local MCP server, backed by SQLite. Four columns — backlog → in_progress → testing → done — driven entirely through typed MCP tools: Claude pulls your tasks, adds new ones, edits them, and moves them across the board.
Tasks are never hard-deleted: archiving hides a task from listings but keeps it in the database.
Requirements
Python 3.11+
uv(recommended, not required — see the venv option below)
Related MCP server: kanban-lite
Install & run
Option A: uv (recommended)
From this directory:
uv run tasks-mcpThat resolves the environment, installs the single runtime dependency (fastmcp), and serves over stdio — uv even downloads a suitable Python if the machine has none. It is also exactly what an MCP host runs for you (see below).
The tasks-mcp / tasks-mcp-web console scripts exist too, but prefer the python -m tasks_mcp / python -m tasks_mcp.web module form for anything long-running: Windows locks a running .exe, which blocks uv run from refreshing the environment while a server is up.
To install uv itself, see the official installation guide.
Option B: plain venv (no uv)
# Windows
py -3.13 -m venv .venv
.venv\Scripts\pip install -e .# macOS/Linux
python3 -m venv .venv
.venv/bin/pip install -e .The server is then the tasks-mcp entry point inside the venv (.venv\Scripts\tasks-mcp.exe on Windows, .venv/bin/tasks-mcp elsewhere). Re-run the pip install step after pulling dependency changes.
Registering with Claude Desktop / Cowork
Add to claude_desktop_config.json (Windows: %AppData%\Claude\, macOS: ~/Library/Application Support/Claude/):
{
"mcpServers": {
"tasks": {
"command": "uv",
"args": ["--directory", "C:\\dev\\mcp-kanban", "run", "python", "-m", "tasks_mcp"]
}
}
}On macOS/Linux use the absolute path to this folder in --directory. If uv is not on the host's PATH, use the full path to the executable (where uv / which uv). Restart the Claude app fully after saving.
If you went with the venv install (Option B), point the config straight at the entry point instead — no args needed:
{
"mcpServers": {
"tasks": {
"command": "C:\\dev\\mcp-kanban\\.venv\\Scripts\\tasks-mcp.exe"
}
}
}(macOS/Linux: "command": "/path/to/mcp-kanban/.venv/bin/tasks-mcp".)
Then try: "add a task to buy milk", "show my board", "move it to testing".
Configuration
Env var | Default | Meaning |
|
| SQLite database path (parent dir is created) |
|
| Transition policy. |
|
| Bind address for the web view. |
|
| Port for the web view. |
|
| Opt-in: |
Set them via the env key of the MCP config entry if you want a non-default location.
Tools
Tool | What it does |
| Create a task (lands in |
| List tasks with optional AND-combined filters: status, tag, priority, |
| Full detail of one task by id (works for archived tasks). |
| Update title/description/priority/tags. Omitted fields keep their value; empty-string description clears it. |
| Move a task to another column — the kanban action. |
| Soft delete. No hard delete exists. |
| The whole board grouped by column; always all four columns, in order. |
Web view (drag & drop board)
A browser UI over the same database, runnable alongside the MCP server (WAL mode makes concurrent access safe). Start it when you want the visual board:
uv run python -m tasks_mcp.web # or .venv\Scripts\python -m tasks_mcp.web with the venv installThen open http://127.0.0.1:8765. Every MCP session (Claude Desktop, Claude Code, ...) is its own process, but they all share the database with this one web view, so it reflects everything live.
To have it always available, run it at login — e.g. a shortcut in shell:startup pointing at .venv\Scripts\pythonw.exe -m tasks_mcp.web (pythonw runs without a console window). There is also an opt-in convenience: set TASKS_MCP_WEB_AUTOSTART=1 in the MCP server's environment and whichever session starts first spawns the board in the background if it isn't running. Drag cards between columns to move them, click a card to edit or archive it, add tasks from the header. The page polls every few seconds, so changes Claude makes through MCP appear on their own.
It exposes the same seven operations as JSON endpoints (/api/board, /api/tasks, /api/tasks/{id}, /api/tasks/{id}/move, /api/tasks/{id}/archive) and is built on the stdlib HTTP server — no new dependencies, no build step. Binds to localhost only by default (TASKS_MCP_WEB_HOST / TASKS_MCP_WEB_PORT to change).
Architecture
Dependencies point inward: mcp → services → storage(interface) + domain.
src/tasks_mcp/
├── domain/ # pure data + rules, zero I/O (Task, Status, Priority, TransitionPolicy)
├── storage/ # TaskRepository interface, SQLite impl, versioned migration runner
├── services/ # TaskService — all business logic, typed exceptions
├── mcp/ # thin, disposable adapter: MCP tools
├── web/ # thin, disposable adapter: JSON API + drag-and-drop board UI
├── wiring.py # shared composition: config → service object graph
└── config.py # env resolution in one placeDesign decisions worth knowing:
Storage is swappable. The service layer codes against the abstract
TaskRepository; the SQLite implementation (raw SQL, no ORM) is the only file that knows how a task is stored. WAL mode is on, so a future read-only consumer (e.g. an HTML board view) can read while the server writes.Schema changes are migrations. A versioned runner applies
NNN_*.sqlfiles in order, each in its own transaction, on every startup. Adding a field later = dropping a new002_*.sqlfile next to001_initial.sql. Never a manualALTER.Transitions are a policy object. v1 ships
FreeTransitionPolicy. A strict linear pipeline is a new class registered inmcp/server.pyand selected viaTASKS_MCP_TRANSITIONS— zero changes to existing code.Adapters are disposable. MCP tools and web endpoints alike parse input, call one service method, format output. The web view was added without touching a line beneath the adapter layer — the proof the seams work.
Development
uv sync # create venv with dev deps
uv run pytest # domain, storage, services, MCP protocol, web APIThe service tests run against an in-memory SQLite repository; the MCP tests exercise the wired server through an in-memory MCP client; the web tests hit a live threaded server over real HTTP.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/stikkeruip/mcp-kanban'
If you have feedback or need assistance with the MCP directory API, please join our Discord server