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

Metadata

Release files for taskwarrior-mcp-lite 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for taskwarrior-mcp-lite 0.1.0
File Size Uploaded Provenance Actions
taskwarrior_mcp_lite-0.1.0.tar.gz 13.8 kB Without provenance Details for taskwarrior_mcp_lite-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for taskwarrior-mcp-lite 0.1.0
File Interpreter ABI Platform Actions
taskwarrior_mcp_lite-0.1.0-py3-none-any.whl Python 3 none any Details for taskwarrior_mcp_lite-0.1.0-py3-none-any.whl

Total release size: 23.8 kB

Release files / taskwarrior_mcp_lite-0.1.0.tar.gz

Download URL taskwarrior_mcp_lite-0.1.0.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9b4b557ba3279491339bde98f941a1ec194e31d983655fa90a9ab03135a80f09
BLAKE2b-256 checksum
How to use checksums
8aab28f62af5b08a1bd3638a92de9f85e138793b53785202913362bfc23e47c1
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / taskwarrior_mcp_lite-0.1.0-py3-none-any.whl

Download URL taskwarrior_mcp_lite-0.1.0-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3733a23901999f2c1bbd673793bf8ddc4573c23aa838366f2801852c0aefc864
BLAKE2b-256 checksum
How to use checksums
75e886094ed405b268da5115bc92017d7ebbfd7ef578a86bb3c93406683fb17b
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for taskwarrior-mcp-lite 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

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