Skip to main content
Glama

Donetick MCP Server

PyPI Python 3.11+ License: MIT

An MCP server for Donetick chores management. Gives Claude and other MCP-compatible AI assistants full control over your Donetick instance — 27 tools covering chores, subtasks, labels, timers, and more.

Quick Start

uvx donetick-mcp

Claude Desktop / Claude Code

Add to your MCP config (.mcp.json, claude_desktop_config.json, etc.):

{
  "mcpServers": {
    "donetick": {
      "command": "uvx",
      "args": ["donetick-mcp"],
      "env": {
        "DONETICK_BASE_URL": "https://your-instance.com",
        "DONETICK_USERNAME": "your_username",
        "DONETICK_PASSWORD": "your_password"
      }
    }
  }
}

Note: DONETICK_BASE_URL can be HTTP for local/private network instances.

Related MCP server: TaskWarrior MCP Server

Tools (27)

Chore Management

Tool

Description

list_chores

List chores with optional filters (active, assigned user, brief/full detail)

get_chore

Get full chore details including subtasks and labels

create_chore

Create a chore — supports usernames, day names, reminders, subtasks. Defaults to assigning to anyone in the circle (round-robin)

update_chore

Update any fields: name, description, schedule, assignees (by username), labels (add/remove/set by name), priority, notifications

delete_chore

Delete a chore (creator only)

list_archived_chores

List archived/hidden chores

Chore Actions

Tool

Description

complete_chore

Mark a chore as done

skip_chore

Skip without completing — schedules next occurrence for recurring chores

archive_chore

Soft-delete / hide a chore

unarchive_chore

Restore an archived chore

approve_chore

Approve a completion that requires approval

reject_chore

Reject a completion that requires approval

update_due_date

Quick reschedule without a full update

Timer

Tool

Description

start_chore_timer

Start time tracking

pause_chore_timer

Pause time tracking

Subtasks

Tool

Description

create_subtask

Add a checklist item to a chore

delete_subtask

Remove a subtask

update_subtask_completion

Mark a subtask complete/incomplete

convert_chore_to_subtask

Convert a standalone chore into a subtask of another (deletes the original)

Labels

Tool

Description

list_labels

List all labels in the circle

create_label

Create a new label (name + optional hex color)

update_label

Rename or recolor a label

delete_label

Delete a label (removes from all chores)

Labels can also be managed directly on chores via update_chore using add_label_names, remove_label_names, or set_label_names.

Users & History

Tool

Description

list_circle_members

List all members with IDs, roles, and points

get_user_profile

Current user's profile, points, and settings

get_chore_history

Completion history — for one chore or all (with pagination)

get_chore_details

Chore stats: total completions, average duration, recent history

Configuration

Variable

Required

Default

Description

DONETICK_BASE_URL

Yes

—

Donetick instance URL

DONETICK_USERNAME

Yes¹

—

Donetick username

DONETICK_PASSWORD

Yes¹

—

Donetick password

DONETICK_API_TOKEN

No

—

Donetick API token (dt_…, Settings → API tokens). Sent as the secretkey header; replaces username/password login

MCP_TRANSPORT

No

stdio

stdio or http (streamable HTTP at /mcp/)

MCP_STATELESS

No

false

true runs streamable HTTP without sessions, for aggregators/proxies that open a new session per call

LOG_LEVEL

No

INFO

DEBUG, INFO, WARNING, ERROR

RATE_LIMIT_PER_SECOND

No

10.0

API rate limit

RATE_LIMIT_BURST

No

10

Burst capacity

¹ Not needed when DONETICK_API_TOKEN is set. Donetick (v0.1.83, checked 2026-10-21) accepts the secretkey header on every /api/v1 route, so a token gives the same access as the account that created it, with no stored password. Tokens are stored hashed (SHA-256) server side; legacy pre-dt_ tokens are compared raw.

Create Chore Examples

Simple one-time chore:

{"name": "Fix leaky faucet", "due_date": "2025-11-10", "priority": 3}

Recurring chore on specific days:

{"name": "Take out trash", "days_of_week": ["Mon", "Thu"], "time_of_day": "19:00", "usernames": ["Alice"]}

With subtasks and reminders:

{"name": "Weekly review", "frequency_type": "weekly", "subtask_names": ["Check email", "Update notes"], "remind_minutes_before": 15}

If no usernames provided, the chore is assigned to everyone in the circle with round-robin rotation.

Alternative Installation

Docker

git clone https://github.com/danielrosehill/donetick-mcp.git
cd donetick-mcp
cp .env.example .env  # edit with your credentials
docker-compose up -d

pip

pip install donetick-mcp
donetick-mcp  # requires env vars set

Development

git clone https://github.com/danielrosehill/donetick-mcp.git
cd donetick-mcp
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
pytest  # 200 tests, requires DONETICK_* env vars

License

MIT

Available Tools

27 tools
approve_choreB

Approve a chore completion that requires approval.

Inputs: chore_id (required).

archive_choreA

Archive a chore (soft-delete / hide). Can be unarchived later.

Inputs: chore_id (required).

complete_choreC

Mark a chore as complete.

Inputs: chore_id (required), completed_by.

convert_chore_to_subtaskA

Convert a standalone chore into a subtask of another chore. Deletes the original chore and creates a subtask with its name on the target.

Inputs: source_chore_id (required), target_chore_id (required).

create_choreA

Create a new chore. Use simple inputs like usernames and day names.

EXAMPLES:

  • Simple: {name: 'Take out trash', days_of_week: ['Mon','Thu'], time_of_day: '19:00', usernames: ['Alice']}

  • One-time: {name: 'Fix faucet', due_date: '2025-11-10', priority: 3}

  • With subtasks: {name: 'Weekly review', subtask_names: ['Check email','Update notes']}

If no usernames provided, chore is assigned to ANYONE in the circle (round-robin).

Inputs: name (required), points, due_date, priority, +16 more.

create_labelB

Create a new label for categorizing chores.

Inputs: name (required), color.

create_subtaskB

Add a new subtask/checklist item to an existing chore.

Inputs: name (required), chore_id (required).

delete_choreA

Delete a chore permanently. Only the creator can delete.

Inputs: chore_id (required).

delete_labelA

Delete a label. Removes it from all chores.

Inputs: label_id (required).

delete_subtaskB

Remove a subtask from a chore.

Inputs: chore_id (required), subtask_id (required).

get_choreB

Get full details of a specific chore by ID, including subtasks and labels.

Inputs: chore_id (required).

get_chore_detailsA

Get chore with completion statistics: total count, last completion, average duration, recent history.

Inputs: chore_id (required).

get_chore_historyA

Get completion history. If chore_id provided, returns history for that chore. Otherwise returns all chores history with pagination.

Inputs: limit, offset, chore_id.

get_user_profileA

Get the current user's profile (points, storage, notification config).

Inputs: no named parameters.

list_archived_choresA

List all archived (hidden) chores.

Inputs: no named parameters.

list_choresA

List all chores. Filter by active status or assigned user. Use detail_level='brief' for compact output.

Inputs: detail_level, filter_active, assigned_to_user_id.

list_circle_membersA

List all members in the circle with IDs, usernames, roles, and points. Use this to find user IDs for assignment.

Inputs: no named parameters.

list_labelsA

List all labels in the circle.

Inputs: no named parameters.

pause_chore_timerB

Pause the time tracker for a chore.

Inputs: chore_id (required).

reject_choreC

Reject a chore completion that requires approval.

Inputs: chore_id (required).

skip_choreA

Skip a chore without completing. For recurring chores, schedules the next occurrence.

Inputs: chore_id (required).

start_chore_timerB

Start the time tracker for a chore.

Inputs: chore_id (required).

unarchive_choreA

Restore a previously archived chore.

Inputs: chore_id (required).

update_choreB

Update any chore fields. Only provide fields you want to change.

Supports: name, description, schedule/frequency, assignees, priority, labels (add/remove/set by name), notifications, and more.

Inputs: chore_id (required), name, points, isActive, +16 more.

update_due_dateA

Quickly reschedule a chore's due date without a full update.

Inputs: chore_id (required), due_date (required).

update_labelA

Rename a label or change its color.

Inputs: name (required), label_id (required), color.

update_subtask_completionB

Mark a subtask complete or incomplete.

Inputs: chore_id (required), completed (required), subtask_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 27 tools

    Disambiguation5/5

    Each tool targets a distinct action on a specific resource (chore, label, subtask, user, timer). Overlaps like get_chore, get_chore_details, and get_chore_history are clearly differentiated by the type of data returned. The descriptions provide enough detail to avoid confusion.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_chore, list_chores, delete_label). Slight variations like convert_chore_to_subtask or update_subtask_completion still adhere to the pattern, ensuring predictability.

    Tool Count4/5

    With 27 tools, the set is comprehensive for a chore management domain, covering creation, updates, deletion, completion, approval, archiving, timers, and labels. While slightly on the higher side, each tool serves a clear purpose and none are redundant.

    Completeness5/5

    The tool set provides full CRUD for chores, labels, and subtasks, along with lifecycle management (completion, approval, archiving, timers, history). There are no obvious gaps for core operations in a chore management application.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers