Skip to main content

taskwarrior-mcp-lite

An MCP server that exposes Taskwarrior through 8 tools, plus taskwarrior_mcp_lite.core — a TaskWarrior class with zero runtime dependencies (standard library only) that any Python project can import directly, no MCP required.

Install

To run the MCP server:

pip install "taskwarrior-mcp-lite[server]"

The [server] suffix pulls in the mcp SDK and its transitive dependencies (pydantic, httpx and around 25 others). Most MCP clients launch the server through uvx, which resolves the extra for you — see Using the MCP server below, where you don't install anything by hand at all.

The server requires mcp 2.0 or newer and will not install alongside a package that pins mcp<2. See MCP SDK version.

To use only the Python library, with no MCP server:

pip install taskwarrior-mcp-lite

That installs exactly one package and no dependencies at all — the core is standard library only. Keeping the SDK behind an extra means importing TaskWarrior never adds pydantic, httpx or a version constraint to your project. See Using the core library directly.

Compatibility

Verified against Taskwarrior 2.6.x and 3.5.x on Python 3.12–3.14. Taskwarrior versions 3.0–3.4 are untested.

MCP SDK version

The [server] extra requires mcp>=2.0,<3. The lower bound is not negotiable: the server is built on mcp.server.mcpserver.MCPServer, which does not exist in the 1.x series — that line only ships FastMCP.

Because the 1.x and 2.x series overlapped, much of the MCP ecosystem still pins mcp<2. Installing this package into an environment that already holds such a package fails to resolve:

× No solution found when resolving dependencies

There is no version range that avoids this — it follows from the SDK's own split. If you hit it, run the server through uvx as shown below, which gives it an isolated environment and leaves your project's own mcp pin untouched.

The core library is unaffected: it has no dependencies and never imports mcp.

Taskwarrior 3.x and default.theme

Taskwarrior 3.x aborts every command — including export — if it can't find a file named default.theme. It looks for that file relative to the process's current working directory, not the taskrc's directory, regardless of what its own error message implies. This package works around it by running task with its working directory set to the taskrc's directory, so this normally isn't something you need to think about.

If you still see an error like:

Could not find file in CWD, directory of config file or search paths 'default.theme'

create an empty file named default.theme next to your .taskrc.

Using the MCP server

Register it with your MCP client:

{
  "mcpServers": {
    "taskwarrior": {
      "command": "uvx",
      "args": ["--from", "taskwarrior-mcp-lite[server]", "taskwarrior-mcp-lite"],
      "env": { "TASKRC": "/home/you/.taskrc" }
    }
  }
}

Tools

Tool Destructive Description
list_tasks no List tasks with typed filters (status, project, tags, active, search, limit)
get_task no Fetch one task with every field, by short ID or UUID
add_task no Create a task
update_task no Change fields on a task; only the fields you give are modified
set_task_timer no Start or pause the timer on a task (single tool, action parameter)
complete_task yes Mark a task done — requires a UUID
delete_task yes Delete a task — requires a UUID
list_projects no List project names with pending/completed task counts

complete_task and delete_task require a UUID rather than a short ID. Taskwarrior recycles short IDs as tasks complete, so an ID like 3 can point at a different task a minute later. Requiring a UUID means an agent cannot delete or complete the wrong task after the list it was working from went stale. Resolve the UUID first with list_tasks or get_task.

Using the core library directly

taskwarrior_mcp_lite.core.TaskWarrior has no runtime dependencies — it shells out to the task binary and parses its output with the standard library only. A backend or script can import it without pulling in the MCP SDK:

from taskwarrior_mcp_lite import TaskWarrior

tw = TaskWarrior("~/.taskrc")
for task in tw.export("status:pending"):
    print(task["description"])

Configuration

Environment variables:

Variable Purpose
TASKRC Path to the taskrc file to use
TASKDATA Path to the Taskwarrior data directory
TASKWARRIOR_MCP_HOOKS Set to 1 to allow Taskwarrior hooks to run (default: off)
TASKWARRIOR_MCP_TIMEOUT Timeout in seconds for task invocations (default: 10)

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

taskwarrior_mcp_lite-0.1.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

taskwarrior_mcp_lite-0.1.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file taskwarrior_mcp_lite-0.1.0.tar.gz.

File metadata

  • Download URL: taskwarrior_mcp_lite-0.1.0.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taskwarrior_mcp_lite-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9b4b557ba3279491339bde98f941a1ec194e31d983655fa90a9ab03135a80f09
MD5 7490d65c3ba401b9b4bbd04952db3f07
BLAKE2b-256 8aab28f62af5b08a1bd3638a92de9f85e138793b53785202913362bfc23e47c1

See more details on using hashes here.

File details

Details for the file taskwarrior_mcp_lite-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: taskwarrior_mcp_lite-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taskwarrior_mcp_lite-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3733a23901999f2c1bbd673793bf8ddc4573c23aa838366f2801852c0aefc864
MD5 6d4e76a7e611f5cdd6bf7706ac327c23
BLAKE2b-256 75e886094ed405b268da5115bc92017d7ebbfd7ef578a86bb3c93406683fb17b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page