Skip to main content
Glama

Todoist MCP Server

CI codecov Python 3.12+ License: MIT

A local MCP server for Todoist task management, designed for use with Claude.

Wraps both the Todoist REST v2 and Sync API v1 to provide comprehensive task management capabilities through the Model Context Protocol.

Features

  • Task CRUD — create, read, update, complete, delete, and move tasks

  • Batch operations — update multiple tasks in a single API call via the Sync API

  • Project management — list projects, resolve by name (case-insensitive)

  • Labels — create, rename, delete, and apply labels to tasks

  • Comments — read and add comments on tasks (Markdown supported)

  • Completed tasks — query tasks completed within a date range (weekly review metrics)

  • Graceful degradation — server starts without Todoist tools if API token is missing

Related MCP server: Todoist MCP Server

Setup

1. Get your Todoist API token

Go to Todoist Developer Settings and copy your API token.

2. Install

git clone https://github.com/stevesimpson418/todoist-mcp-server.git
cd todoist-mcp-server

# Install dependencies (creates .venv/ in the project directory)
uv sync

New to uv? uv sync reads pyproject.toml, creates a .venv/ virtualenv inside the project folder, and installs all dependencies into it. You don't need to activate it — uv run <command> handles that automatically.

3. Configure environment

cp .env.example .env
# Edit .env and add your TODOIST_API_TOKEN

4. Connect to Claude

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

Tip: Run uv run which python from the project directory to get the exact path for command.

{
  "mcpServers": {
    "todoist": {
      "command": "/absolute/path/to/todoist-mcp-server/.venv/bin/python",
      "args": ["-m", "todoist_mcp_server.server"],
      "env": {
        "TODOIST_API_TOKEN": "your_token_here"
      }
    }
  }
}

Adding to Claude Code CLI

Use the claude mcp add command to register the server. This works from any directory.

claude mcp add --scope user todoist-mcp-server \
  --transport stdio \
  --env TODOIST_API_TOKEN=your_token_here \
  -- /path/to/todoist-mcp-server/.venv/bin/python -m todoist_mcp_server.server

Replace /path/to/todoist-mcp-server with the actual path where you cloned the repo.

Tip: Run uv run which python from the project directory to get the exact .venv/bin/python path for the command.

The --scope user flag saves to ~/.claude.json so the server is available across all projects. Without it, the command defaults to local scope (tied to whatever directory you run it from). To scope it to a single project instead, use --scope project which writes to .mcp.json in the project root.

To verify the server is registered:

claude mcp list

Restart Claude Code after adding. The Todoist tools should appear in the /mcp menu.

Note: Claude Code CLI uses a different configuration from Claude Desktop. The claude mcp add command is the recommended way to register MCP servers — do not add them to ~/.claude/settings.json as that file is used for permissions and hooks only.

Updating

To pull the latest version and update dependencies:

cd /path/to/todoist-mcp-server
git pull
uv sync

Restart Claude Desktop or Claude Code CLI after updating.

Available tools

Tool

Description

list_todoist_projects

List all projects

get_project_tasks

Get tasks from a project

list_todoist_labels

List all labels

get_completed_tasks

Query completed tasks by date range

get_task_comments

Get comments on a task

create_task

Create a new task

update_task

Update task fields

move_task

Move task to another project

complete_task

Mark task as complete

delete_task

Permanently delete a task

batch_update_tasks

Batch update multiple tasks

add_task_comment

Add a comment to a task

create_todoist_label

Create a new label

rename_todoist_label

Rename a label

delete_todoist_label

Delete a label

Usage Examples

Weekly review — see what you accomplished:

1. get_completed_tasks(since="2026-03-28", until="2026-04-04")  → completed this week
2. list_todoist_projects()                                       → see all projects
3. get_project_tasks(project_name="Inbox")                       → triage leftover inbox tasks

Reorganise tasks across projects:

1. get_project_tasks(project_name="Inbox")                          → find tasks to sort
2. move_task(task_id="123456", project_name="Home Renovation")      → move to the right project
3. batch_update_tasks(tasks=[
       {"id": "234567", "labels": ["waiting-on"]},
       {"id": "345678", "priority": 3}
   ])                                                               → bulk tidy-up

Quick capture with context:

1. create_task(
       content="Review pull request #42",
       project_name="Work",
       due_string="tomorrow 10am",
       priority=3
   )
2. add_task_comment(task_id="456789", content="See https://github.com/org/repo/pull/42")

Development

# Install dev dependencies
uv sync --dev

# Run tests
uv run pytest -v

# Run tests with coverage
uv run pytest --cov=todoist_mcp_server --cov-report=term-missing

# Lint
uv run ruff check src/ tests/

# Format
uv run ruff format src/ tests/

# Install git hooks
lefthook install

Local .env file

When running the server manually outside Claude Desktop/Code (e.g., for development or debugging), you can create a .env file in the project root so the server picks up the API token without passing environment variables:

TODOIST_API_TOKEN=your_token_here

This is only needed for local development. The Claude Desktop and Claude Code CLI configs pass this value directly via the env block.

Releases

This project uses release-please for automated versioning and releases. The version is determined by Conventional Commits:

  • fix: commits bump the patch version (e.g. 0.1.0 → 0.1.1)

  • feat: commits bump the minor version (e.g. 0.1.1 → 0.2.0)

  • BREAKING CHANGE in the commit footer bumps the major version

When commits land on main, release-please opens (or updates) a Release PR that:

  • Bumps the version in pyproject.toml

  • Updates CHANGELOG.md with grouped entries

Merging the Release PR creates a git tag and GitHub Release automatically.

Packaging & Distribution

This server is currently distributed as source via git. To install:

git clone https://github.com/stevesimpson418/todoist-mcp-server.git
cd todoist-mcp-server
uv sync

This is the standard distribution model for local-stdio MCP servers today. The project is already configured for wheel builds via hatchling, so future distribution options include:

  • PyPI — publish to PyPI, then install with uv tool install todoist-mcp-server or pip install todoist-mcp-server. Would require adding a publish workflow to CI.

  • uvx — once on PyPI, uvx todoist-mcp-server runs the server without cloning the repo. Claude Desktop/Code config would point to the uvx-managed binary instead of a local .venv.

License

MIT

Available Tools

15 tools
add_task_commentA

Add a comment to a Todoist task.

Creates a new comment on the specified task. Supports Markdown formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesThe comment text (supports Markdown)
task_idYesThe Todoist task ID to comment on

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses that this tool creates a comment (mutation) and supports Markdown formatting. However, it lacks details about idempotency, rate limits, permission requirements, or whether comments are appended.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two clear sentences. It front-loads the core purpose and adds a key feature (Markdown support) without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required params, output schema present), the description adequately covers purpose and key feature. However, it omits guidance on when to use and behavioral nuances, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes both parameters adequately. The description mentions Markdown support for content, which is also in the schema, adding no new semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a comment') and the resource ('Todoist task'). It distinguishes from sibling tools like get_task_comments (reading) and create_task (creating tasks, not comments).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives, such as get_task_comments for viewing comments or other tools. The description does not mention prerequisites or context for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_update_tasksA

Batch update multiple Todoist tasks in a single API call.

Uses the Todoist Sync API for efficiency — processes all operations in one request. Each operation can update fields and/or move a task to a different project. This is ideal for triage workflows where you need to process many tasks at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesList of operations. Each dict must include 'id' (task ID). Optional fields: 'content' (str), 'labels' (list of label names), 'due_date' (str, natural language or YYYY-MM-DD), 'description' (str), 'project' (project name to move to).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions using the Todoist Sync API and processing all operations in one request, but does not disclose potential issues like partial failures, atomicity, or rate limits. The behavioral insight is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core action, then mechanism, then use case. Every sentence serves a distinct purpose with no redundancy or filler, achieving high efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (per context signals), the description does not need to explain return values, but it also omits discussion of error handling or operation results. For a batch tool, completeness is moderate—sufficient for basic use but lacking depth for robust agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value beyond the schema by explaining the structure of each operation item, listing optional fields with formats (e.g., 'due_date' as natural language or YYYY-MM-DD). This meaningfully aids parameter understanding, earning above the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Batch update multiple Todoist tasks in a single API call', providing a specific verb-resource combination. It distinguishes from siblings like 'update_task' (single) and 'move_task' (just moving), and uses terms like 'triage workflows' to further differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes 'ideal for triage workflows where you need to process many tasks at once', giving clear context for when to use. However, it does not explicitly state when not to use or mention alternatives like 'update_task' for single updates, so it lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_taskA

Mark a Todoist task as complete.

The task will be moved to completed status. For recurring tasks, this advances to the next occurrence.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe Todoist task ID to complete

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full responsibility. It discloses that the task moves to 'completed status' and for recurring tasks, it 'advances to the next occurrence.' This covers the primary behavioral traits, though it doesn't mention potential side effects like notifications or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence captures the core action, and the second adds crucial recurring-task behavior. Perfectly front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, full schema coverage, and presence of an output schema (which the description doesn't need to detail), the description completely informs the agent of the tool's effect and special case (recurring tasks). No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes the task_id parameter. The description does not add meaning beyond what the schema provides (e.g., no format or source hints). Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Mark a Todoist task as complete') and distinguishes from sibling tools like delete_task or update_task. The description specifies the state change and handles recurring tasks, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to mark a task complete) but does not explicitly state when not to use or provide alternatives. Given the clear context, it's adequate but lacks guidance on exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_taskA

Create a new task in Todoist.

Creates a task with the given content in the specified project. Optionally attach labels, a due date, and a description.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoLabels to apply, by name. Use list_todoist_labels() for available labels.
contentYesThe task title/content
projectNoProject name to create the task in (case-insensitive). Defaults to 'Inbox'. Use list_todoist_projects() for valid names.Inbox
due_dateNoDue date — natural language ('tomorrow', 'next Monday') or date string ('2026-03-15').
descriptionNoOptional longer description for the task.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the project defaults to 'Inbox', case-insensitive matching, natural language due dates, and optional labels/description. This adds meaningful behavioral context beyond a simple 'create' action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short paragraphs with no fluff. It front-loads the main action and then lists optional details. Not overly structured but efficient for its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters (1 required) and an output schema exists, the description covers all parameters implicitly, explains defaults for project, and mentions optional fields. It lacks error handling or prerequisite info but is adequate for a create tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter is well-documented in the schema (e.g., content, project, due_date). The description only reiterates that labels, due date, and description are optional, adding minimal new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new task in Todoist with content, project, labels, due date, and description. The verb 'create' and resource 'task' are specific, and the description distinguishes it from siblings like update_task, complete_task, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating tasks but lacks explicit guidance on when to use this tool versus alternatives like update_task or batch_update_tasks. No exclusions or context about when not to use are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_todoist_labelB

Create a new personal label in Todoist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel name to create
colorNoLabel color. Valid values: berry_red, red, orange, yellow, olive_green, lime_green, green, mint_green, teal, sky_blue, light_blue, blue, grape, violet, lavender, magenta, salmon, charcoal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only says 'create' without disclosing side effects, permissions, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no unnecessary words, front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create tool with 2 parameters and an output schema, the description is minimal but covers the basic purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description adds no extra meaning beyond what's already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'create' and the resource 'personal label in Todoist', distinguishing it from siblings like delete, rename, and list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, nor any prerequisites or context for creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_taskA
Destructive

Permanently delete a Todoist task.

This action is irreversible. Consider complete_task() instead if you want to keep a record of the task.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe Todoist task ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond the 'destructiveHint' annotation by explicitly stating the action is 'irreversible.' This reinforces the destructive nature and helps the agent understand the permanence. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, consisting of two sentences that front-load the key information. There is no redundant or unnecessary text, and every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, destructive operation), the description completely covers the necessary context: what the tool does, its irreversibility, and an alternative for a non-destructive outcome. The presence of an output schema reduces the need for return value explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, and the schema already describes the parameter 'task_id' with a clear description. The tool description does not add any additional parameter-specific semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Permanently delete a Todoist task.' It uses a specific verb and resource, and explicitly distinguishes from the sibling tool 'complete_task' by advising to use that alternative if keeping a record is desired.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when not to use this tool by suggesting 'complete_task()' as an alternative for record-keeping. However, it does not mention other relevant contexts or alternatives among the sibling tools, such as batch updates or moving tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_todoist_labelA
Destructive

Permanently delete a Todoist label.

This removes the label from all tasks that have it. This action is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idYesThe label ID to delete. Use list_todoist_labels() to find IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description details 'removes from all tasks' and 'irreversible,' providing full behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose, minimal and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully covers purpose, effects, and irreversibility for a one-parameter tool with existing annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds value beyond the schema by advising agents to use list_todoist_labels to find IDs, enriching the single parameter's semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Permanently delete a Todoist label,' specifying the action and resource. Distinct from siblings like rename or create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the side effect of removing the label from all tasks and emphasizes irreversibility, guiding agents to use with caution. Does not explicitly list alternatives like renaming.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_completed_tasksA
Read-only

Get completed tasks from Todoist within a date range.

Returns tasks completed between since and until (inclusive). Ideal for weekly review metrics — see how many tasks were completed and when.

Example: get_completed_tasks(since="2026-03-12", until="2026-03-19")

Returns: [{"id": "123", "content": "Buy milk", "project_id": "456", ...}, ...]

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of completed tasks per page (1-200).
sinceYesISO date or datetime for the start of the range (inclusive). e.g. '2026-03-12' or '2026-03-12T00:00:00'. Todoist API limits the range to 3 months.
untilYesISO date or datetime for the end of the range (inclusive). e.g. '2026-03-19' or '2026-03-19T23:59:59'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true. The description adds that results are inclusive of the date range and provides an example return object, giving behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise 4-sentence description with clear sections: purpose, scope, usage suggestion, example, and return format. Every sentence adds value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description sufficiently covers functionality. It includes an example return and usage suggestion, though it omits mentioning the 3-month API limit (present only in schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 3 parameters with 100% description. The description repeats the date range concept and shows an example call, but adds no new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves completed tasks within a date range, using a specific verb and resource. It distinguishes from sibling tools like get_project_tasks by focusing on completed items and date filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description suggests use for 'weekly review metrics' but does not explicitly contrast with alternative tools (e.g., get_project_tasks) or provide when-not-to-use guidance. Usage is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_tasksA
Read-only

Get all tasks from a Todoist project.

Returns tasks with: id, content, description, labels, due, priority, project_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject name as it appears in Todoist (case-insensitive). Use list_todoist_projects() to see available projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. The description adds the specific return fields and that the project name is case-insensitive. However, it doesn't disclose how tasks are filtered (e.g., active vs. all) or behavior for missing projects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the purpose and list key return fields. Every word serves a purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter read tool with an output schema and annotations, the description covers the essential purpose and return fields. However, it omits whether 'all tasks' includes completed ones (likely not, given get_completed_tasks sibling) and order of results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the 'project' parameter comprehensively. The tool description adds no extra parameter meaning, so baseline of 3 is appropriate since schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all tasks from a Todoist project,' specifying the verb and resource. It also lists the returned fields, distinguishing it from sibling tools like get_completed_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_completed_tasks or update_task. The only hint is in the parameter description suggesting to use list_todoist_projects for project names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_commentsA
Read-only

Get all comments on a Todoist task.

Returns all comments attached to the specified task, ordered by creation time.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe Todoist task ID to get comments for

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds that comments are ordered by creation time, providing useful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the purpose and include an important behavioral detail (ordering). No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, no nested objects, output schema present), the description is complete—it states the purpose, scope, and ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the task_id parameter fully described. The description does not add additional meaning beyond what the schema provides, resulting in a baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all comments on a Todoist task', providing a specific verb and resource. It distinguishes itself from siblings like 'add_task_comment' which is for creating comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'add_task_comment' or other task retrieval tools. The context implies reading, but no when-not-to-use or alternative descriptions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_todoist_labelsA
Read-only

List all personal Todoist labels.

Returns every label with its ID, name, and color. Labels are referenced by name in task operations.

Example: list_todoist_labels()

Returns: [{"id": "111", "name": "Home", "color": "blue"}, ...]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, and the description adds that it returns all labels with ID, name, and color, and notes that labels are referenced by name in task operations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, an example, and a return format. Every sentence adds value, and the main action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and an output schema present, the description is complete. It specifies what is listed (all labels), the fields returned (ID, name, color), and how labels are used.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and schema coverage is 100%. The description adds no parameter info because none exist, which is appropriate. Baseline score of 4 for zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all personal Todoist labels, with specific verb 'list' and resource 'labels'. It distinguishes from sibling tools like create_todoist_label or delete_todoist_label by focusing on read-only listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a usage example and explains what is returned. While it does not explicitly state when to use vs alternatives, the context of listing all labels is straightforward and distinct from create/rename/delete operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_todoist_projectsA
Read-only

List all Todoist projects.

Returns every project in the user's account with its ID and name. Use this to discover valid project names for other tools.

Example: list_todoist_projects()

Returns: [{"id": "12345", "name": "Inbox"}, {"id": "67890", "name": "Work Tasks"}, ...]

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description confirms a read-only operation. It adds context that it returns ID and name, but doesn't discuss rate limits or auth, which is acceptable given the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: purpose, usage guide, example with return format. No wasted words; essential information front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is fully adequate: it explains the purpose, usage, and provides a concrete example of the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. The description adds an example and return format, providing extra clarity beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all Todoist projects' and specifies it returns every project with ID and name, distinguishing it from sibling tools like task/label utilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to discover valid project names for other tools', providing clear context for when to use it. No explicit exclusions or alternatives, but sufficient for this simple tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_taskB

Move a task to a different Todoist project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesTarget project name (case-insensitive). Use list_todoist_projects() for valid names.
task_idYesThe Todoist task ID to move

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavioral traits. It only states the action 'Move' but fails to describe side effects, permissions, required states (task must exist, project must exist), or error conditions. The description is insufficient for an agent to anticipate the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence without any redundancy. It is front-loaded and efficient, earning its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no nesting) and presence of an output schema, the description is adequate but incomplete. It lacks details on execution context (e.g., required permissions, behavior on duplicate projects). Still, for a straightforward move operation, it provides a minimally viable description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a description (e.g., project includes case-insensitivity and suggestion to use list_todoist_projects). The tool description adds no additional meaning beyond the schema, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Move a task to a different Todoist project' clearly states the verb (move) and resource (task, different project), distinguishing it from siblings like update_task which modifies fields, or complete_task which changes status. The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings like batch_update_tasks or update_task. There are no conditions, prerequisites, or exclusions mentioned, leaving the agent without context for proper selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_todoist_labelB

Rename an existing Todoist label.

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idYesThe label ID to rename. Use list_todoist_labels() to find IDs.
new_nameYesNew name for the label

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as side effects on tasks or reversibility. It only states the action without any context about permissions or consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. However, it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity and presence of an output schema, the description is minimally adequate. It fails to mention that the label must exist or that only the name changes, but it does not introduce errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds no extra meaning beyond what the schema already provides. The schema includes a helpful usage hint for label_id, which the description does not duplicate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (rename) and resource (Todoist label). It succinctly conveys what the tool does and distinguishes it from sibling tools like create, delete, and list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, such as needing to list labels first, or scenarios where renaming is preferred over creating a new label.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskA

Update fields on an existing Todoist task.

Only specified fields are changed; others remain untouched. Note: setting labels replaces all existing labels on the task.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoNew labels (replaces existing). Use label names, not IDs. Leave empty to keep current.
contentNoNew task title/content. Leave empty to keep current.
task_idYesThe Todoist task ID to update
due_dateNoNew due date — natural language or date string. Leave empty to keep current.
descriptionNoNew description text. Leave empty to keep current.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses an important side effect: setting labels replaces all existing labels. However, it does not mention error handling, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the purpose and then provide critical behavioral details. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and no annotations, the description covers the essential behavior for a simple update tool. It could mention what happens if the task does not exist, but it is generally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents all parameters. The description adds value by clarifying the label replacement behavior, which is not fully captured in the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update fields on an existing Todoist task' with a specific verb and resource, distinguishing it from siblings like create_task, delete_task, and complete_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that only specified fields are changed and labels replace all existing, but it does not explicitly state when to use this tool versus alternatives like batch_update_tasks or other update methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct purpose: task CRUD, comment operations, label management, and project listing. There is no overlap that would confuse an agent; even similar tools like update_task and batch_update_tasks are clearly differentiated by scope.

Naming Consistency4/5

All tools use snake_case verb_noun patterns, which is consistent. However, there is a minor inconsistency: some tools include 'todoist' (e.g., create_todoist_label) while others do not (e.g., create_task). This is a small deviation from a pure pattern.

Tool Count5/5

15 tools cover the main Todoist entities (tasks, comments, labels, projects) without being overwhelming. The count is well-scoped for the server's purpose.

Completeness2/5

The tool set is missing several key operations: no create/delete/rename projects, no get single task by ID, no delete or update comments. These gaps would force agents to work around missing functionality, causing potential failures.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/stevesimpson418/todoist-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server