todolist-mcp: Dependencies, Kanban, and Where It Fits Now

todolist-mcp was the first MCP server I built that wasn’t wrapping an existing tool. It’s a SQLite-backed todo list that lives in your editor, and it’s grown a fair amount since the first post about it.

The server now supports task dependencies (blocker/blocked-by relationships), priority levels, tag-based filtering with sorting, and pagination. There’s also a web UI built with FastAPI and HTMX that gives you a kanban board with drag-and-drop. It’s not fancy, but it’s functional and pleasant to use when you want a visual view of your task list.

What Changed Recently

This round of updates was mostly infrastructure. The FastMCP constructor API changed at some point and broke the server initialization, so that’s fixed. All 82 tests pass again. GitHub Actions CI is running lint and tests across Python 3.10-3.12. Pre-commit hooks, ruff, the usual.

You can now run it with:

uvx --from git+https://github.com/wdm0006/todolist-mcp todolist-mcp --project-dir /path/to/your/project

Dependencies and Ready Items

The dependency tracking is probably the most useful addition since the original release. You can mark that task B is blocked by task A, and the server will track that relationship. The get_ready_items tool returns only tasks whose blockers are all completed, so an agent knows what it can actually work on next. get_dependency_chain shows the full upstream and downstream graph for any task.

This matters because agents tend to be optimistic about parallelism. They’ll try to start on something that depends on unfinished work. Giving them explicit dependency information helps them plan better.

How It Relates to ContextSwitch

Some of you might be wondering about the overlap with ContextSwitch, the native macOS app I built later in the year. ContextSwitch grew out of todolist-mcp. It has a proper native UI, supports multiple databases simultaneously, and includes a built-in MCP server written in Swift.

They serve different niches though. todolist-mcp is free, open source, cross-platform, and works anywhere Python runs. It’s the right choice if you want a lightweight task manager you can embed in any MCP workflow. ContextSwitch is for when you want a full native app experience with timeline views, global search across databases, and the kind of polish that’s hard to achieve in a web UI.

I still use both. todolist-mcp shows up in my agent configurations for coding projects. ContextSwitch lives in my dock for everything else.


Links: