Todoist MCP Server
The Todoist MCP Server is a Python-based server that allows you to manage your Todoist projects, sections, and tasks through a conversational interface.
Projects: Retrieve all or specific projects, create new projects (with options for color, parent, favorite status, view style), update existing projects, and delete projects.
Sections: Retrieve all or specific sections (optionally filtered by project), create new sections (with name and project ID, optional order), update sections, and delete sections.
Tasks: Retrieve tasks (with filtering options), create new tasks (with extensive options like content, description, project, section, parent, labels, priority, due dates/times, duration, assignee), update tasks, mark tasks as complete or incomplete, and delete tasks.
Provides tools for managing Todoist tasks, projects, and sections, including creating, retrieving, updating, and deleting items through the Todoist REST API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Todoist MCP Serveradd a task to buy groceries tomorrow at 5pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Todoist MCP Server (Python)
A Todoist MCP server written in Python, using the Todoist Python API. I first created the server by using Claude to translate this TypeScript Todoist MCP server to Python. I'm gradually changing and adding functionality to suit my workflow as I experiment with using Claude to help with task management.
Installation
Prerequisites
Python 3.10+
UV package manager (installation guide)
Todoist API token
Getting a Todoist API Token
Log in to your Todoist account
Go to Settings → Integrations
Find your API token under "Developer"
Configuration with Claude Desktop
Add the MCP server to your claude_desktop_config.json,
{
"mcpServers": {
"todoist": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/mikemc/todoist-mcp-server",
"todoist-mcp"
],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token"
}
}
}
}Or, to run from a local copy,
{
"mcpServers": {
"todoist": {
"command": "uvx",
"args": [
"--from",
"/absolute/path/to/todoist-mcp-server",
"todoist-mcp"
],
"env": {
"TODOIST_API_TOKEN": "your_todoist_api_token"
}
}
}
}Configuration with Goose (and a local LLM)
You can use Goose and a local LLM provider: LM Studio or Ollama.
Configure the LLM you want Goose to use:
$ goose configure
This command will ask you whether you want to use a local model or a cloud hosted model. Ensure your model provider is running your model first. Specify the address of the model API, and the model name. Many locally deployed LLMs use a format compatible with Ollama, so for both LM Studio or Ollama LLMs, select Ollama.
◇ Which model provider should we use?
│ Ollama
│
◇ Provider Ollama requires OLLAMA_HOST, please enter a value
│ localhost:1234
│
◇ Model fetch complete
│
◇ Enter a model from that provider:
│ phi-4Then run the same command again to configure the Todoist MCP:
$ goose configure
This time it will ask about extensions:
◇ What would you like to configure?
│ Add Extension
│
◇ What type of extension would you like to add?
│ Command-line Extension
│
◇ What would you like to call this extension?
│ todoist
│
◇ What command should be run?
│ uvx git+https://github.com/mikemc/todoist-mcp-server
│
◇ Please set the timeout for this tool (in secs):
│ 60
│
◇ Would you like to add a description?
│ No
│
◇ Would you like to add environment variables?
│ Yes
│
◇ Environment variable name:
│ TODOIST_API_TOKEN
│
◇ Environment variable value:
│ ▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪
│
◇ Add another environment variable?
│ No
│
└ Added todoist extensionNow you can run goose and ask it questions about your todo list, or make changes.
$ goose
starting session | provider: ollama model: phi-4
logging to ******
working directory: ******
Goose is running! Enter your instructions, or try asking what goose can do.
( O)> how many todo list tasks have I completed in the last 7 days
─── todoist_get_tasks | todoist ──────────────────────────
filter: last 7 days completed
...
*Ideally* You have been very busy this week. You have completed 15 tasks! Listed below are the tasks.
...Related MCP server: Todoist MCP Server
Available Tools
To see currently available tools, run
# With GNU grep installed as ggrep (as with `brew install grep` on Mac)
ggrep -Po '(?<=^mcp.tool\(\)\()([^)]+)' src/main.pyAs of 2025-05-26,
Projects
todoist_get_projectstodoist_get_projecttodoist_add_projecttodoist_update_projecttodoist_delete_project
Sections
todoist_get_sectionstodoist_get_sectiontodoist_add_sectiontodoist_update_sectiontodoist_delete_section
Tasks
todoist_get_tasktodoist_get_taskstodoist_filter_taskstodoist_add_tasktodoist_update_tasktodoist_complete_tasktodoist_uncomplete_tasktodoist_move_tasktodoist_delete_task
Comments
todoist_get_commenttodoist_get_commentstodoist_add_commenttodoist_update_commenttodoist_delete_comment
License
This project is licensed under the MIT License. See the LICENSE file for details.
Available Tools
17 toolstodoist_add_projectB
Create a new project in Todoist
Args: name: Name of the project color: Color of the project (optional) parent_id: ID of the parent project for creating sub-projects (optional) is_favorite: Whether the project should be marked as favorite (optional) view_style: View style of the project, either 'list' or 'board' (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| is_favorite | No | ||
| name | Yes | ||
| parent_id | No | ||
| view_style | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Create') which implies a write operation, but doesn't mention authentication requirements, rate limits, error conditions, what happens on success (e.g., returns project ID), or whether the operation is idempotent. The description adds minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement followed by a parameter section. Every sentence serves a purpose, though the parameter explanations could be slightly more concise. The information is front-loaded with the main action first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 5 parameters and no annotations or output schema, the description provides adequate parameter semantics but lacks important behavioral context. It covers what the tool does and what parameters mean, but doesn't address authentication, error handling, return values, or relationships with sibling tools, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear semantic explanations for all 5 parameters in the 'Args' section, adding significant value beyond the schema which has 0% description coverage. Each parameter is explained with its purpose and optional status, though it doesn't provide format details (like color codes) or constraints beyond what's implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new project') and resource ('in Todoist'), making the purpose immediately understandable. It distinguishes this tool from siblings like todoist_update_project (modification) and todoist_delete_project (deletion), though it doesn't explicitly contrast with todoist_get_projects (read-only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. While the purpose implies it's for initial project creation, there's no mention of prerequisites, when to choose todoist_update_project instead, or how it relates to sibling tools like todoist_add_section or todoist_create_task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_add_sectionB
Create a new section in Todoist
Args: name: Section name project_id: Project ID this section should belong to order: Order among other sections in a project (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| order | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Create a new section' implies a write/mutation operation, it doesn't disclose important behavioral aspects: whether this requires specific permissions, what happens if the project_id doesn't exist, whether sections can be reordered later, or what the response looks like. For a mutation tool with zero annotation coverage, this represents a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by parameter explanations. Every sentence adds value, and there's no redundant information. The formatting with 'Args:' heading helps readability. It could be slightly more front-loaded by integrating the parameter information more seamlessly, but overall it's well-structured and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description provides adequate basic information but has significant gaps. It covers the purpose and parameters well, but doesn't address behavioral aspects like error conditions, permissions needed, or what the tool returns. For a tool that creates resources in a system, more context about the mutation's effects and response would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear semantic information for all three parameters beyond what the schema offers (0% coverage). It explains that 'name' is the section name, 'project_id' identifies which project the section belongs to, and 'order' determines positioning among other sections (and notes it's optional). This effectively compensates for the schema's lack of descriptions, though it doesn't provide format details like what constitutes a valid project_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new section') and resource ('in Todoist'), making the purpose immediately understandable. It distinguishes this from sibling tools like todoist_add_project or todoist_create_task by specifying it creates sections rather than projects or tasks. However, it doesn't explicitly contrast with todoist_update_section, which would have made it a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when sections are appropriate versus other organizational methods, nor does it reference sibling tools like todoist_update_section for modifying existing sections. The only implied usage is creating new sections, but no context about appropriate scenarios is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_close_taskC
Close a task in Todoist (i.e., mark the task as complete)
Args: task_id: ID of the task to close
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action ('mark the task as complete') but doesn't disclose behavioral traits like whether this is reversible (though 'todoist_reopen_task' hints it might be), what permissions are required, if it affects task history, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences: the first states the purpose, and the second documents the parameter. It's front-loaded with the core action. There's no wasted text, though it could be slightly more structured (e.g., bullet points).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a mutation tool with no annotations, no output schema, and low schema coverage), the description is incomplete. It covers the basic action and parameter but lacks details on behavior, alternatives, prerequisites, and response format. For a tool that modifies task state, more context is needed to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds the parameter 'task_id' with a brief explanation ('ID of the task to close'), which provides basic semantics beyond the schema's title ('Task Id'). However, it doesn't specify the ID format, source, or constraints, leaving gaps. With one parameter and low coverage, this is minimally adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Close a task') and the resource ('in Todoist'), with the parenthetical clarifying it means marking as complete. It distinguishes from 'todoist_reopen_task' by specifying the opposite action. However, it doesn't explicitly differentiate from other task-related tools like 'todoist_delete_task' or 'todoist_update_task' beyond the core verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'todoist_delete_task' (permanent removal) or 'todoist_update_task' (modifying without closing). It also lacks prerequisites such as needing an existing task ID or context about task states. Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_create_taskB
Create a new task in Todoist with optional description, due date, and priority
Args: content: The content/title of the task description: Detailed description of the task (optional) project_id: Task project ID. If not set, task is put to user's Inbox (optional) section_id: ID of section to put task into (optional) parent_id: Parent task ID (optional) order: Non-zero integer value used to sort tasks under the same parent (optional) labels: The task's labels (a list of names that may represent either personal or shared labels) (optional) priority: Task priority from 1 (normal) to 4 (urgent) (optional) due_string: Natural language due date like 'tomorrow', 'next Monday', 'Jan 23' (optional) due_date: Specific date in YYYY-MM-DD format relative to user's timezone (optional) due_datetime: Specific date and time in RFC3339 format in UTC (optional) due_lang: 2-letter code specifying language in case due_string is not written in English (optional) assignee_id: The responsible user ID (only applies to shared tasks) (optional) duration: A positive integer for the amount of duration_unit the task will take (optional) duration_unit: The unit of time that the duration field represents (minute or day) (optional) deadline_date: Specific date in YYYY-MM-DD format relative to user's timezone (optional) deadline_lang: 2-letter code specifying language of deadline (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| assignee_id | No | ||
| content | Yes | ||
| deadline_date | No | ||
| deadline_lang | No | ||
| description | No | ||
| due_date | No | ||
| due_datetime | No | ||
| due_lang | No | ||
| due_string | No | ||
| duration | No | ||
| duration_unit | No | ||
| labels | No | ||
| order | No | ||
| parent_id | No | ||
| priority | No | ||
| project_id | No | ||
| section_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Create' implies a write operation, it doesn't mention authentication requirements, rate limits, error conditions, or what happens on success (e.g., returns task ID). It also doesn't warn about parameter interactions or default behaviors beyond the minimal 'optional' notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately front-loaded with the core purpose, but the parameter documentation is lengthy (17 items). While necessary given the parameter count, it could be more structured (e.g., grouping related parameters). Some redundancy exists (e.g., 'optional' repeated for each parameter), but overall it's reasonably efficient for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 17 parameters, 0% schema coverage, no annotations, and no output schema, the description does a decent job covering parameter semantics but lacks critical behavioral context. It doesn't explain what the tool returns, error handling, or system constraints. The parameter documentation is strong, but other aspects are incomplete for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 17 parameters, the description provides comprehensive semantic context for every parameter. It explains what each parameter represents (e.g., 'Natural language due date like 'tomorrow'', 'Task priority from 1 (normal) to 4 (urgent)'), clarifies optionality, and provides format examples that go far beyond what the bare schema offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new task in Todoist') and resource ('task'), distinguishing it from sibling tools like todoist_update_task or todoist_close_task. It immediately lists key optional fields (description, due date, priority) that help differentiate its scope from other task-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like todoist_update_task or todoist_get_tasks. It doesn't mention prerequisites (e.g., needing project/section IDs from other tools), nor does it clarify when certain parameters are mutually exclusive (e.g., due_string vs due_date). Usage context is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_delete_projectC
Deletes a project from the user's Todoist account
Args: project_id: ID of the project to delete
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the destructive action ('Deletes') but lacks critical details: whether deletion is permanent or reversible, if it cascades to tasks/sections, required permissions, error conditions, or confirmation prompts. This is inadequate for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose in the first sentence. The 'Args:' section adds parameter details without redundancy. While efficient, it could be more structured (e.g., bullet points) but avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description is incomplete. It misses behavioral implications (irreversibility, cascading effects), error handling, and response format. Given the complexity of deletion operations and lack of structured data, more context is needed for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no parameter documentation. The description adds the parameter 'project_id' with a brief explanation ('ID of the project to delete'), which clarifies its purpose. However, it doesn't specify format constraints (e.g., numeric vs. string), validation rules, or where to obtain the ID, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Deletes') and resource ('a project from the user's Todoist account'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like todoist_delete_task or todoist_delete_section, which perform similar deletion operations on different resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing project), exclusions, or comparisons to sibling tools like todoist_update_project for modifying instead of deleting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_delete_sectionC
Deletes a section from Todoist
Args: section_id: ID of the section to delete
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Deletes' implies a destructive mutation, it doesn't specify whether deletion is permanent, reversible, requires specific permissions, or affects associated tasks. This leaves critical behavioral traits undocumented for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences that directly address purpose and parameters. The 'Args:' section is structured but could be more integrated. There's no wasted text, though it could be slightly more front-loaded by merging the parameter explanation into the main sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permanence, permissions, or error conditions, nor does it explain what happens to tasks within the section. Given the complexity of deletion operations, more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal parameter semantics beyond the schema. It states 'section_id: ID of the section to delete' which clarifies the parameter's purpose, but with 0% schema description coverage and only 1 parameter, this provides basic compensation. The baseline would be 4 for 0 parameters, but with 1 parameter and some added meaning, 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Deletes') and resource ('a section from Todoist'), making the purpose immediately understandable. However, it doesn't differentiate this tool from other deletion tools like 'todoist_delete_project' or 'todoist_delete_task' beyond specifying the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid section_id), consequences of deletion, or when to choose this over deleting a project or task. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_delete_taskC
Delete a task from Todoist
Args: task_id: ID of the task to delete
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool deletes a task, implying a destructive mutation, but doesn't specify whether deletion is permanent, reversible, requires specific permissions, or has side effects (e.g., affecting subtasks). This leaves significant gaps in understanding the tool's behavior beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core action, but the 'Args:' section is redundant since the schema already documents parameters. This adds unnecessary length without new value, though the overall text remains relatively concise at two sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover critical aspects like return values (e.g., success confirmation, error handling), behavioral nuances (e.g., deletion permanence), or integration with sibling tools, leaving the agent under-informed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter 'task_id' by explaining it's 'ID of the task to delete', which clarifies its purpose beyond the schema's minimal title 'Task Id'. With 0% schema description coverage and only one parameter, this compensation is adequate, though it could benefit from format examples (e.g., numeric vs. string ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('a task from Todoist'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'todoist_close_task' or 'todoist_delete_project', which would require more specific language about what distinguishes task deletion from other deletion or completion operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'todoist_close_task' or 'todoist_delete_project'. It lacks context about prerequisites (e.g., task must exist), consequences (e.g., permanent deletion vs. archiving), or typical use cases, leaving the agent with minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_projectC
Get a single project from Todoist
Args: project_id: ID of the project to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it 'retrieves' a project. It doesn't disclose whether this requires authentication, has rate limits, returns error conditions, or what format the response takes. For a read operation with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately brief with a clear purpose statement followed by parameter documentation. However, the 'Args:' section formatting is somewhat redundant when there's only one parameter, and the overall content could be more front-loaded with critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and minimal parameter documentation, the description is incomplete. It doesn't explain what information is returned about the project, error handling, authentication requirements, or how this differs from the plural 'get_projects' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and only 1 parameter, the description adds crucial meaning by explaining that 'project_id' is the 'ID of the project to retrieve'. This fully compensates for the schema gap, though it doesn't provide format examples or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'a single project from Todoist', which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling 'todoist_get_projects' (plural) beyond the 'single project' phrasing, which is implied but not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'todoist_get_projects' or 'todoist_get_task'. It mentions retrieving by project_id but doesn't explain when you'd want a single project versus listing all projects or working with tasks/sections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_projectsB
Get all projects from the user's Todoist account
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read operation ('Get') but doesn't disclose authentication requirements, rate limits, pagination, sorting, or return format. For a tool with zero annotation coverage, this leaves critical behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core action ('Get all projects') and efficiently specifies the source ('from the user's Todoist account'). Every element earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a data retrieval tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'all projects' entails (e.g., archived vs. active, ordering), authentication needs, or response structure. For a tool in a family with many siblings, more context is needed to guide proper use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description adds no parameter information, which is acceptable given the baseline. No compensation is needed, and it doesn't contradict the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all projects'), specifying the scope ('from the user's Todoist account'). It distinguishes from sibling 'todoist_get_project' (singular) by indicating retrieval of all projects rather than a specific one. However, it doesn't explicitly differentiate from other list-like siblings like 'todoist_get_sections' or 'todoist_get_tasks'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 doesn't mention prerequisites (e.g., authentication), compare with 'todoist_get_project' for single-project retrieval, or indicate use cases like project listing versus task listing. The description only states what it does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_sectionC
Get a single section from Todoist
Args: section_id: ID of the section to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action ('Get a single section') without mentioning whether this is a read-only operation, what permissions are required, how errors are handled, or what the return format looks like. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences that directly address the tool's purpose and its single parameter. The structure is front-loaded with the main purpose first, followed by parameter details. There's no wasted text, though the formatting with 'Args:' could be slightly cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (retrieval operation with one parameter), no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It lacks information about return values, error conditions, authentication needs, and how it differs from sibling retrieval tools, making it inadequate for full contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It adds the parameter 'section_id' with a brief explanation ('ID of the section to retrieve'), which provides basic semantics beyond the schema's title 'Section Id'. However, with only one parameter documented and no details about format, validation, or examples, it doesn't fully compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'a single section from Todoist', which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'todoist_get_sections' (plural) or 'todoist_get_project', leaving some room for confusion about when to use this versus other retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'todoist_get_sections' for retrieving multiple sections or 'todoist_get_project' for related data, nor does it specify prerequisites or contextual triggers for selecting this specific retrieval method.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_sectionsC
Get all sections from the user's Todoist account
Args: project_id: Filter sections by project ID (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'gets' data, implying a read-only operation, but doesn't disclose behavioral traits like authentication needs, rate limits, pagination, error handling, or what 'all sections' entails (e.g., if it returns archived sections). This leaves significant gaps for an agent to understand how to invoke it safely and effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences: a clear purpose statement and a parameter explanation. It's front-loaded with the main action, and the 'Args' section adds necessary detail without redundancy. There's minimal waste, though it could be slightly more structured (e.g., bullet points).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, and no output schema, the description is incomplete. It covers the basic purpose and one parameter but lacks details on authentication, return values (e.g., structure of sections), error cases, or how it fits with sibling tools. For a retrieval tool in a complex API, this leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining 'project_id' as a filter for sections, which clarifies its optional role beyond the schema's basic type. However, with 1 parameter and no schema descriptions, it doesn't detail format (e.g., string format for ID) or provide examples, leaving the agent with incomplete guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all sections') and resource ('from the user's Todoist account'), making the purpose evident. It distinguishes from 'todoist_get_section' (singular) by implying it retrieves multiple sections, but doesn't explicitly differentiate from other sibling tools like 'todoist_get_projects' or 'todoist_get_tasks'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance by mentioning an optional 'project_id' filter, but offers no explicit advice on when to use this tool versus alternatives like 'todoist_get_section' (for a single section) or other retrieval tools. There's no mention of prerequisites, typical use cases, or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_taskC
Get an active task from Todoist
Args: task_id: ID of the task to retrieve
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this retrieves an 'active' task, which implies it won't return completed tasks, adding some useful context. However, it doesn't disclose error conditions (e.g., what happens with invalid task IDs), authentication requirements, rate limits, or what format the returned task data will have.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately brief with two sentences: a clear purpose statement followed by parameter documentation. The 'Args:' section is well-structured but could be more integrated. No wasted words, though the formatting could be slightly cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with 1 parameter and no output schema, the description is incomplete. It doesn't explain what 'active' means operationally, what data will be returned, error handling, or how this differs from sibling retrieval tools. With no annotations and no output schema, more behavioral context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides the parameter name ('task_id') and clarifies it's 'ID of the task to retrieve', which adds basic semantic meaning beyond the schema's type information. However, it doesn't explain format (e.g., numeric string, UUID), where to find task IDs, or validation rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('an active task from Todoist'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'todoist_get_tasks' (plural) or explain what distinguishes retrieving a single task versus multiple tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'todoist_get_tasks' or 'todoist_close_task'. It doesn't mention prerequisites (e.g., needing an existing task ID) or contextual factors that would make this the appropriate choice over other retrieval options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_get_tasksB
Get a list of tasks from Todoist with various filters
Args: project_id: Filter tasks by project ID (optional) filter: Natural language filter like 'today', 'tomorrow', 'next week', 'priority 1', 'overdue' (optional) priority: Filter by priority level (1-4) (optional) limit: Maximum number of tasks to return (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| limit | No | ||
| priority | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the tool 'Get[s] a list of tasks' and supports filters, but lacks details on permissions, rate limits, pagination, or response format. For a read operation with zero annotation coverage, this is insufficient to inform the agent about key behavioral traits like safety or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose, followed by a structured 'Args:' section. Each parameter explanation is brief and relevant, with no wasted sentences. Minor improvements could include merging the purpose and filter details more seamlessly, but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 optional parameters, no output schema, no annotations), the description is partially complete. It covers parameter semantics well but lacks behavioral context, usage guidelines, and output details. For a read tool with filtering, it's adequate as a minimum viable description but has clear gaps in guiding the agent fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful context for all four parameters: 'project_id' filters by project ID, 'filter' uses natural language examples, 'priority' specifies levels 1-4, and 'limit' sets maximum returns. This goes beyond the schema's basic titles, providing practical usage hints, though it could include more details like format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a list of tasks from Todoist with various filters.' It specifies the verb ('Get') and resource ('tasks from Todoist'), making the action clear. However, it doesn't explicitly differentiate from sibling tools like 'todoist_get_task' (singular) or mention that this is for batch retrieval versus single-task operations, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'todoist_get_task' for single tasks or 'todoist_get_projects' for project lists, nor does it specify prerequisites or contexts for filtering. Usage is implied through parameter descriptions but not explicitly stated, leaving gaps for agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_reopen_taskA
Reopen a task in Todoist (i.e., mark the task as incomplete)
Args: task_id: ID of the task to reopen
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action ('reopen') but does not disclose behavioral traits such as required permissions, whether this affects task history or due dates, error conditions (e.g., if the task is already open), or what the response looks like. This is a significant gap for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose clearly, and the 'Args' section efficiently documents the parameter. There is zero waste, with every sentence earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation with no annotations, 1 parameter, and no output schema), the description is incomplete. It lacks details on behavioral aspects like permissions, side effects, error handling, and return values, which are crucial for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the input schema by explaining that 'task_id' is the 'ID of the task to reopen', which clarifies the parameter's purpose. With 0% schema description coverage and only 1 parameter, this adequately compensates, though it could specify format (e.g., numeric vs. string).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('reopen') and resource ('a task in Todoist'), with the parenthetical explanation 'mark the task as incomplete' providing precise meaning. It effectively distinguishes from sibling tools like 'todoist_close_task' (which does the opposite) and 'todoist_update_task' (which might modify other fields).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for marking incomplete tasks, but does not explicitly state when to use this versus alternatives like 'todoist_update_task' with a status field or 'todoist_create_task' for new tasks. It provides clear context by specifying the action, but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_update_projectB
Update an existing project in Todoist
Args: project_id: ID of the project to update name: New name for the project (optional) color: New color for the project (optional) is_favorite: Whether the project should be marked as favorite (optional) view_style: View style of the project, either 'list' or 'board' (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| is_favorite | No | ||
| name | No | ||
| project_id | Yes | ||
| view_style | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states this is an update operation (implies mutation) but doesn't disclose behavioral traits like: what permissions are required, whether changes are reversible, if partial updates are allowed (implied by optional parameters but not stated), rate limits, or what happens on success/failure. The description is minimal beyond stating it's an update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the purpose clearly. The parameter explanations are organized in a simple list format. There's no wasted text, though it could be more structured (e.g., separating required vs optional). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, and no output schema, the description is moderately complete. It covers the purpose and parameters well, but lacks behavioral context (permissions, side effects) and output information. For a mutation tool with 5 parameters, this is adequate but has clear gaps - especially around what happens after the update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all 5 parameters: identifies 'project_id' as required and others as optional, explains what each parameter controls (e.g., 'name: New name for the project', 'view_style: either 'list' or 'board''). This adds significant value beyond the bare schema, though it doesn't specify format constraints (e.g., color codes).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Update an existing project in Todoist' - a specific verb ('Update') and resource ('project'). It distinguishes from siblings like 'todoist_add_project' (create) and 'todoist_delete_project' (delete), but doesn't explicitly contrast with 'todoist_get_project' (read). The purpose is clear but sibling differentiation could be more explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing project), when to choose update over delete+create, or how it differs from similar tools like 'todoist_update_task' or 'todoist_update_section'. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_update_sectionB
Updates a section in Todoist
Args: section_id: ID of the section to update name: New name for the section
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| section_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states this is an update operation, implying mutation, but doesn't cover critical aspects like required permissions, whether changes are reversible, error conditions (e.g., invalid section_id), or what the response looks like. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a clear 'Args:' section listing parameters. It's efficient with minimal waste, though the formatting (e.g., bullet-like indentation) could be slightly more polished for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is minimally adequate. It covers the purpose and parameters but lacks behavioral details (e.g., side effects, errors, response format). Given the complexity, it should do more to compensate for the missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no parameter descriptions. The description compensates by explaining both parameters: 'section_id' as 'ID of the section to update' and 'name' as 'New name for the section'. This adds essential meaning beyond the bare schema, though it doesn't detail format constraints (e.g., ID structure or name length limits).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Updates') and resource ('a section in Todoist'), making the purpose unambiguous. It distinguishes this from sibling tools like 'todoist_add_section' (create) and 'todoist_delete_section' (delete), though it doesn't explicitly differentiate from 'todoist_update_project' or 'todoist_update_task' which update different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing section), exclusions, or compare it to similar tools like 'todoist_update_project' or 'todoist_update_task'. The agent must infer usage from the tool name and context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_update_taskB
Update an existing task in Todoist
Args: task_id: ID of the task to update content: New content/title for the task (optional) description: New description for the task (optional) labels: New labels for the task (optional) priority: New priority level from 1 (normal) to 4 (urgent) (optional) due_string: New due date in natural language like 'tomorrow', 'next Monday' (optional) due_date: New specific date in YYYY-MM-DD format (optional) due_datetime: New specific date and time in RFC3339 format in UTC (optional) due_lang: 2-letter code specifying language in case due_string is not written in English (optional) assignee_id: The responsible user ID or null to unset (for shared tasks) (optional) duration: A positive integer for the amount of duration_unit the task will take (optional) duration_unit: The unit of time that the duration field represents (minute or day) (optional) deadline_date: Specific date in YYYY-MM-DD format relative to user's timezone (optional) deadline_lang: 2-letter code specifying language of deadline (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| assignee_id | No | ||
| content | No | ||
| deadline_date | No | ||
| deadline_lang | No | ||
| description | No | ||
| due_date | No | ||
| due_datetime | No | ||
| due_lang | No | ||
| due_string | No | ||
| duration | No | ||
| duration_unit | No | ||
| labels | No | ||
| priority | No | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states it's an update operation. It doesn't disclose behavioral traits like whether it requires specific permissions, if updates are reversible, rate limits, error conditions, or what happens when optional parameters are omitted. The description doesn't contradict annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose. The parameter explanations are necessary given the 0% schema coverage, though some formatting could be cleaner. Every sentence earns its place by documenting critical parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters with 0% schema coverage and no output schema, the description does well on parameters but lacks behavioral context. For a mutation tool with no annotations, it should explain more about the update operation's effects, permissions, or response format. The parameter coverage is excellent, but overall completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantic explanations for all 14 parameters, including format examples (e.g., 'YYYY-MM-DD', 'RFC3339 format in UTC'), value ranges (priority 1-4), language codes, and special meanings (assignee_id as null to unset). This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing task in Todoist' which specifies the verb (update) and resource (task). It distinguishes from siblings like todoist_create_task (create) and todoist_close_task (close), but doesn't explicitly contrast with todoist_update_project or todoist_update_section which update different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 is provided. The description doesn't mention prerequisites (e.g., needing an existing task ID), when not to use it (e.g., for creating new tasks), or how it differs from similar update tools for projects or sections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose targeting specific resources (projects, sections, tasks) and actions (add, get, update, delete, close, reopen). There is no overlap or ambiguity; for example, todoist_close_task and todoist_reopen_task are clearly differentiated, and each CRUD operation is uniquely named for its resource.
All tool names follow a consistent verb_noun pattern with the prefix 'todoist_' and snake_case throughout (e.g., todoist_add_project, todoist_get_tasks, todoist_update_task). This predictable naming scheme makes it easy for agents to understand and select the correct tool.
With 17 tools, the count is slightly high but reasonable for a comprehensive Todoist integration covering projects, sections, and tasks with full CRUD operations and additional actions like close/reopen. It's well-scoped for the domain, though it could be streamlined by combining some get operations.
The tool set provides complete CRUD coverage for projects, sections, and tasks, including lifecycle actions (close, reopen) and filtering capabilities. There are no obvious gaps; agents can manage the entire Todoist workflow from creation to deletion with all necessary operations available.
Maintenance
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
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Profile server that enables Claude to interact with Todoist, allowing users to create, retrieve, update, and manage tasks through natural language commands.62MIT
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables advanced task and project management in Todoist via Claude Desktop and other MCP-compatible clients.522MIT
- AlicenseBqualityDmaintenanceA comprehensive MCP server that provides full integration between Claude and Todoist, enabling task, project, section, and label management through 24 different tools with the complete Todoist API.30186MIT
- FlicenseAqualityDmaintenanceA simple task management server that enables users to add, list, complete, and delete tasks through natural language interactions in Claude Desktop.4
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mikemc/todoist-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server