Todoist AI MCP Server
OfficialEnables AI agents to access and modify Todoist accounts, allowing for actions such as finding tasks by date and adding new tasks to manage personal or team projects.
Click on "Deploy 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 AI MCP ServerAdd a task to buy milk tomorrow morning"
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
Library for connecting AI agents to Todoist. Includes tools that can be integrated into LLMs, enabling them to access and modify a Todoist account on the user's behalf.
These tools can be used both through an MCP server, or imported directly in other projects to integrate them to your own AI conversational interfaces.
Using tools
1. Add this repository as a dependency
npm install @doist/todoist-mcp2. Import the tools and plug them to an AI
Here's an example using Vercel's AI SDK.
import { findTasksByDate, addTasks } from '@doist/todoist-mcp'
import { TodoistApi } from '@doist/todoist-sdk'
import { streamText } from 'ai'
// Create Todoist API client
const client = new TodoistApi(process.env.TODOIST_API_KEY)
// Helper to wrap tools with the client
function wrapTool(tool, todoistClient) {
return {
...tool,
execute(args) {
return tool.execute(args, todoistClient)
},
}
}
const result = streamText({
model: yourModel,
system: 'You are a helpful Todoist assistant',
tools: {
findTasksByDate: wrapTool(findTasksByDate, client),
addTasks: wrapTool(addTasks, client),
},
})Related MCP server: Todoist MCP Server
Using as an MCP server
Quick Start
You can run the MCP server directly with npx:
npx @doist/todoist-mcpSetup Guide
The Todoist MCP server is available as a streamable HTTP service for easy integration with various AI clients:
Primary URL (Streamable HTTP): https://ai.todoist.net/mcp
Claude Desktop
Open Settings → Connectors → Add custom connector
Enter
https://ai.todoist.net/mcpand complete OAuth authentication
Cursor
Create a configuration file:
Global:
~/.cursor/mcp.jsonProject-specific:
.cursor/mcp.json
{
"mcpServers": {
"todoist": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://ai.todoist.net/mcp"]
}
}
}Then enable the server in Cursor settings if prompted.
Claude Code (CLI)
The fastest setup is the official Todoist plugin, which wires up the MCP server for you:
/plugin marketplace add doist/todoist-mcp
/plugin install todoist@doistOAuth runs in your browser the first time you use a Todoist tool. See Anthropic's plugin docs for more.
If you'd rather configure the MCP server manually, run:
claude mcp add --transport http todoist https://ai.todoist.net/mcpThen launch claude, execute /mcp, and select the todoist MCP server to authenticate.
Visual Studio Code
Open Command Palette → MCP: Add Server
Select HTTP transport and use:
{
"servers": {
"todoist": {
"type": "http",
"url": "https://ai.todoist.net/mcp"
}
}
}Other MCP Clients
npx -y mcp-remote https://ai.todoist.net/mcpFor more details on setting up and using the MCP server, including creating custom servers, see docs/mcp-server.md.
Features
A key feature of this project is that tools can be reused, and are not written specifically for use in an MCP server. They can be hooked up as tools to other conversational AI interfaces (e.g. Vercel's AI SDK).
This project is in its early stages. Expect more and/or better tools soon.
Nevertheless, our goal is to provide a small set of tools that enable complete workflows, rather than just atomic actions, striking a balance between flexibility and efficiency for LLMs.
For our design philosophy, guidelines, and development patterns, see docs/tool-design.md.
Available Tools
For a complete list of available tools, see the src/tools directory.
OpenAI MCP Compatibility
This server includes search and fetch tools that follow the OpenAI MCP specification, enabling seamless integration with OpenAI's MCP protocol. These tools return JSON-encoded results optimized for OpenAI's requirements while maintaining compatibility with the broader MCP ecosystem.
Dependencies
MCP server using the official @modelcontextprotocol/server
Todoist Typescript API client @doist/todoist-sdk
MCP Server Setup
See docs/mcp-server.md for full instructions on setting up the MCP server.
Local Development Setup
See docs/dev-setup.md for full setup instructions and CONTRIBUTING.md for contributor workflows and quality checks.
MCP Apps
This project includes support for MCP Apps – interactive UI widgets rendered inline in AI chat interfaces. Widgets provide rich visual representations of tool outputs (e.g., task lists) instead of plain text.
See docs/mcp-apps.md for the widget architecture, build pipeline, and development workflow.
Quick Start
After cloning and setting up the repository:
npm start- Build and run the MCP inspector for testingnpm run dev- Development mode with auto-rebuild and restartnpm run tool:list- List available tools for direct executionnpm run tool -- <tool-name> '<json-args>'- Run a tool directly without MCP
When using npm run tool, include -- before tool arguments so npm forwards them to scripts/run-tool.ts.
Example check before write operations:
npm run tool -- user-info '{}'
This confirms which Todoist account the current TODOIST_API_KEY is connected to.
run-tool uses TODOIST_API_KEY from your .env file (created from .env.example by npm run setup). Use a test account or a temporary project when running write operations to avoid modifying real data.
Contributing
See CONTRIBUTING.md for:
Development workflow
Running tools directly with
scripts/run-tool.tsTesting and quality checks
Commit conventions
Releasing
This project uses release-please to automate version management and package publishing.
How it works
Make your changes using Conventional Commits:
feat:for new features (minor version bump)fix:for bug fixes (patch version bump)feat!:orfix!:for breaking changes (major version bump)docs:for documentation changeschore:for maintenance tasksci:for CI changes
When commits are pushed to
main:Release-please automatically creates/updates a release PR
The PR includes version bump and changelog updates
Review the PR and merge when ready
After merging the release PR:
A new GitHub release is automatically created
A new tag is created
The
publishworkflow is triggeredThe package is published to npm
Available Tools
47 toolsadd-commentsA
Add multiple comments to tasks or projects, optionally notifying collaborators. Each comment must specify either taskId or projectId.
| Name | Required | Description | Default |
|---|---|---|---|
| comments | Yes | The array of comments to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes | The created comments. |
| failures | Yes | Comments that could not be added, identified by their content, with the reason for each. |
| totalCount | Yes | The total number of comments created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes | |
| addedCommentIds | Yes | The IDs of the added comments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive, open-world write, so the safety profile is covered. The description adds that the tool operates in batch and that notification is opt-in, which is useful context. What it omits is meaningful for a batch mutation: no statement about partial-failure semantics, duplicate handling, or permission requirements.
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?
Two short sentences, zero filler, with the batch scope and the per-item ID constraint front-loaded. Each sentence carries distinct 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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description covers the batch shape and the ID constraint. It is only marginally incomplete in not resolving whether both taskId and projectId may be supplied on the same comment.
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 coverage is 100%, so the baseline would be 3. The description genuinely adds meaning by stating that each comment must carry either taskId or projectId — a mutual-requirement constraint the schema does not encode (neither field is individually required and there is no oneOf). That is real value beyond the structured 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?
States a specific verb ('Add') and resource ('comments') with the batch aspect ('multiple') and the two valid parent resources (tasks or projects) made explicit. It is clearly distinguishable in verb from siblings like find-comments and update-comments, though it never names them directly.
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?
'Optionally notifying collaborators' and 'Each comment must specify either taskId or projectId' give preconditions for a valid call. However, there is no explicit guidance on when to use this versus update-comments (editing an existing comment) or find-comments, leaving the agent to infer the choice from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-filtersA
Add one or more new personal filters. Filters are saved custom views using query syntax to organize tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | The array of filters to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
| filters | Yes | The created filters. |
| failures | Yes | Filters that could not be created, with the reason for each. |
| totalCount | Yes | The total number of filters created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-idempotent, non-destructive mutation. The description adds useful domain context that filters are personal saved views using query syntax, but it does not disclose duplicate-name behavior, validation failures, or what is returned.
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 two concise sentences with no wasted wording. The primary action is front-loaded, followed by a useful clarification of what a filter is.
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 simple create operation with full schema coverage, annotations, and an output schema, the description is largely complete. A minor gap is that it does not mention duplicate handling or error behavior, but nothing essential for invocation is missing.
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 100%, so the schema already documents the filters array, required name and query fields, color, favorite status, and description. The description only adds that one or more filters are accepted and that queries use syntax, matching rather than exceeding the schema baseline.
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 states a specific verb and resource: adding new personal filters, described as saved custom views using query syntax. It distinguishes creation from updating or finding filters only implicitly through 'new', but an agent can tell what the tool does.
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?
Usage is implied: use this when creating one or more new personal filters. However, the description does not explicitly contrast with update-filters or find-filters, nor does it state conditions such as handling existing filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-labelsC
Add one or more new personal labels.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | The array of labels to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
| labels | Yes | The created labels. |
| failures | Yes | Labels that could not be created, with the reason for each. |
| totalCount | Yes | The total number of labels created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false and idempotent=false, so the safety profile is covered. The description adds only that labels are 'personal', and says nothing about duplicate-name behavior, partial-batch failure, or whether later calls overwrite prior labels — gaps that matter for a non-idempotent create.
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?
A single front-loaded sentence with zero waste. It is efficiently written, though its brevity leaves real questions unanswered rather than being a model of structured guidance.
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?
With rich schema coverage, full annotations and an output schema, the definition is minimally sufficient to invoke the tool. It is incomplete on batch semantics — whether one invalid or duplicate label fails the whole array — which is the main thing an agent can't derive from structured fields.
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 100% and the nested label object documents name, color (including fallback to charcoal), order and isFavorite in detail. The description contributes nothing beyond the schema, so the baseline of 3 applies.
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?
States a specific verb (add) and resource (new personal labels) with a scope qualifier ('personal') that hints at non-shared labels. It does not explicitly distinguish itself from update-labels or add-projects, so an agent must infer the boundary from the name alone.
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?
There is no when-to-use guidance, no exclusion against update-labels for existing labels, and no mention of what happens if a label name already exists. The only implicit signal is 'new', which the agent must interpret on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-projectsC
Add one or more new projects.
| Name | Required | Description | Default |
|---|---|---|---|
| projects | Yes | The array of projects to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Projects that could not be created, with the reason for each. |
| projects | Yes | The created projects. |
| totalCount | Yes | The total number of projects created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-read-only, non-idempotent, non-destructive mutation. The description adds no behavioral context such as duplicate handling, required permissions, or side effects beyond what annotations provide.
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 single sentence is front-loaded and free of fluff, but it is severely under-specified for a creation tool with a rich nested schema. Brevity here reflects omission rather than optimized conciseness.
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?
The schema and annotations cover most invocation details, and the output schema means return values need not be described. However, the description lacks usage and behavioral context that would help an agent choose and call this tool confidently.
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 100%, and the nested project fields are fully documented in the schema. The description adds no parameter meaning beyond the schema, so the baseline of 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 states a specific verb and resource: 'Add one or more new projects.' It clearly conveys project creation and batch scope, but does not differentiate from siblings such as update-projects or add-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 when-to-use guidance, prerequisites, or alternatives. It does not mention when to choose add-projects over update-projects or find-projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-remindersA
Add reminders to tasks. Supports three types: "relative" (minutes before due), "absolute" (specific date/time), or "location" (geofence-triggered). Each reminder must specify a taskId. Reminders notify their creator unless notifyUser says otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| reminders | Yes | Array of reminders to create (max 25). Each reminder must specify a type: "relative" (minutes before due), "absolute" (specific date/time), or "location" (geofence trigger). |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Reminders that could not be created, with the reason for each. |
| reminders | Yes | The created reminders. |
| totalCount | Yes | Total number of reminders created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes | |
| addedReminderIds | Yes | IDs of the created reminders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral default — reminders notify their creator unless notifyUser says otherwise — but says nothing about duplicate handling or whether re-adding the same reminder is safe, which matters given idempotentHint=false.
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?
Three tight sentences, front-loaded with the action and the type taxonomy, then the taskId requirement, then the recipient default. Nothing is wasted and no sentence repeats another.
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?
With an output schema, full annotation coverage, and a rich oneOf schema, the description supplies what structured fields cannot: the type taxonomy framing and the default recipient rule. The remaining gap is routing relative to update-reminders, which the sibling list makes relevant.
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 100%, so the schema already documents taskId, minuteOffset, due, locLat/locLong, service, etc. The description only restates the type taxonomy at a high level ("relative" minutes before due, "absolute" specific date/time, "location" geofence), adding framing but no field-level detail beyond 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 opens with a specific verb+resource ("Add reminders to tasks") and enumerates the three supported reminder types, so an agent knows exactly what the tool produces. It does not, however, differentiate itself from the sibling update-reminders or find-reminders, which keeps it short of a 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?
"Each reminder must specify a taskId" and the type breakdown imply when the tool applies (creating new reminders on existing tasks), but there is no explicit guidance on when to use this versus update-reminders/find-reminders, nor any stated prerequisites such as collaboration on the task's project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-sectionsC
Add one or more new sections to projects.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | Yes | The array of sections to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Sections that could not be created, with the reason for each. |
| sections | Yes | The created sections. |
| totalCount | Yes | The total number of sections created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say what happens on duplicate section names (relevant given idempotentHint=false), whether the batch is atomic, or whether permissions are required.
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?
A single front-loaded sentence with zero filler. It is arguably too terse for the tool's complexity, but that gap is captured under contextual completeness rather than counted as verbosity here.
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?
Output schema and rich annotations reduce the burden, and the schema fully documents the single nested parameter. Still missing is anything about duplicate handling, batch failure semantics, or ordering of created sections, which matters for a non-idempotent create 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?
Schema description coverage is 100%, with nested field descriptions for name, projectId (including the 'inbox' sentinel) and description already documented. The description contributes no parameter meaning beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource ('Add ... new sections to projects') and makes the batch nature explicit with 'one or more.' It is distinguishable from update-sections/find-sections by convention, but the description never names them, so sibling differentiation is only implicit.
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 when-to-use guidance, no exclusions, no mention of update-sections as the alternative for modifying existing sections. The only signal is the verb 'Add', which the agent must infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-tasksB
Add one or more tasks to a project, section, or parent. Supports assignment to project collaborators.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | The array of tasks to add (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The created tasks. |
| failures | Yes | Tasks that could not be created, with the reason for each. |
| totalCount | Yes | The total number of tasks created. |
| failureCount | Yes | |
| successCount | Yes | |
| totalRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the mutation profile is covered. The description's only added claim, 'supports assignment to project collaborators', is already documented on the responsibleUser property, and it says nothing about batch partial-failure behavior or the collaborator-membership prerequisite beyond what the schema states.
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?
Two compact sentences with the verb and targets front-loaded, no filler. It is efficient but so terse that it barely engages with a fairly complex batch payload.
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?
An output schema and full parameter documentation exist, so return values need not be explained. However, for a non-idempotent batch mutation this description omits the 25-task cap, duplicate-risk on retry, and what happens if only some tasks in the array fail – gaps that matter for correct invocation.
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 100% and the nested task properties are richly documented, so the baseline of 3 applies. The description adds only the vague 'one or more' framing and the container list, without any syntax, ordering, or required-field guidance beyond 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?
States a specific verb (add) and resource (tasks) plus the three target containers (project, section, parent), so an agent can distinguish it from update-tasks or add-sections. It stops short of explicitly naming the sibling it supersedes for modification.
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 phrase 'Add one or more tasks to a project, section, or parent' implies the usage context (task creation, batch-capable), but it never states when to prefer this over update-tasks or when to use add-sections instead. Usage is inferable rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze-project-healthAIdempotent
Trigger a new health analysis for a project. Use this when the health data is stale or you want a fresh assessment. The analysis may take time to complete — use get-project-health afterward to see updated results.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to analyze. This triggers a new health analysis which may take some time to complete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| health | Yes | The health response returned after triggering analysis. |
| message | Yes | A human-readable message about the analysis status. |
| projectId | Yes | The project ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context about the asynchronous nature: 'The analysis may take time to complete.' This goes beyond the annotations by telling the agent to expect a delay and to poll get-project-health for results.
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 two sentences with zero waste. It front-loads the action, then adds usage guidance and a timing caveat. Every word 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?
For a single-parameter, non-destructive tool with an output schema and a clear sibling for retrieval, the description covers the trigger condition, the async nature, and the follow-up step. It is complete for the tool's complexity.
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 coverage is 100%: the single parameter projectId is fully described in the schema with 'The ID of the project to analyze. This triggers a new health analysis which may take some time to complete.' The tool description does not add further parameter semantics, so the baseline of 3 applies.
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: 'Trigger a new health analysis for a project.' It uses a specific verb (trigger) and resource (project health), distinguishing it from siblings like get-project-health which retrieves results. The purpose is unambiguous.
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?
Provides explicit when-to-use guidance: 'Use this when the health data is stale or you want a fresh assessment.' It also names the alternative follow-up tool: 'use get-project-health afterward to see updated results.' This is strong guidance for selection and invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete-tasksADestructive
Complete one or more tasks by their IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | The IDs of the tasks to complete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Failed task completions with error details. |
| completed | Yes | The IDs of successfully completed tasks. |
| failureCount | Yes | The number of failed task completions. |
| successCount | Yes | The number of successfully completed tasks. |
| totalRequested | Yes | The total number of tasks requested to complete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnly=false, and idempotent=false, so the safety profile is covered. The description itself adds no additional behavioral context such as irreversibility, side effects, or relationship to other states, but it does not contradict the annotations.
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 one sentence, front-loaded, and contains no filler or redundant wording. Every part earns its place: the action, the resource, and the input basis.
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 single-parameter batch mutation tool backed by rich annotations and an output schema, the description provides enough to understand the core operation. It could mention the relationship to uncomplete-tasks or emphasize the destructive nature, but the annotations already supply the essential safety signal.
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 fully describes the only parameter, 'ids', including that it is an array of strings with minItems 1. The description repeats the concept of task IDs without adding extra meaning, constraints, or input-format details beyond 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 is specific: 'Complete one or more tasks by their IDs' clearly states the verb, resource, and required input. It also distinguishes the tool from sibling tools like uncomplete-tasks and update-tasks by naming the exact task-completion action.
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 intended usage is implicitly clear: provide task IDs and mark those tasks as completed. However, there is no explicit guidance about when not to use it, how it differs from update-tasks, or that tasks could later be reversed via uncomplete-tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-objectADestructiveIdempotent
Delete a project, section, task, comment, label, filter, reminder, or location_reminder by its ID. Projects can be deleted whether active or archived (find archived ones via find-projects with archivedStatus); note a workspace project must be archived before it can be deleted, while personal projects can be deleted regardless.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the entity to delete. | |
| type | Yes | The type of entity to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | Whether the deletion was successful. |
| deletedEntity | Yes | Information about the deleted entity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds nuance beyond the annotations (destructiveHint, idempotentHint) by specifying that workspace projects must be archived before deletion, while personal projects can be deleted regardless. It also implies that deletion of projects is permanent and that archived projects are found via find-projects. It is consistent with the annotations and provides additional operational context.
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 extremely concise and front-loaded: it lists the entity types in the first clause, then gives a focused note about project deletion and the archived subset. No unnecessary words, no fluff. Every sentence adds value.
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 range of deletable types and the nuance about project deletion, the description is quite complete. It covers the full scope, warns about the workspace archive rule, and references find-projects for archived ones. It omits explicit description of return behavior, but the presence of an output schema and the destructiveHint annotation make that acceptable. Overall, it provides sufficient operational context for an agent to use 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?
Both parameters (id, type) are fully described in the schema (100% coverage), including enum values for type. The description re-lists the allowed types and mentions the usage of ID, which adds little beyond what the schema already provides. The baseline of 3 is appropriate because the description does not deepen the meaning of the parameters beyond what is given.
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 that it deletes a project, section, task, comment, label, filter, reminder, or location_reminder by ID. It explicitly lists all supported types and uses a specific verb ('Delete') with the resource, distinguishing it as the deletion tool among sibling 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?
It provides clear conditional guidance for project deletion: archived vs. active, workspace (must be archived first) vs. personal (no prior requirement). It also directs to find archived projects via find-projects if needed, offering a context for use. No explicit 'when-not-to-use' is given because no other delete tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export-project-templateAIdempotent
Export an existing project as a Todoist template, either as CSV content or as a shareable URL. Use it to duplicate a project, share its structure, or hand the CSV to import-project-template. To read a project rather than export it, use find-tasks instead — it returns structured tasks rather than raw CSV. The project itself is not modified, but the "url" format uploads a copy and returns a link that anyone holding it can open.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | How to return the template. "file" returns the CSV content, which can be passed straight back to import-project-template. "url" returns a shareable download link instead, and is the better choice for large projects because it does not return the whole file. | file |
| projectId | Yes | The ID of the project to export as a template. | |
| useRelativeDates | No | Export due dates relative to the import date (e.g. "day 3") instead of absolute dates. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | The format the template was exported in. |
| content | No | The template as CSV content. Only present when format is "file". |
| fileUrl | No | The shareable download URL. Only present when format is "url". |
| fileName | No | The generated template file name. Only present when format is "url". |
| lineCount | No | Number of rows in the exported CSV. Only present when format is "file". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, so the safety profile is partially covered; the description adds the non-obvious facts that the source project is not modified and that the 'url' format uploads a copy returning a publicly openable link. This is real value beyond annotations, though permission requirements and size limits are left implicit (large-project guidance lives in the schema).
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?
Three tight sentences, front-loaded with the action and its outputs, then use cases, then the sibling pointer, then the side-effect caveat. No repeated or filler content.
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?
With an output schema present, return values needn't be explained, and the description still covers formats, side effects, and the correct sibling for read-only needs. Minor gap: nothing about required permissions or workspace scope for the upload path, which matters for an open-world 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?
Schema description coverage is 100% and the format enum is fully documented in the schema, including the large-project rationale. The description only echoes that two formats exist and says nothing about useRelativeDates, so it adds no semantics beyond the schema — baseline 3 applies.
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?
Opens with a specific verb+resource ('Export an existing project as a Todoist template') and immediately names the two output forms (CSV content or shareable URL). An agent can distinguish this from import-project-template and find-tasks without opening any schema.
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?
Gives concrete use cases (duplicate a project, share its structure, hand CSV to import-project-template) and an explicit exclusion: 'To read a project rather than export it, use find-tasks instead — it returns structured tasks rather than raw CSV.' Both when-to-use and the named alternative are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchARead-onlyIdempotent
Fetch the full contents of a task or project by its ID. The ID should be in the format "task:{id}" or "project:{id}". (Comments may exist; use find-comments to retrieve them.)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | A unique identifier for the document in the format "task:{id}" or "project:{id}". |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The ID of the fetched document. |
| url | Yes | The URL of the document. |
| text | Yes | The text content of the document. |
| title | Yes | The title of the document. |
| metadata | No | Additional metadata about the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context by stating that the tool returns the full contents and explicitly noting that comments are not included and should be fetched separately via find-comments.
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?
Two sentences with no filler. The core action is front-loaded, followed by the required ID format and a concise caveat about comments. 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 the single parameter, robust annotations, and an existing output schema, the description covers everything needed to invoke the tool correctly: what it fetches, the ID format, and what it does not return. No critical information is missing.
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 100%, and the single 'id' parameter is already documented with the exact format. The tool description repeats that format rather than adding new semantic meaning, so it meets the baseline without exceeding it.
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 states a specific verb ('Fetch') and resource ('full contents of a task or project by its ID'), and gives the exact ID formats. This makes it clearly distinct from the many sibling find* and search tools, which are for discovery rather than retrieval by known ID.
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?
It clearly conveys that the tool is for fetching a single task or project via a prefixed ID, and it explicitly directs comment retrieval to find-comments. It does not explicitly enumerate alternatives like find-tasks or find-projects, but the 'by its ID' framing provides enough contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch-objectARead-onlyIdempotent
Fetch a single task, project, comment, or section by its ID. Use this when you have a specific object ID and want to retrieve its full details. Set includeChildren to also get its direct subtasks or sub-projects.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The unique ID of the object to fetch. | |
| type | Yes | The type of object to fetch. | |
| includeChildren | No | Also return the direct children of the object: subtasks for a task, sub-projects for a project. Returns childCount plus a compact list, flagging each child that has children of its own. Use this to check whether a task hides subtasks instead of a speculative find-tasks lookup. Ignored for comments and sections. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The ID of the fetched object. |
| type | Yes | The type of object fetched. |
| object | Yes | The fetched object data. |
| children | No | Direct children only: subtasks for a task, sub-projects for a project. Completed subtasks and archived sub-projects are excluded. |
| childCount | No | The number of direct children listed in children. Only present when children were requested and the type supports them. 0 means the object definitively has none. |
| childrenError | No | Present when the children lookup failed or returned incomplete information. When no children are listed alongside it, childCount is unknown - do not read its absence as "no children". |
| hasMoreChildren | No | Present when the object has more than 25 direct children and the list was truncated. Page through the rest with find-tasks by parentId for subtasks, or find-projects for sub-projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that returning an object yields "full details"; it says nothing about behavior for an unknown ID, a mismatched type, or permission failures. It does not contradict the annotations.
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?
Three short sentences, front-loaded with the resource scope, then the usage condition, then the optional flag. Nothing is redundant or padded.
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?
With an output schema present, return-value explanation is unnecessary, and annotations plus 100% schema coverage handle most remaining gaps. The description covers what matters for correct invocation; only error/not-found behavior is unaddressed, which is minor for a pure read 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?
Schema description coverage is 100%, so the schema already documents all three parameters, including the detailed includeChildren semantics (childCount, compact list, ignored for comments/sections). The description's includeChildren sentence mostly restates the schema, so baseline 3 applies.
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 gives a specific verb ("Fetch") and enumerates the exact resources (task, project, comment, section) plus the lookup key (ID). It implicitly separates itself from the find-* siblings by framing the tool around a known ID and full detail retrieval, but it never names an alternative outright.
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?
"Use this when you have a specific object ID and want to retrieve its full details" is a clear triggering condition that naturally excludes search-style tools. It lacks an explicit when-not or a named alternative such as find-tasks/find-projects, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-activityARead-onlyIdempotent
Retrieve activity logs to monitor and audit changes in Todoist. Shows events from all users by default (use initiatorId to filter by specific user). To answer what someone completed in a period, including recurring task occurrences, use objectType "task", eventType "completed", and dateFrom/dateTo. For a first-person question ("what did I get done"), also set initiatorId to the current user from user-info, or the answer includes collaborators' completions. Track task completions, updates, deletions, project changes, and more with flexible filtering. Activity history availability and retention depend on the user plan.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of activity events to return. | |
| cursor | No | Pagination cursor for retrieving the next page of results. | |
| dateTo | No | Exclusive end of the activity range, as an ISO 8601 date or date-time. For all events on 2026-08-02, use "2026-08-03T00:00:00-04:00". Natural-language dates such as "tomorrow" are not supported. | |
| taskId | No | Filter events by parent task ID (for subtask events). | |
| dateFrom | No | Inclusive start of the activity range, as an ISO 8601 date or date-time. For all events on one local calendar day, use that day's start, for example "2026-08-02T00:00:00-04:00". Natural-language dates such as "tomorrow" are not supported. | |
| objectId | No | Filter by specific object ID (task, project, or comment). Requires objectType. | |
| eventType | No | Type of event to filter by. | |
| projectId | No | Filter events by parent project ID. | |
| objectType | No | Type of object to filter by. | |
| initiatorId | No | Filter by the user ID who initiated the event. A first-person question ("what did I complete") needs this: without it the results cover every collaborator. Get the ID from user-info when you do not already have it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | The activity events. |
| hasMore | Yes | |
| nextCursor | No | |
| totalCount | Yes | The total number of events in this page. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds non-obvious behavior the annotations cannot: results span all users unless initiatorId is set, and history availability/retention vary by plan. Useful additions; pagination flow and result volume are left to the schema.
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?
Front-loaded with the core purpose, then query recipes, then the caveat — a sensible ordering. The sentence "Track task completions, updates, deletions, project changes, and more with flexible filtering" is largely filler that restates earlier content.
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?
With an output schema present and 100% param coverage, the description only needs to supply selection logic and gotchas, which it does (default scope, initiatorId rule, retention). Pagination behavior across the cursor and how large histories are returned is the only notable omission.
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 coverage is 100%, so baseline would be 3, but the description adds real semantic value on top: the initiatorId/first-person rule, the objectType+eventType combination that answers completion questions, and the default all-users scope. It does not add detail on limit/cursor or the date range semantics beyond what the schema documents.
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?
Specific verb+resource ("Retrieve activity logs") plus an explicit purpose (monitor and audit changes in Todoist) and a scope statement (all users by default). It distinguishes its coverage (completions, updates, deletions, project changes) but never names the closest sibling, find-completed-tasks, so an agent must reason about overlap itself.
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?
Very clear situational routing: objectType "task" + eventType "completed" + dateFrom/dateTo for period-completion questions, and initiatorId for first-person questions, with the failure mode spelled out ("or the answer includes collaborators' completions"). It stops short of naming alternatives or stating when to prefer find-completed-tasks instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-commentsARead-onlyIdempotent
Find comments by task, project, or get a specific comment by ID. Exactly one of taskId, projectId, or commentId must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of comments to return | |
| cursor | No | Pagination cursor for retrieving more results. | |
| taskId | No | Find comments for a specific task. | |
| commentId | No | Get a specific comment by ID. | |
| projectId | No | Find comments for a specific project. Project ID should be an ID string, or the text "inbox", for inbox tasks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | Yes | |
| comments | Yes | The found comments. |
| searchId | Yes | The ID that was searched for (comment, task, or project ID). |
| nextCursor | No | |
| searchType | Yes | The type of search performed: "single" (comment ID), "task" (task ID), or "project" (project ID). |
| totalCount | Yes | The total number of comments in this page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, idempotentHint, destructiveHint) already convey the non-mutating nature. The description adds no extra side-effect information, but it does not contradict the annotations either. Given the annotations cover the key behavioral aspects, a score of 3 is appropriate.
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 that conveys all essential information without unnecessary elaboration. It is well-structured and easily parsed.
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?
The description covers the input requirements and the purpose. While it does not specify the return format, for a straightforward find operation this is not critical. The absence of output schema is not a major gap given the simplicity of the 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?
The description adds the mutual exclusivity rule that is not evident from the schema alone, which is vital for correct usage. However, it does not elaborate beyond that; the schema descriptions for individual parameters are minimal, but the description compensates with the exclusivity constraint.
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 finds comments by task, project, or ID, and the verb 'find' specifies a read-only search operation. It distinguishes itself from sibling tools like find-tasks or find-projects by focusing specifically on comments.
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 explicitly states that exactly one of taskId, projectId, or commentId must be provided, which is a crucial usage constraint. While it does not explicitly contrast with alternatives, the tool's purpose is unambiguous for comment lookup scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-completed-tasksARead-onlyIdempotent
Get completed tasks in a date range. For "what did I complete/get done" questions, use find-activity instead — it reports completion events, including every occurrence of a recurring task, which this tool does not. since/until are optional and default to a 7-day window when omitted. Includes all collaborators by default. Person-specific queries (summaries, plans, reports) require responsibleUser.
| Name | Required | Description | Default |
|---|---|---|---|
| getBy | No | The method to use to get the tasks: "completion" to get tasks by completion date (ie, when the task was actually completed), "due" to get tasks by due date (ie, when the task was due to be completed by). | completion |
| limit | No | The maximum number of tasks to return. | |
| since | No | Optional start date for completed tasks. Format: YYYY-MM-DD. Defaults to 6 days before until (or today if until is omitted), resulting in a 7-day window. | |
| until | No | Optional end date for completed tasks. Format: YYYY-MM-DD. Defaults to 6 days after since (or today if since is omitted), resulting in a 7-day window. | |
| cursor | No | The cursor to get the next page of tasks (cursor is obtained from the previous call to this tool, with the same parameters). | |
| labels | No | The labels to filter the tasks by | |
| parentId | No | The ID of the parent task to get the tasks for. | |
| projectId | No | The ID of the project to get the tasks for. Project ID should be an ID string, or the text "inbox", for inbox tasks. | |
| sectionId | No | The ID of the section to get the tasks for. | |
| workspaceId | No | The ID of the workspace to get the tasks for. | |
| labelsOperator | No | The operator to use when filtering by labels. This will dictate whether a task has all labels, or some of them. Default is "or". | |
| responsibleUser | No | Filter completed tasks assigned to this user. User ID, name, or email. For personal queries (summaries, plans, reports), set to current user from user-info to exclude collaborators. Defaults to all collaborators. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The found completed tasks. |
| hasMore | Yes | |
| nextCursor | No | |
| totalCount | Yes | The total number of tasks in this page. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the recurring-task limitation, the 7-day default window behavior, and that all collaborators are included by default. It stops short of describing pagination or result ordering, so a 4 rather than 5.
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?
Front-loads purpose, then sibling routing, then key parameter defaults — a sensible order with no wasted sentences. It is dense but each sentence carries information; minor compression could still improve 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 12-parameter tool with an output schema and full annotations, the description covers purpose, the critical alternative, defaults, and the collaborator/responsibleUser scoping rule. Combined with the rich schema and output schema, an agent has everything needed to call 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?
Schema coverage is 100%, so the baseline is 3; the description earns above that by clarifying the since/until default window and the responsibleUser semantics (defaults to all collaborators, set to current user for personal reports). It doesn't elaborate on getBy, limit, or labels beyond the schema, so not a full 5.
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?
States a specific verb (get) and resource (completed tasks) with explicit scope (date range), and immediately distinguishes itself from find-activity. An agent can tell exactly what this returns versus the sibling without opening either schema.
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?
Explicitly routes 'what did I complete' questions to find-activity and explains the recurring-task caveat that differentiates the two. It also tells the agent that person-specific queries require responsibleUser, giving concrete when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-filtersARead-onlyIdempotent
List all personal filters or search for filters by name. Filters are saved custom views that use query syntax to organize tasks (e.g. "today & p1", "#Work & overdue").
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Search for a filter by name (partial and case insensitive match). If omitted, all filters are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| filters | Yes | The found filters. |
| totalCount | Yes | The total number of filters returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral scope beyond annotations by specifying 'personal filters' and explaining the filter concept, which helps the agent understand what data will be returned.
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?
Two sentences with no filler: the primary operation is front-loaded, and the clarifying example is compact and informative. 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?
For a low-complexity, single-optional-parameter read-only tool with a full output schema, the description is complete. It explains the domain concept, the two modes of invocation, and the scope without requiring additional context.
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 100%, so the schema fully documents the 'search' parameter including partial and case-insensitive matching and the omitted-parameter behavior. The description only restates 'by name' and adds no new parameter semantics beyond 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 uses a specific verb ('List'/'search') with a clear resource ('filters') and scope ('personal'). It also explains what a filter is with concrete query syntax examples, making the tool's purpose unmistakable and distinguishable from task or project finders.
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 clearly conveys the two usage modes: list all filters or search by name. It does not explicitly name alternatives or exclusions, but the definition of filters as saved custom views gives enough context for an agent to know when this tool applies versus task/project search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-labelsARead-onlyIdempotent
List personal labels and shared labels. Personal labels have full metadata (id, name, color, order, isFavorite) and support pagination and name search (partial, case insensitive). Shared labels are labels used on tasks shared with you — they are returned as names only (no IDs or metadata). When searching, all matching personal labels are fetched across all pages and returned as a single result set (limit and cursor are ignored). When not searching, personal labels are returned with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of labels to return. | |
| cursor | No | The cursor to get the next page of labels (cursor is obtained from the previous call to this tool, with the same parameters). Ignored when searchText is provided. | |
| searchText | No | Search for a label by name (partial and case insensitive match). Supports wildcards (e.g. "work*" for prefix match). Use "\*" for a literal asterisk. If omitted, all labels are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| labels | Yes | The found personal labels. |
| hasMore | Yes | |
| nextCursor | No | |
| totalCount | Yes | The total number of labels in this page. |
| sharedLabels | Yes | Names of all shared labels visible to you. These have no IDs or metadata — use their names directly when filtering tasks. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing the pagination behavior, search handling (ignoring limit/cursor), and the distinction between personal and shared label metadata. It also discloses that shared labels lack IDs and metadata, which is crucial for downstream usage.
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, starting with the general purpose, then explaining the two types of labels, and then the two behavioral modes. It is dense but clear, with no fluff or redundant phrases, and every sentence adds distinct 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?
Given the tool's moderate complexity (two label types, pagination, search behavior), the description covers all major aspects: what is returned, how pagination works, how search affects results, and the metadata difference. Combined with the rich annotations, it is complete for an agent to use 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 schema covers the parameters well (100% coverage), so the description adds context beyond the schema by explaining how they interact: limit/cursor are ignored during search, and searchText supports wildcards. That said, it doesn't add unique high-value info beyond what the schema already describes, but it does contextualize usage.
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 what the tool lists labels, distinguishing personal labels vs shared labels, making the purpose is clear and distinct from siblings like find-labels' siblings like find-tasks or find-projects. It specifies the resource (labels) and the action (list/search) with precision.
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?
It explicitly explains when to use the tool (listing labels, searching by name) and contrasts with alternatives implicitly: by noting shared labels are returned as names only. The description even notes the difference in behavior when searching vs not, guiding the agent on parameter usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-project-collaboratorsARead-onlyIdempotent
Find Todoist users (collaborators, teammates) by name or email to look up their user ID. Use this whenever the user asks to find, look up, or identify a person — e.g. "find Carrie's user ID", "who is Ernesto", "look up a user". When projectId is omitted, searches across the collaborators of every shared project the authenticated user has access to, plus the authenticated user themselves — an empty result means the person is not a collaborator on any project you share with them, not necessarily that they do not exist in Todoist. When projectId is provided, searches only that project. Partial, case-insensitive match on name and email.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Optional. If provided, searches only collaborators of this project. If omitted, searches across the collaborators of all shared projects the authenticated user can access (plus the authenticated user themselves) — use this for general "find a user" / "who is X" lookups. | |
| searchTerm | No | Search for a user by name or email (partial and case insensitive match). If omitted, all users are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| totalCount | Yes | The total number of users found. |
| projectInfo | No | Information about the project (only present when projectId was provided). |
| collaborators | Yes | The found users. |
| appliedFilters | Yes | |
| totalAvailable | No | The total number of available users before the search filter was applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, idempotentHint=true), the description adds critical behavioral nuance: explains search scope (all shared projects vs one project), notes partial case-insensitive matching, and importantly clarifies that an empty result doesn't mean the user doesn't exist in Todoist—just not a collaborator. This is valuable context for interpreting results.
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 compact—two sentences plus inline parameter explanations—and front-loads the purpose and usage. Every sentence adds value, with no filler or 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?
For a read-only lookup tool with 2 optional parameters, the description covers usage, scope, edge cases (empty result meaning), and matching behavior. An output schema exists, so return format is covered. Given tool complexity and rich annotations, this is complete.
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 100%, so the input schema already fully describes both parameters (projectId, searchTerm) with the same details the description provides. The description adds no new meaning beyond the schema, hence baseline 3.
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 finds Todoist users by name or email to look up their user ID, with concrete examples ('find Carrie's user ID', 'who is Ernesto'). It distinguishes from sibling find-tasks/find-projects by being specifically for people/collaborators.
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?
Provides explicit when-to-use guidance ('Use this whenever the user asks to find, look up, or identify a person') and clarifies behavior with/without projectId. It doesn't mention when not to use or name alternatives, but the context is clear enough for a single-purpose lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-projectsARead-onlyIdempotent
List all projects or search for projects by name. By default only active projects are returned; use archivedStatus ('archived' or 'all') to include archived projects. When searching or when archivedStatus is 'all', all matching projects are returned (pagination is ignored). Otherwise projects are returned with pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of projects to return. | |
| cursor | No | The cursor to get the next page of projects (cursor is obtained from the previous call to this tool, with the same parameters). | |
| searchText | No | Search for a project by name (partial and case insensitive match). Supports wildcards (e.g. "work*" for prefix match). Use "\*" for a literal asterisk. If omitted, all projects are returned. | |
| archivedStatus | No | Which projects to return by archive status: 'active' (default, non-archived only), 'archived' (archived only), or 'all' (both active and archived). Each project includes an isArchived field. Archived projects can be deleted via the delete-object tool (type: 'project'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | Yes | |
| projects | Yes | The found projects. |
| nextCursor | No | |
| totalCount | Yes | The total number of projects in this page. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, so description doesn't need to repeat that. It adds valuable behavioral details: that archived projects can be deleted via delete-object, and that pagination is ignored in certain modes. However, it doesn't explicitly state that returns are read-only beyond annotations, but that's covered. Also, it notes that archivedStatus 'all' ignores pagination, which is useful. Minor gap: no mention of rate limits or auth, but not critical. A 4 is appropriate given the good annotation coverage and useful edge-case note.
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?
Description is concise, three sentences, front-loaded with main purpose. Each sentence adds new information: purpose and default, pagination behavior, and the isArchived field/deletion note. No fluff.
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-only list/search tool with rich schema (100% coverage) and output schema present, description covers all key aspects: default filtering, pagination behavior, wildcard search, and archived status handling. It even links to deletion, which is helpful. Given complexity, it is complete.
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 100%, and the description adds significant extra meaning beyond schema: it explains the interaction between archivedStatus and pagination, and clarifies that archivedStatus 'all' can be used to include archived projectsament. It also mentions isArchived field and deletion path, enriching parameter semantics beyond raw 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?
Clearly states it lists or searches projects by name, with a specific verb 'find' and resource 'projects', and differentiates from siblings like find-tasks and find-sections by focusing on projects. Also explains default active-only behavior, adding specific scope.
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?
Explicitly explains when to use it: to list all projects or search by name. Mentions default behavior (active only), when to use archivedStatus, and how pagination behaves in different modes. Names alternative deletion via delete-object for archived projects, providing usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-remindersARead-onlyIdempotent
Find reminders by task ID (returns all reminder types), or get a specific reminder by its ID. Use reminderId for time-based reminders and locationReminderId for location reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | Find all reminders for a specific task. Returns both time-based and location reminders. | |
| reminderId | No | Get a specific time-based reminder (relative or absolute) by its ID. | |
| locationReminderId | No | Get a specific location reminder by its ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| searchId | Yes | The ID used for the search. |
| reminders | Yes | The found reminders (time-based and location). |
| searchType | Yes | The search type used: "task", "reminder", or "location_reminder". |
| totalCount | Yes | Total reminders in this response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful fact that a taskId lookup returns both time-based and location reminders, but says nothing about result volume, pagination, or behavior when no reminder matches.
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?
Two short clauses, front-loaded with the primary taskId use case followed by the single-item modes. No filler; the only mild redundancy is repeating the parameter-level distinctions already in the schema.
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?
With a full output schema present and 100% parameter description coverage, the description need not explain return values, and it correctly frames the two access patterns. Missing only the mutual exclusivity of the three ID parameters and any empty-result behavior.
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 100% and each parameter already carries its own description that essentially duplicates the description text ('Get a specific time-based reminder ... by its ID'). The description adds no format, prefix, or ID-provenance information beyond the schema, so baseline 3 applies.
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?
States a specific verb (find) and resource (reminders), and enumerates the two lookup modes: by task ID (returning all types) or by a specific reminder ID. It does not name or contrast any sibling (e.g. find-tasks, update-reminders), so it stops short of full differentiation.
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 gives mode-selection guidance (reminderId for time-based, locationReminderId for location), which is real usage direction. But there is no guidance on when to reach for this tool versus add-reminders/update-reminders or find-tasks, and no note that the three parameters are mutually exclusive alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-sectionsARead-onlyIdempotent
Search for sections by name or other criteria in a project. When searching, uses server-side search to avoid fetching all sections.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to search sections in. Project ID should be an ID string, or the text "inbox", for inbox tasks. | |
| searchText | No | Search for a section by name (partial and case insensitive match). Supports wildcards (e.g. "work*" for prefix match). Use "\*" for a literal asterisk. If omitted, all sections in the project are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sections | Yes | The found sections. |
| totalCount | Yes | The total number of sections found. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is read-only, idempotent, and non-destructive. The description adds useful behavioral context by disclosing that it uses server-side search to avoid fetching all sections, which is not apparent from the annotations.
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 two sentences, front-loaded with the main purpose, and each sentence adds value. There is no redundant or filler content.
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?
This is a simple two-parameter read-only search tool with a complete schema and output schema. The description, combined with the rich annotations and schema, provides enough context for an agent to select and invoke the tool 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?
Schema description coverage is 100%, with both projectId and searchText fully described in the schema. The description adds no additional parameter-level meaning, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search'), identifies the resource ('sections'), and scopes it to a project. It clearly separates this read/search tool from mutation siblings like add-sections and update-sections.
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 gives clear context: searching for sections within a project by name or criteria. It also adds a rationale for the server-side search behavior, but it does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-tasksARead-onlyIdempotent
Find tasks by text search, project/section/parent container, responsible user, labels, a raw Todoist filter string, or a saved filter by ID or name (filterIdOrName). At least one filter must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of tasks to return. | |
| cursor | No | The cursor to get the next page of tasks (cursor is obtained from the previous call to this tool, with the same parameters). | |
| filter | No | A raw Todoist filter query string (e.g. "today", "p1", "##Work", "(today | overdue) & p1"). Combined with other filters using AND. Cannot be used with projectId, sectionId, parentId, or filterIdOrName. | |
| labels | No | The labels to filter the tasks by | |
| parentId | No | Find subtasks of this parent task. | |
| projectId | No | Find tasks in this project. Project ID should be an ID string, or the text "inbox", for inbox tasks. | |
| sectionId | No | Find tasks in this section. | |
| searchText | No | The text to search for in tasks. | |
| filterIdOrName | No | The ID or name of a saved Todoist filter. The filter's query will be fetched and used to find tasks. Cannot be used with the `filter` parameter, projectId, sectionId, or parentId. | |
| labelsOperator | No | The operator to use when filtering by labels. This will dictate whether a task has all labels, or some of them. Default is "or". | |
| responsibleUser | No | Find tasks assigned to this user. Can be a user ID, name, or email address. The current user also includes unassigned tasks. | |
| responsibleUserFiltering | No | How to filter by responsible user when responsibleUser is not provided. "assigned" = only tasks assigned to others; "unassignedOrMe" = only unassigned tasks or tasks assigned to me; "all" = all tasks regardless of assignment. Default value will be `unassignedOrMe`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The found tasks. |
| hasMore | Yes | |
| nextCursor | No | |
| totalCount | Yes | The total number of tasks in this page. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds the non-obvious behavioral constraint that at least one filter must be supplied, but it does not add further context about pagination, filter-combination behavior, or permission requirements beyond what the schema provides.
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 front-loaded sentence plus a brief mandatory-filter constraint. It communicates the core capability and the key validation rule without repetition or filler.
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 rich annotations, 100% schema coverage, and an output schema, the description covers the essential purpose and the at-least-one-filter rule. It is nearly complete, though it could better route the agent among its date-oriented and completed-task siblings.
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 100%, so the input schema already documents all 12 parameters in detail. The description lists the filtering modes but adds no substantive parameter semantics beyond what is already present in the schema; baseline 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 states a clear verb ('Find') and resource ('tasks') and enumerates the supported filtering modes: text search, project/section/parent, responsible user, labels, raw Todoist filter, and saved filter. It does not explicitly distinguish this tool from close siblings like find-tasks-by-date or find-completed-tasks, so it falls short of a 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 includes the important constraint that at least one filter must be provided, which is useful usage guidance. However, it does not say when to use this tool versus find-tasks-by-date, find-completed-tasks, or search, so the alternative-selection guidance 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.
find-tasks-by-dateARead-onlyIdempotent
Get tasks by date range. startDate='today' includes overdue items. Default responsibleUserFiltering='unassignedOrMe' excludes others' tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of tasks to return. Default is 10. | |
| cursor | No | The cursor to get the next page of tasks (cursor is obtained from the previous call to this tool, with the same parameters). | |
| labels | No | The labels to filter the tasks by | |
| daysCount | No | The number of days to get the tasks for, starting from the start date. Default is 1 which means only tasks for the start date. | |
| startDate | No | The start date to get the tasks for. Format: YYYY-MM-DD, or 'today', which by default also includes overdue tasks. | |
| overdueOption | No | How to handle overdue tasks. 'overdue-only' to get only overdue tasks, 'include-overdue' to include overdue tasks along with tasks for the specified date(s), and 'exclude-overdue' to exclude overdue tasks. Default is 'include-overdue'. | |
| labelsOperator | No | The operator to use when filtering by labels. This will dictate whether a task has all labels, or some of them. Default is "or". | |
| responsibleUser | No | Filter tasks assigned to this user. User ID, name, or email. The current user also includes unassigned tasks. | |
| responsibleUserFiltering | No | Filter when responsibleUser is omitted. 'assigned'=assigned to others; 'unassignedOrMe'=unassigned+mine; 'all'=everyone. Default: 'unassignedOrMe'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The found tasks. |
| hasMore | Yes | |
| nextCursor | No | |
| totalCount | Yes | The total number of tasks in this page. |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a read-only, idempotent, non-destructive operation. The description adds useful behavioral context beyond them: 'today' includes overdue items, and the default responsibleUserFiltering excludes other users' tasks.
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?
Three short sentences with no filler. The core purpose and the two non-obvious default behaviors are front-loaded and easy to scan.
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?
The description covers the key non-obvious defaults for a date-based task query. Pagination and label-filtering mechanics are left to the fully documented schema and output schema, which is acceptable given their richness.
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 100%, so the schema already explains all nine parameters. The description reinforces two important parameter behaviors, but adds little unique syntax or meaning beyond the structured 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 states a specific verb and resource: 'Get tasks by date range.' This clearly distinguishes it from generic task-search or mutation siblings, though it does not explicitly name an alternative tool like find-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?
Usage is implied by the date-range focus and the two default-behavior notes, but the description never states when to choose this tool over siblings such as find-tasks or find-completed-tasks. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-overviewARead-onlyIdempotent
Get a Markdown overview. Called without a projectId, returns the account's project and section structure only — no tasks — for navigation. Pass a projectId (or "inbox" for the Inbox) to get that project's tasks grouped by section.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Optional project ID. Use "inbox" for the Inbox. If provided, returns that project's tasks grouped by section. If omitted, returns the project and section structure for the whole account with no tasks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | The type of overview returned. |
| inbox | No | Inbox information (account overview only). |
| stats | No | Statistics object (project overview only). |
| tasks | No | List of tasks (project overview only). |
| project | No | Project details (project overview only). |
| projects | No | List of projects with hierarchy, folders, and ordering (account overview only). |
| sections | No | List of sections (project overview only). |
| totalTasks | No | Total number of tasks. |
| projectInfo | No | Project information (project overview only). |
| totalProjects | No | Total number of projects (account overview only). |
| totalSections | No | Total number of sections (project overview only). |
| hasNestedProjects | No | Whether account has nested projects (account overview only). |
| tasksWithoutSection | No | Number of tasks not in any section (project overview only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value beyond annotations by disclosing the Markdown return format, the parameter-dependent mode switch, the exclusion of tasks in the account-wide view, and section grouping 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?
Two sentences with zero waste. The primary deliverable (Markdown overview) is front-loaded, and the mode-dependent behavior is packed into a compact second sentence that covers both call variants.
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-only, single-optional-parameter tool with annotations covering safety and an output schema present, the description fully covers invocation modes, output format, and scope. Nothing an agent needs to call it correctly is missing.
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 100% — the schema already documents projectId, the 'inbox' special value, and the two behavioral outcomes. The description reinforces this but adds minimal new meaning beyond the schema's own parameter documentation.
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?
Description states a specific verb and resource ('Get a Markdown overview') and precisely distinguishes the two invocation modes: account structure without a projectId versus tasks grouped by section with one. This clearly differentiates it from siblings like find-tasks, find-projects, and get-productivity-stats.
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 gives explicit when-to-use conditions for both modes: omit projectId for navigation structure only, or pass projectId/'inbox' to get tasks grouped by section. It implies the alternative use cases (navigating vs. retrieving tasks) but does not name sibling tools explicitly or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-productivity-statsARead-onlyIdempotent
Get comprehensive productivity statistics including daily/weekly completion breakdowns, goal streaks (current, last, max), karma score and trends, and historical karma data. Useful for productivity analysis and tracking goal progress. Reports counts, streaks and karma only, never the tasks themselves — for "what did I complete", use find-activity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| goals | Yes | Goal and streak information. |
| karma | Yes | Current karma score. |
| daysItems | Yes | Daily completion breakdown (most recent days). |
| weekItems | Yes | Weekly completion breakdown (most recent weeks). |
| karmaTrend | Yes | Karma trend direction (e.g., "up" or "down"). |
| projectColors | Yes | Map of project ID to color key. |
| completedCount | Yes | Total number of completed tasks (all-time). |
| karmaGraphData | Yes | Historical karma data points for graphing. |
| karmaLastUpdate | Yes | Timestamp of the last karma update. |
| karmaUpdateReasons | Yes | Recent karma change events with reasons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it specifies the tool reports counts, streaks, and karma only, never the tasks themselves. This is valuable because it clarifies the output scope. The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well-covered. The description could add more about the output structure, but the output schema exists to cover that.
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 concise and well-structured. It front-loads the core purpose, then lists the specific data types, and ends with a clear exclusion and pointer to an alternative. Every sentence earns its place with no 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 tool has zero parameters, a rich output schema, and strong annotations (readOnly, idempotent, non-destructive), the description is complete. It covers what the tool does, what it returns, and when to use an alternative. The output schema handles return value details, so the description doesn't need to enumerate them.
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 zero parameters, and the schema description coverage is 100% (vacuously true). The description adds value by explaining what the tool returns (daily/weekly breakdowns, streaks, karma trends), which is the main semantic content. Since there are no parameters to document, a baseline of 4 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 tool's purpose: retrieving comprehensive productivity statistics including daily/weekly completion breakdowns, goal streaks, karma score and trends, and historical karma data. It explicitly distinguishes itself from sibling tools by noting it reports counts, streaks, and karma only, never tasks themselves, and directs users to find-activity for task-level details.
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 explicit usage guidance: it is useful for productivity analysis and tracking goal progress, and it explicitly states when NOT to use it (for 'what did I complete' queries, use find-activity instead). This clear differentiation from the sibling tool find-activity is excellent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-project-activity-statsARead-onlyIdempotent
Get daily and optional weekly task completion counts for a project over a configurable time window (1-12 weeks). Useful for identifying completion trends and patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | No | Number of weeks of activity data to retrieve (1-12, default 2). | |
| projectId | Yes | The ID of the project to get activity stats for. | |
| includeWeeklyCounts | No | Include weekly rollup counts alongside daily counts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dayItems | Yes | Daily task completion counts. |
| projectId | Yes | The project ID. |
| weekItems | No | Weekly completion rollups. Only included when includeWeeklyCounts is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds context about granularity and time window but does not disclose additional behavioral aspects like handling of missing data or aggregation details. This is adequate given the 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 two sentences, directly states the function, and includes a usage note. No filler or redundancy, earning a perfect score for conciseness.
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 simple read-only statistics tool with an output schema, the description covers the essential purpose, scope, and use case. It does not need to explain return format since the output schema exists, and annotations cover safety. It is complete for the tool's complexity.
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 coverage is 100%, so all parameters are documented in the schema. The description adds contextual meaning (e.g., 'daily' and 'weekly' align with weeks and includeWeeklyCounts) but does not deeply explain parameter semantics beyond the schema. Baseline of 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 verb 'Get' and resource 'project activity stats' (task completion counts), with scoping details (daily, optional weekly, time window). It distinguishes from siblings like get-productivity-stats and find-activity by focusing on project-specific completion trends.
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 a clear use case ('identifying completion trends and patterns'), which implies when to use it. However, it does not explicitly mention alternatives or when not to use it, 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.
get-project-healthBRead-onlyIdempotent
Get a comprehensive health assessment for a project including completion progress, health status (EXCELLENT, ON_TRACK, AT_RISK, CRITICAL), and optional detailed context with project metrics and task-level data. Use includeContext=true for that full detail.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to check health for. | |
| includeContext | No | Include detailed health context with project metrics and task-level data. May produce large output for projects with many tasks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| health | Yes | Project health assessment. |
| context | No | Detailed project context with metrics and task data. Only included when includeContext is true. |
| progress | Yes | Project completion progress. |
| projectId | Yes | The project ID. |
| projectName | Yes | The project name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a read-only, idempotent, non-destructive operation. The description adds behavioral context by naming the returned status values and optional contextual detail, but it does not disclose potential performance implications, rate limits, or other operational caveats beyond what the schema already notes about large output.
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 two sentences, front-loaded with the primary action and output, and the second sentence gives useful parameter guidance 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 rich annotations, 100% parameter coverage, and presence of an output schema, the description is mostly complete. It lacks alt-tool guidance for 'analyze-project-health', but that is primarily covered by the usage guidelines dimension; otherwise the description adequately supports correct 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 100%, so the parameters are already well documented. The description adds minimal parameter-related value beyond what the schema provides; 'includeContext=true for full detail' is essentially restated in 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 tool performs a health assessment for a project and lists key outputs: completion progress and health status values. However, it does not explicitly differentiate itself from the sibling tool 'analyze-project-health', which may serve a similar purpose.
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 only usage guidance is the parameter-level instruction 'Use includeContext=true for that full detail.' The description does not state when to choose this tool over alternatives like 'analyze-project-health', 'get-project-activity-stats', or 'get-productivity-stats'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-workspace-insightsARead-onlyIdempotent
Get aggregated health and progress insights across all projects in a workspace. Accepts workspace name or ID, with optional project ID filtering. Useful for a cross-project health overview.
| Name | Required | Description | Default |
|---|---|---|---|
| projectIds | No | Optional list of project IDs to scope insights to specific projects. | |
| workspaceIdOrName | Yes | The workspace ID or name. Supports exact ID, exact name match (case-insensitive), or unique partial name match. |
Output Schema
| Name | Required | Description |
|---|---|---|
| workspaceId | Yes | The resolved workspace ID. |
| workspaceName | Yes | The resolved workspace name. |
| projectInsights | Yes | Health and progress insights for each project in the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds context by noting the output is 'aggregated' and scoped 'across all projects', which goes beyond the schema and helps the agent understand the tool's behavior. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and scope, then provides input details and a use case. Every sentence adds value and there is no wasteful repetition or filler.
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 simple read-only tool with a rich output schema, high schema parameter coverage, and strong annotations, the description fully covers purpose, input semantics, and usage context. No additional behavioral or output details are necessary, and the agent has enough information to select and invoke the 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?
Schema description coverage is 100%, so the baseline is 3. The description only restates what the schema already says ('Accepts workspace name or ID, with optional project ID filtering') without adding additional format, defaults, or edge-case semantics, so it earns the baseline score.
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 a specific verb ('Get') and resource ('aggregated health and progress insights across all projects in a workspace'), which makes the core purpose unambiguous. It differentiates from project-specific tools by the 'across all projects' scope, though it does not explicitly name sibling alternatives or contrast with tools like get-productivity-stats.
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 phrase 'Useful for a cross-project health overview' provides a clear context for when to use this tool. However, it does not mention when not to use it or explicitly point to alternative sibling tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import-project-templateA
Import a template into an existing project, adding its tasks, sections and comments to whatever is already there. Source it by template ID/URL or by passing CSV content from export-project-template. To start a new project from a template, create the project with add-projects first, then import into it. This writes immediately and cannot be undone, so only run it against a project the user named.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Locale for the imported content when using `templateId`. Defaults to "en". | |
| projectId | Yes | The ID of the existing project to import the template into. | |
| templateId | No | The template to import — either a gallery slug ("product-launch"), a personal template ID ("UT_28Ex..."), or a full Todoist template URL, which is reduced to the ID automatically. Gallery templates work for anyone; personal templates only for the account that owns them. There is no way to list templates through this server, so only use the ID or URL the user supplied. Provide either this or `csvFileContent`, not both. | |
| csvFileContent | No | Raw CSV template content, as produced by export-project-template. Provide either this or `templateId`, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | Tasks created by the import. |
| comments | Yes | Comments created by the import. |
| sections | Yes | Sections created by the import. |
| totalCount | Yes | The total number of objects created by the import. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false; the description adds the important nuance that the write is immediate and irreversible, plus the constraint to confirm the target project with the user. It does not explain merge/conflict behavior (e.g. duplicate task names) for a non-idempotent operation, which would be the remaining high-value detail.
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?
Three tight sentences with no filler: purpose first, sourcing second, precondition and risk last. Every sentence carries information an agent would otherwise have to guess.
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?
An output schema exists so return values need not be described. For a 4-parameter, non-idempotent write tool with full annotation coverage, the description covers purpose, sourcing, prerequisite and risk without leaving an agent unable to call 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?
Schema coverage is 100%, so the schema already documents projectId, locale, templateId and csvFileContent, including the mutual exclusivity. The description's only added value is provenance — that CSV content comes from export-project-template — which is a useful but small increment over 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?
Specific verb+resource with added scope: 'Import a template into an existing project, adding its tasks, sections and comments to whatever is already there.' It also implicitly separates itself from export-project-template, the inverse operation, by describing where the CSV comes from.
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?
Explicitly states the two sourcing paths (template ID/URL vs. CSV from export-project-template) and gives the prerequisite workflow for a new project: 'create the project with add-projects first, then import into it.' It also names when-not to act freely: 'only run it against a project the user named.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-workspacesARead-onlyIdempotent
Get all workspaces for the authenticated user. Returns workspace details including ID, name, plan type (STARTER/BUSINESS), user role (ADMIN/MEMBER/GUEST), link sharing settings, guest permissions, creation date, and creator ID.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | The type of the response. |
| count | Yes | The total number of workspaces. |
| workspaces | Yes | List of workspaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare `readOnlyHint: true` and `idempotentHint: true`, so safety is established. The description adds value by listing the returned fields (ID, name, plan type, role, etc.) but doesn't add behavioral nuances like rate limits, auth scope, or pagination, which would be a bonus.
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 two sentences long, leads with the action and scope, and efficiently enumerates the returned data fields. Every word earns its place with no fluff.
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 simple list operation with zero parameters, read-only annotations, and a provided output schema, the description is complete enough. It could mention pagination or absence of filtering, but the phrase 'all workspaces' handles it adequately for most agents.
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?
There are zero parameters, and the schema coverage is 100% (vacuously). The baseline is 4 for no params; the description doesn't need to explain parameters, but it also doesn't add any extra clarity about optional query capabilities (none exist).
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 uses a specific verb ('Get') and resource ('all workspaces') and explicitly scopes to 'the authenticated user'. It distinguishes itself from the many 'find-*' sibling tools by indicating a full, unfiltered listing.
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 usage is implied—it's the obvious list operation for workspaces—but there is no explicit guidance on when to use this versus the `find-*` alternatives or any exclusions. It doesn't say 'use this instead of X' or mention context like pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage-assignmentsADestructive
Assign, unassign or reassign up to 50 tasks at once. Assigning notifies the new assignee. Each task is updated independently, so one failure does not undo the others; failures are reported per task. Use dryRun to check the changes first.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | If true, validates operations without executing them. | |
| taskIds | Yes | The IDs of the tasks to operate on (max 50). | |
| operation | Yes | The assignment operation to perform. | |
| responsibleUser | No | The user to assign tasks to. Can be "me" (assigns to current user), a user ID, name, or email. Required for assign and reassign operations. | |
| fromAssigneeUser | No | For reassign operations: the current assignee to reassign from. Can be user ID, name, or email. Optional - if not provided, reassigns from any current assignee. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Results of the assignment operations. |
| summary | No | Summary of the operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-idempotent and open-world, but the description adds meaningfully beyond them: assigning sends a notification to the new assignee, and each task is updated independently so failures are partial and reported per task. Those side-effect and partial-failure semantics are exactly the kind of context an agent needs before firing a destructive batch call.
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?
Four short sentences, zero filler, with the operation/scope front-loaded and the risk mitigations (per-task failure isolation, dryRun) trailing in priority order. Every sentence carries information an agent would otherwise have to infer.
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 batch mutation with five parameters, the description covers batch limits, partial-failure behavior, notification side effects, and the dryRun escape hatch, and an output schema exists to explain per-task results. Nothing needed to invoke it correctly is missing.
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 100% — every parameter, including the operation enum, responsibleUser's "me"/ID/name/email forms, and fromAssigneeUser's optionality, is documented in the schema itself. The description only restates the 50-item cap and mentions dryRun, so it adds essentially nothing new; baseline 3 applies.
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 opens with a specific verb triple (assign/unassign/reassign) plus the resource (tasks) and the batch scope (up to 50 at once), which lets an agent distinguish this from single-object tools like update-tasks or complete-tasks. It stops short of naming a sibling alternative explicitly, so it is clear but not sibling-routed.
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?
"Use dryRun to check the changes first" is a concrete usage recommendation, and the 50-task cap sets a practical boundary. However, there is no explicit when-to-use/when-not guidance and no mention of the obvious alternative (looping update-tasks), leaving the choice largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project-managementBIdempotent
Archive or unarchive a project by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The action to perform on the project. | |
| projectId | Yes | The ID of the project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | Yes | The updated project. |
| success | Yes | Whether the action was successful. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, which informs the agent of the operation's safety profile. The description adds the explicit archive/unarchive semantics but does not explain side effects like whether the project is hidden or if collaborators are notified. This is adequate given the annotations cover the core behavioral aspects.
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, front-loaded sentence that immediately conveys the action and target. It wastes no words and includes no filler, earning a top score for conciseness.
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?
With a low-complexity tool and an output schema present, the description need not explain return values. The archive/unarchive toggle is simple, and the description plus annotations sufficiently cover the operation's context. Minor gaps like error handling or invalid IDs are not expected to be in a description at this level.
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 already documents both parameters ('action' and 'projectId') with 100% coverage, so the description rests at baseline 3. The description's phrase 'by its ID' mirrors the schema's projectId description and the enum options, adding no new meaning. No additional parameter details are needed.
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 function: 'Archive or unarchive a project by its ID,' using a specific verb and resource. It distinguishes this tool from siblings like add/update/find projects through the unique action words, though it does not explicitly contrast with any sibling, such as 'project-move'.
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 instead of alternatives, nor does it discuss prerequisites or context. There is no mention of when archiving is appropriate or when to use a different project-management sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project-moveCDestructiveIdempotent
Move a project between personal and workspace contexts.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The action to perform on the project. | |
| folderId | No | Optional target folder ID within the workspace. | |
| projectId | Yes | The ID of the project to move. | |
| visibility | No | Optional access visibility for the project in the workspace (restricted, team, or public). | |
| workspaceId | No | The target workspace ID. Required when action is move-to-workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | Yes | The moved project. |
| success | Yes | Whether the move was successful. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the full safety profile (destructiveHint=true, idempotentHint=true, openWorldHint=false), but the description adds nothing on top. For a destructive cross-context move, it says nothing about what is destroyed or altered — e.g. whether collaborators, folder placement, or visibility are reset — which is exactly the context an agent needs before calling it.
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?
A single efficient sentence with the core operation front-loaded and no filler. It is arguably too thin rather than too long, but there is zero waste.
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?
An output schema exists, so return values need not be explained, but for a 5-parameter destructive mutation the description omits the side effects of moving a project across contexts. An agent would have to consult the schema and guess at consequences.
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 100%, so all five parameters including the enums and the conditional workspaceId are documented in the schema. The description adds no syntax or conditional logic beyond that, so the baseline 3 applies.
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 has a specific verb ("Move") and resource ("project") plus the axis of movement (personal <-> workspace), so the operation is unambiguous. It does not differentiate itself from siblings like update-projects or project-management, which could plausibly overlap with this change.
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?
There is no guidance on when to choose this tool versus update-projects or project-management, and no mention of the required action enum or the conditional workspaceId requirement. The agent must infer all preconditions from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder-objectsAIdempotent
Reorder projects or sections, and optionally move personal projects to a new parent. Personal projects: order places a project among its siblings; parentId moves it ("root" for top level). Workspace projects: order places a project within its folder, in the shared default ordering every member sees; needs permission to reorder the workspace. Sections: order places a section within its project.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | "project": personal projects among the siblings under their parent, or workspace projects within their folder. "section": sections within their project. | |
| items | Yes | Each item needs order and/or parentId. Moves happen first, so order is a position under the new parent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | The type of entity that was reordered/moved. |
| success | Yes | Whether every entity was moved and reordered as asked. |
| failures | Yes | Entities that could not be moved or reordered, with the reason for each. |
| movedCount | Yes | The number of entities moved to a new parent. |
| affectedIds | Yes | The IDs of the entities moved or reordered. |
| reorderedCount | Yes | The number of entities reordered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it non-read-only, idempotent, non-destructive, and closed-world. The description adds genuinely non-obvious context beyond that: workspace ordering is a shared default every member sees, reordering a workspace requires permission, and moves are applied before order positions so order is evaluated under the new parent.
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?
Front-loaded lead sentence states the full scope, followed by one sentence per entity type, which is an easy-to-scan structure. It is efficient overall, though the per-type sentences restate schema wording closely, so some content is duplicated rather than additive.
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?
An output schema exists, so return values need no explanation, and the permissions and ordering semantics are covered. It does not address partial-failure or atomicity behavior across the `items` array, which would matter for a batched mutation, leaving a small completeness gap.
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 coverage is 100%, so the baseline is 3, but the description adds real meaning: `order` is sibling-relative per entity type, workspace ordering is shared across members, and `parentId` accepts "root" and is personal-projects-only. It is largely a mirror of the schema text, which keeps it out of 5 territory.
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?
States a specific verb and resource ("Reorder projects or sections") and immediately disambiguates the three modes it covers: personal projects, workspace projects, and sections. It gives no differentiation from the sibling `project-move` tool, which appears to overlap with the parentId move behavior, so it falls short of a 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?
Usage is implied rather than stated: the reader can infer that `order` reorders within siblings and `parentId` relocates a personal project, and it notes the workspace permission prerequisite. There is no explicit when-not-to-use guidance and no routing to alternatives such as `project-move` or `update-projects`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule-tasksADestructive
Reschedule tasks to new dates while preserving recurring schedules. Unlike update-tasks (which replaces the entire due string and can wipe recurrence), this tool changes only the date, keeping recurrence patterns intact. Use this when moving recurring tasks to a different date without altering their repeat pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | The tasks to reschedule with their new dates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The rescheduled tasks. |
| totalCount | Yes | The total number of tasks rescheduled. |
| rescheduledTaskIds | Yes | The IDs of the rescheduled tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, so the description doesn't need to re-litigate safety. It adds real value by disclosing the preservation semantics — only the date changes, recurrence survives — which the annotations cannot express. It does not cover batch behavior (multiple tasks, partial failure on an invalid id), which keeps it below a 5.
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?
Front-loaded and short, but the recurrence-preservation point is made three times ('preserving recurring schedules', 'keeping recurrence patterns intact', 'without altering their repeat pattern'). Two of those sentences could be merged without losing anything.
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?
An output schema exists, so return values need no explanation, and the single parameter is fully documented. The gap is operational: nothing says what happens if one task id in the array is invalid, which matters for a destructive batch mutation.
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 coverage is 100% and the nested date property already documents the YYYY-MM-DD vs datetime formats and the time-preservation rule. The description adds no parameter semantics beyond that; baseline 3 applies.
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?
Specific verb+resource+scope: 'Reschedule tasks to new dates while preserving recurring schedules,' and it explicitly contrasts with update-tasks. An agent can distinguish it from the sibling without opening either schema.
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?
Gives an explicit when-to-use ('moving recurring tasks to a different date without altering their repeat pattern') and names the wrong alternative (update-tasks) plus the harm it causes (wipes recurrence). Selection is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Search across tasks and projects in Todoist. Returns a list of relevant results with IDs, titles, and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string to find tasks and projects. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | The search results. |
| totalCount | Yes | Total number of results found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds useful context by scoping the search to tasks and projects and specifying the result fields, going slightly beyond the structured annotations.
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?
Two tight sentences, front-loaded with the action and scope, followed by a relevant output summary. Every sentence contributes meaning and there is no filler or repetition of the tool name.
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 low parameter count, read-only annotations, and presence of an output schema, the description is largely sufficient. It clearly defines scope and result contents, though it does not mention result limits, ordering, or any search syntax nuances, but these are not critical for this simple search 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?
The single query parameter has 100% schema description coverage and a clear explanation ('The search query string to find tasks and projects'). The tool description adds no additional semantic detail beyond the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and clearly identifies the target resources ('tasks and projects in Todoist') plus the return shape ('IDs, titles, and URLs'). It distinguishes itself from more specialized find-* siblings by indicating a broad cross-resource search.
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 gives no explicit guidance on when to use this tool instead of the many sibling find-tasks, find-projects, or find-completed-tasks tools. Whether this should be preferred over those alternatives for unstructured queries is left completely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uncomplete-tasksA
Uncomplete (reopen) one or more completed tasks by their IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | The IDs of the tasks to uncomplete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Failed task uncompletion with error details. |
| uncompleted | Yes | The IDs of successfully uncompleted tasks. |
| failureCount | Yes | The number of failed task uncompletions. |
| successCount | Yes | The number of successfully uncompleted tasks. |
| totalRequested | Yes | The total number of tasks requested to uncomplete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the mutation safety profile (readOnlyHint=false, destructiveHint=false), and the description adds the semantic effect of reopening completed tasks. It does not disclose edge cases like behavior for already-uncompleted tasks or side effects, but it does not contradict the annotations.
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, front-loaded sentence where every word adds value: 'Uncomplete (reopen)' clarifies terminology, 'one or more' maps to the array type, 'completed tasks' defines the target set, and 'by their IDs' specifies the input. There is no wasted text.
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 low complexity (one required parameter, no nested objects), full schema coverage, and presence of an output schema, the description is sufficient. It clearly communicates the action, target, and input, and nothing important is missing for an agent to select and invoke this tool 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?
Schema coverage for the single required parameter is 100% with a clear description for 'ids'. The tool description only reiterates 'by their IDs' and adds no new format, type, or behavior details beyond what the schema already provides, so the baseline 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 uses a specific verb 'Uncomplete (reopen)' and clearly identifies the resource ('completed tasks') and the input mechanism ('by their IDs'). This distinguishes it from sibling tools like complete-tasks and update-tasks by specifying both the action and the target state.
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 gives implied usage context: it is for completed tasks that need to be reopened, and IDs are required. However, it does not explicitly state when not to use it or mention alternatives, such as using complete-tasks for the inverse operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-commentsCDestructive
Update multiple existing comments with new content.
| Name | Required | Description | Default |
|---|---|---|---|
| comments | Yes | The comments to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes | The updated comments. |
| failures | Yes | Comments that could not be updated, with the reason for each. |
| totalCount | Yes | The total number of comments updated. |
| appliedOperations | Yes | Summary of operations performed. |
| updatedCommentIds | Yes | The IDs of the updated comments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description only adds the 'multiple/batch' nuance; it does not disclose permission requirements, whether only the caller's own comments can be edited, or failure behavior when some IDs are invalid.
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?
A single efficient sentence with the verb and scope front-loaded. Nothing is wasted, though there is little structure to speak of.
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 batch mutation, the description omits the constraints an agent needs: whose comments can be edited, what happens on partial failure, and per-comment error handling. The output schema and annotations help, but the gaps around mutation semantics remain.
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 100% and the nested id/content structure is fully documented there. The description's 'multiple existing comments' hints at the array shape and the requirement that comments pre-exist, but adds nothing about the id/content semantics beyond 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?
States a specific verb and resource ('update ... comments') plus batch scope ('multiple existing comments'). It is clear what the tool does, but it does not differentiate itself from siblings like add-comments or delete-object.
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?
There is no guidance on when to use this versus add-comments (create) or find-comments (read), nor any mention of prerequisites such as needing to be the comment's author.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-filtersBDestructive
Update one or more existing personal filters with new values.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | The filters to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| filters | Yes | The updated filters, as read back after the update. Empty if they could not be read back; updatedFilterIds still lists what was updated. |
| failures | Yes | Filters that could not be updated, with the reason for each. |
| totalCount | Yes | The total number of filters updated. |
| updatedFilterIds | Yes | The IDs of the updated filters. |
| appliedOperations | Yes | Summary of operations performed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is purely functional and adds no unique behavioral traits. The primary behavioral constraints (e.g., destructive nature, mutability) are already defined by the annotations (destructiveHint: true, readOnlyHint: false).
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 tool is described in one extremely concise sentence. Every word serves to define the scope of the operation without superfluous detail.
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?
Despite the complex input structure (nested array of objects with many attributes), the description remains high-level. While the schema handles the heavy lifting, a slightly more descriptive summary of the update operation's impact would improve completeness.
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 coverage is 100%, meaning the description does not need to compensate for missing parameter explanations. Since it provides no additional semantic context beyond the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (filters) and the action (update). It is distinct from 'add-filters' and 'find-filters' in the sibling list. It uses a specific action/resource pairing.
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?
It implies the necessity of existing filters, but provides no explicit advice on whether to first call 'find-filters' or if there are specific conditions (like minimum required fields) for success, making the guidance slightly weak.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-labelsADestructive
Update one or more existing labels. Personal labels (identified by ID) can have their name, color, order, and favorite flag updated. Shared labels (identified by name) can only be renamed.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | The labels to update. Use labelType="personal" with an ID to update a personal label, or labelType="shared" with name+newName to rename a shared label. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Labels that could not be updated, identified by ID (personal) or name (shared), with the reason for each. |
| totalCount | Yes | The total number of successful operations (personal + shared). |
| updatedLabels | Yes | The updated personal labels. |
| appliedOperations | Yes | Summary of operations performed. |
| renamedSharedLabels | Yes | The shared labels that were renamed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false. The description adds genuinely useful mode-level semantics (shared rename vs. personal full-field update), but it does not warn that shared-label renames propagate to all tasks, nor does it acknowledge that the operation is destructive or non-idempotent. It adds value beyond annotations without fully carrying the behavioral burden.
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?
Two sentences, front-loaded with the core action and then the mode breakdown. Nearly every clause earns its place, though the parenthetical '(identified by ID)' / '(identified by name)' duplicates the schema's discriminators.
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?
Output schema exists and annotations cover the safety profile, so the description only needs to explain the two update modes, which it does completely and accurately. Missing is any mention of how to discover IDs or that updates apply per-label in a batch, but the essentials for a correct call are present.
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 100% and the nested oneOf already documents both branches in detail, including the shared-label rename note. The description restates that branch split at a higher level, which aids quick parsing but adds no syntax or constraint information the schema lacks. Baseline 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?
Names a specific verb (update) and resource (labels), and immediately splits the operation into two distinct modes: personal labels by ID and shared labels by name. An agent can tell this apart from add-labels or find-labels from the name and description alone, though the description never names those siblings to reinforce the boundary.
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?
Implies 'use this to modify existing labels rather than create them', but never states preconditions such as needing an existing label ID (from find-labels) or the fact that shared labels must already exist. There is no explicit when-not guidance and no reference to alternatives like add-labels for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-projectsCDestructive
Update multiple existing projects with new values.
| Name | Required | Description | Default |
|---|---|---|---|
| projects | Yes | The projects to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Projects that could not be updated, with the reason for each. |
| projects | Yes | The updated projects. |
| totalCount | Yes | The total number of projects updated. |
| appliedOperations | Yes | Summary of operations performed. |
| updatedProjectIds | Yes | The IDs of the updated projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is known from structured data; the description adds nothing beyond that. It does not warn that updates overwrite existing field values, that passing description clears it, or that color fallback to charcoal can silently change data — all relevant given the destructive flag.
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?
A single front-loaded sentence with no waste, but it is under-specified rather than efficient — 'with new values' is vague filler that conveys no actionable 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 destructive, non-idempotent batch mutation with an output schema present, the description should at minimum note that callers must supply the project id and that unspecified fields are left untouched (or not). Return values needn't be explained given the output schema, but the mutation semantics gap is a real omission.
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 100%, so the nested project fields, enum values, and the 'null/empty string clears description' behavior are already documented in the schema. The description only reinforces the batch/array nature ('multiple existing projects'), which is the baseline expectation when the schema does the heavy lifting.
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?
States a specific verb (update) plus resource (projects) and clarifies the batch semantics ('multiple existing projects'), which separates it from add-projects and find-projects. It doesn't name any sibling explicitly, but the resource name is distinctive enough within the sibling set.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as project-management or add-projects for creation. The agent must infer from the name alone that this mutates existing projects rather than creating or reorganizing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-remindersBDestructiveIdempotent
Update existing reminders. Each reminder must specify its type ("relative", "absolute", or "location") and ID. Only include fields that need to change.
| Name | Required | Description | Default |
|---|---|---|---|
| reminders | Yes | Array of reminders to update (max 25). Each must include the reminder type and ID. Only include fields that need to change. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Reminders that could not be updated, with the reason for each. |
| reminders | Yes | The updated reminders. |
| totalCount | Yes | Total reminders updated. |
| appliedOperations | Yes | |
| updatedReminderIds | Yes | IDs of updated reminders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the significant traits: destructiveHint=true, idempotentHint=true, openWorldHint=true, readOnlyHint=false, so the safety burden is largely carried. The description usefully adds patch semantics ("Only include fields that need to change"), which clarifies that omitted fields are preserved rather than cleared. It adds nothing about what happens on an invalid/unknown ID, whether the type discriminator must match the existing reminder's type, or permission requirements.
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?
Three short sentences with no filler, and the core action is front-loaded ahead of the per-item requirement. The final sentence is slightly redundant with the schema's "reminders" property description, but the whole block is compact and easy to scan.
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?
An output schema exists, so return values need not be explained, and the annotations already cover the mutation/destructive profile. What remains missing for a destructive batch mutation (max 25 items) is how to obtain valid reminder IDs, what a failed partial batch does, and whether the type field must match the stored reminder type — meaningful gaps for correct invocation.
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 100% and there is effectively one top-level parameter, so the schema already explains the type/id/field-level semantics in detail. The description restates the type discrimination ("relative", "absolute", "location") which is the one genuinely helpful addition, but adds no format or constraint detail beyond the schema — baseline 3 applies.
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 opens with a specific verb and resource: "Update existing reminders." It names the discriminated type field and the ID requirement, which tells an agent the unit of work is a batch array of identified reminder objects. It does not explicitly distinguish itself from the sibling update_* tools or the create counterpart (create_reminder), but the verb+noun is unambiguous.
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?
"Update existing reminders" implies the mutation use case versus create/find_reminders, and "Only include fields that need to change" gives useful partial-update guidance. However, the description states no when-not conditions, no prerequisite that the reminder must already exist and its ID be known, and no pointer to find_reminders for discovering IDs — those conditions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-sectionsBDestructive
Update multiple existing sections with new values.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | Yes | The sections to update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failures | Yes | Sections that could not be updated, with the reason for each. |
| sections | Yes | The updated sections. |
| totalCount | Yes | The total number of sections updated. |
| appliedOperations | Yes | |
| updatedSectionIds | Yes | The IDs of the updated sections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false and openWorldHint=false, so the safety profile is largely covered. The description adds only the batch scope; it does not explain why the call is flagged destructive (e.g., whether omitting a section in the payload affects it) or that a failed batch may partially apply.
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?
A single front-loaded sentence with zero filler. It is lean rather than bloated; the only issue is that its brevity leaves gaps the agent must fill from annotations and schema.
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?
With one parameter, a full schema, an output schema and four annotations hints, most of what an agent needs is present. However, the description omits the prerequisite of resolving section IDs (find-sections) and gives no hint about the destructive/idempotency semantics that the annotations flag but do not explain.
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 100% and each field (id, name, description with null-to-clear) is documented inline, so the baseline of 3 applies. 'With new values' in the description adds nothing the schema does not already state more precisely.
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?
Specific verb+resource ('Update ... sections') plus the batch qualifier 'multiple existing', which tells the agent this operates on already-existing records rather than creating them. It does not explicitly differentiate from siblings like add-sections or find-sections, but the verb and 'existing' constraint make the intent unambiguous.
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 statement of when to use this versus add-sections/find-sections, and no guidance on obtaining section IDs before calling. The word 'existing' weakly implies a lookup prerequisite, but that is inference rather than guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-tasksADestructive
Update existing tasks including content, dates, priorities, and assignments. Send only the fields that change.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | The tasks to update (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes | The updated tasks. |
| failures | Yes | Tasks that could not be updated, with the reason for each. |
| totalCount | Yes | The total number of tasks updated. |
| updatedTaskIds | Yes | The IDs of the updated tasks. |
| appliedOperations | Yes | Summary of operations performed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral detail: only fields being changed should be sent, which supports safe partial updates. The annotations already declare destructiveHint=true and idempotentHint=false, and the schema documents side effects like label replacement and moving tasks out of sections/parents, so the description does not need to repeat those.
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?
Two tightly written sentences with no filler. The core purpose is front-loaded, and the partial-update rule is stated immediately after the field categories.
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 rich input schema, annotations, and an output schema, the description is largely sufficient: it states the operation, the editable categories, and the partial-update expectation. It could be stronger by noting batch size or destructive side effects in prose, but those are covered structurally and do not need repetition.
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 100%, so the detailed nested field semantics are already provided in the schema, including 'remove,' 'unassign,' and side effects. The description adds only broad categories of updatable fields and the partial-update rule, which is consistent with the baseline for high schema coverage.
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 uses a clear verb-resource pair, 'Update existing tasks,' and lists broad editable areas: content, dates, priorities, and assignments. It implicitly distinguishes updates from creation via 'existing,' but does not explicitly name or contrast with overlapping siblings such as reschedule-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 instruction 'Send only the fields that change' gives useful partial-update guidance, and 'existing tasks' implies this is for modifying already-created tasks. However, it does not explicitly say when to use this instead of sibling tools like reschedule-tasks or complete-tasks, which also affect task state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user-infoBRead-onlyIdempotent
Get comprehensive user information including user ID, full name, email, timezone with current local time, week start day preferences, current week dates, daily/weekly goal progress, and user plan (Free/Pro/Business).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | The user plan. |
| type | Yes | The type of the response. |
| Yes | The email address of the user. | |
| userId | Yes | The user ID. |
| fullName | Yes | The full name of the user. |
| startDay | Yes | The start day of the week (1 = Monday, 7 = Sunday). |
| timezone | Yes | The timezone of the user. |
| dailyGoal | Yes | The daily goal for task completions. |
| weeklyGoal | Yes | The weekly goal for task completions. |
| weekEndDate | Yes | The end date of the current week (YYYY-MM-DD). |
| startDayName | Yes | The name of the start day. |
| weekStartDate | Yes | The start date of the current week (YYYY-MM-DD). |
| completedToday | Yes | The number of tasks completed today. |
| currentLocalTime | Yes | The current local time of the user. |
| currentWeekNumber | Yes | The current week number of the year. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds context about the breadth of data returned (e.g., current local time, plan) but doesn't disclose any additional behavioral traits like authentication requirements or data freshness. This meets the baseline given the annotations.
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 sentence with a clear main clause and a list of attributes. It is efficient and front-loaded with the purpose. Each listed item adds value, and there is no padding.
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 output schema is present, the description focuses on the scope of the data. It lists the key fields, which is sufficient for a simple read-only tool with no parameters. Minor gaps like any special handling for timezones are not critical for this level of complexity.
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 zero parameters, so the baseline is 4. The description compensates by detailing what information is returned, which clarifies the output without needing parameter explanations.
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 fetches comprehensive user information and lists specific fields (ID, name, email, timezone, etc.). It distinguishes from siblings like get-productivity-stats by focusing on core user profile data, though it doesn't explicitly contrast with them.
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 scenarios, prerequisites, or exclusions. This is a gap for a tool that could overlap with others like get-overview or get-productivity-stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view-attachmentARead-onlyIdempotent
View a file attachment from a Todoist comment. Pass the fileUrl from a comment's fileAttachment field. Supports images (returned inline), text files (returned as text), and binary files like PDFs (returned as embedded resources).
| Name | Required | Description | Default |
|---|---|---|---|
| fileUrl | Yes | The URL of the attachment file to view. Get this from the fileUrl field in a comment's fileAttachment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds behavioral context by explaining how different file types are returned (images inline, text as text, binary as embedded resources), which is valuable beyond the annotations.
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 concise, with two sentences that efficiently convey the purpose, usage, and behavior. No wasted words; every sentence adds value.
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 simplicity (one parameter, no output schema), the description is complete enough. It covers the input source, supported file types, and return behavior. The annotations cover safety, so the description doesn't need to repeat that. Minor gap: it doesn't mention error cases (e.g., invalid URL), but this is acceptable for a simple read 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?
The schema description coverage is 100%, with the fileUrl parameter fully described in the schema. The description reinforces this by explaining the source of the fileUrl ('from a comment's fileAttachment field'), but adds minimal new meaning beyond the schema. Baseline 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 tool's purpose: 'View a file attachment from a Todoist comment.' It specifies the resource (file attachment) and the action (view), and distinguishes it from siblings by focusing on attachment viewing rather than comment management or other 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 clear context on when to use this tool: 'Pass the fileUrl from a comment's fileAttachment field.' It explains the prerequisite (obtaining the fileUrl from a comment) and the supported file types, but does not explicitly mention when not to use it or alternatives, though the sibling list suggests other tools for different operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v13.8.4- Changed
add-filters1 field changed- changed
Input schema / properties / filters / items / requiredPrevious value: -[ - "name", - "query", - "color" -]New value: +[ + "name", + "query" +]
- Changed
add-labels1 field changed- changed
Input schema / properties / labels / items / requiredPrevious value: -[ - "name", - "color" -]New value: +[ + "name" +]
- Changed
add-projects1 field changed- changed
Input schema / properties / projects / items / requiredPrevious value: -[ - "name", - "color" -]New value: +[ + "name" +]
- Changed
add-tasks2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
fetch-object1 field changed- changed
Output schema / properties / object / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "addedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "assignedByUid": { - "type": "string" - }, - "checked": { - "description": "Whether the task is completed.", - "type": "boolean" - }, - "completedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "content": { - "description": "Task title.", - "type": "string" - }, - "deadlineDate": { - "description": "ISO 8601.", - "type": "string" - }, - "description": { - "type": "string" - }, - "dueDate": { - "description": "ISO 8601.", - "type": "string" - }, - "duration": { - "description": "e.g. \"2h30m\", or \"3d\" for a day-based duration.", - "type": "string" - }, - "id": { - "type": "string" - }, - "isDeleted": { - "description": "True when deleted; absent otherwise.", - "type": "boolean" - }, - "isUncompletable": { - "description": "An organizational header, not a real task.", - "type": "boolean" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "parentId": { - "type": "string" - }, - "priority": { - "description": "p1 is highest, p4 lowest.", - "enum": [ - "p1", - "p2", - "p3", - "p4" - ], - "type": "string" - }, - "projectId": { - "type": "string" - }, - "recurring": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string" - } - ], - "description": "False when not recurring, otherwise the recurrence string." - }, - "responsibleUid": { - "type": "string" - }, - "sectionId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "description", - "recurring", - "priority", - "projectId", - "checked" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "Ordering index among siblings.", - "type": "number" - }, - "color": { - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "description": { - "description": "Empty string when none.", - "type": "string" - }, - "folderId": { - "description": "Workspace projects only.", - "type": "string" - }, - "id": { - "type": "string" - }, - "inboxProject": { - "type": "boolean" - }, - "isArchived": { - "type": "boolean" - }, - "isFavorite": { - "type": "boolean" - }, - "isShared": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "parentId": { - "type": "string" - }, - "viewStyle": { - "description": "list, board or calendar.", - "type": "string" - }, - "workspaceId": { - "description": "Undefined for personal projects.", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "isFavorite", - "isShared", - "inboxProject", - "viewStyle", - "childOrder", - "isArchived" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "type": "string" - }, - "fileAttachment": { - "additionalProperties": false, - "properties": { - "fileDuration": { - "description": "Milliseconds, for audio/video.", - "type": "number" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "description": "Bytes.", - "type": "number" - }, - "fileType": { - "description": "MIME type.", - "type": "string" - }, - "fileUrl": { - "type": "string" - }, - "image": { - "description": "For image resource types.", - "type": "string" - }, - "imageHeight": { - "description": "Pixels.", - "type": "number" - }, - "imageWidth": { - "description": "Pixels.", - "type": "number" - }, - "resourceType": { - "description": "file, url, image, etc.", - "type": "string" - }, - "title": { - "description": "For link/url resource types.", - "type": "string" - }, - "uploadState": { - "enum": [ - "pending", - "completed" - ], - "type": "string" - }, - "url": { - "description": "For link/url resource types.", - "type": "string" - } - }, - "required": [ - "resourceType" - ], - "type": "object" - }, - "id": { - "type": "string" - }, - "notifiedUserIds": { - "description": "Users notified about this comment. Absent when nobody was notified.", - "items": { - "type": "string" - }, - "type": "array" - }, - "postedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "postedUid": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "taskId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "postedAt" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "description": { - "description": "Supports Markdown.", - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sectionOrder": { - "description": "Ordering index within the project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "addedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "assignedByUid": { + "type": "string" + }, + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "completedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "deadlineDate": { + "description": "ISO 8601.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "duration": { + "description": "e.g. \"2h30m\", or \"3d\" for a day-based duration.", + "type": "string" + }, + "id": { + "type": "string" + }, + "isDeleted": { + "description": "True when deleted; absent otherwise.", + "type": "boolean" + }, + "isUncompletable": { + "description": "An organizational header, not a real task.", + "type": "boolean" + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "parentId": { + "type": "string" + }, + "priority": { + "description": "p1 is highest, p4 lowest.", + "enum": [ + "p1", + "p2", + "p3", + "p4" + ], + "type": "string" + }, + "projectId": { + "type": "string" + }, + "recurring": { + "description": "False when not recurring, otherwise the recurrence string.", + "type": [ + "boolean", + "string" + ] + }, + "responsibleUid": { + "type": "string" + }, + "sectionId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "description", + "recurring", + "priority", + "projectId", + "checked" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "Ordering index among siblings.", + "type": "number" + }, + "color": { + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "description": { + "description": "Empty string when none.", + "type": "string" + }, + "folderId": { + "description": "Workspace projects only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "inboxProject": { + "type": "boolean" + }, + "isArchived": { + "type": "boolean" + }, + "isFavorite": { + "type": "boolean" + }, + "isShared": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "parentId": { + "type": "string" + }, + "viewStyle": { + "description": "list, board or calendar.", + "type": "string" + }, + "workspaceId": { + "description": "Undefined for personal projects.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "isFavorite", + "isShared", + "inboxProject", + "viewStyle", + "childOrder", + "isArchived" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "fileAttachment": { + "additionalProperties": false, + "properties": { + "fileDuration": { + "description": "Milliseconds, for audio/video.", + "type": "number" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "description": "Bytes.", + "type": "number" + }, + "fileType": { + "description": "MIME type.", + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "image": { + "description": "For image resource types.", + "type": "string" + }, + "imageHeight": { + "description": "Pixels.", + "type": "number" + }, + "imageWidth": { + "description": "Pixels.", + "type": "number" + }, + "resourceType": { + "description": "file, url, image, etc.", + "type": "string" + }, + "title": { + "description": "For link/url resource types.", + "type": "string" + }, + "uploadState": { + "enum": [ + "pending", + "completed" + ], + "type": "string" + }, + "url": { + "description": "For link/url resource types.", + "type": "string" + } + }, + "required": [ + "resourceType" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "notifiedUserIds": { + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" + }, + "postedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "postedUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "taskId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "postedAt" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + } +]
- Changed
find-completed-tasks2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
find-tasks2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
find-tasks-by-date2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
import-project-template2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
reorder-objects8 fields changed- changed
Input schema / properties / items / descriptionPrevious value: -"The items to reorder or move. Each item must have at least order or parentId. Items with parentId will be moved first, then items with order will be reordered. All items being reordered should be siblings for predictable results."New value: +"Each item needs order and/or parentId. Moves happen first, so order is a position under the new parent." - changed
Input schema / properties / items / items / properties / order / descriptionPrevious value: -"The new position/order value for the entity. Lower values appear first."New value: +"0-based position among its siblings after the reorder: 0 is first, past the end is last. Unlisted siblings keep their relative order." - changed
Input schema / properties / items / items / properties / parentId / descriptionPrevious value: -"Move a project to be a sub-project of this parent project ID, or use \"root\" to move to the top level. Only valid when type is \"project\"."New value: +"Move a personal project under this parent project ID, or \"root\" for the top level. Personal projects only." - changed
Input schema / properties / type / descriptionPrevious value: -"The type of entity to reorder. \"project\" reorders sibling projects within the same parent (and can move projects to a new parent). \"section\" reorders sections within the same project."New value: +"\"project\": personal projects among the siblings under their parent, or workspace projects within their folder. \"section\": sections within their project." - changed
Output schema / properties / affectedIds / descriptionPrevious value: -"The IDs of all affected entities."New value: +"The IDs of the entities moved or reordered." - added
Output schema / properties / failuresAdded value: +{ + "description": "Entities that could not be moved or reordered, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / success / descriptionPrevious value: -"Whether the operation was successful."New value: +"Whether every entity was moved and reordered as asked." - changed
Output schema / requiredPrevious value: -[ - "type", - "movedCount", - "reorderedCount", - "affectedIds", - "success" -]New value: +[ + "type", + "movedCount", + "reorderedCount", + "affectedIds", + "failures", + "success" +]
- Changed
reschedule-tasks2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
- Changed
update-filters1 field changed- changed
Input schema / properties / filters / items / requiredPrevious value: -[ - "id", - "color" -]New value: +[ + "id" +]
- Changed
update-labels1 field changed- changed
Input schema / properties / labels / items / oneOfPrevious value: -[ - { - "properties": { - "color": { - "description": "Color for the entity. Accepts a color key (e.g. \"berry_red\") or display name (e.g. \"Berry Red\"). Valid colors: berry_red, red, orange, yellow, olive_green, lime_green, green, mint_green, teal, sky_blue, light_blue, blue, grape, violet, lavender, magenta, salmon, charcoal, grey, taupe. Unrecognized colors are omitted and charcoal will be used as the default.", - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "id": { - "description": "The ID of the personal label to update.", - "minLength": 1, - "type": "string" - }, - "isFavorite": { - "description": "Whether to mark the label as a favorite.", - "type": "boolean" - }, - "labelType": { - "const": "personal", - "description": "Update a personal label, identified by its ID.", - "type": "string" - }, - "name": { - "description": "The new name of the label.", - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "order": { - "description": "The new position of the label in the label list.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - } - }, - "required": [ - "labelType", - "id", - "color" - ], - "type": "object" - }, - { - "properties": { - "labelType": { - "const": "shared", - "description": "Rename a shared label across all tasks. Shared labels are identified by name; only renaming is supported (no color, order, or favorite).", - "type": "string" - }, - "name": { - "description": "The current name of the shared label.", - "minLength": 1, - "type": "string" - }, - "newName": { - "description": "The new name for the shared label.", - "minLength": 1, - "type": "string" - } - }, - "required": [ - "labelType", - "name", - "newName" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "color": { + "description": "Color for the entity. Accepts a color key (e.g. \"berry_red\") or display name (e.g. \"Berry Red\"). Valid colors: berry_red, red, orange, yellow, olive_green, lime_green, green, mint_green, teal, sky_blue, light_blue, blue, grape, violet, lavender, magenta, salmon, charcoal, grey, taupe. Unrecognized colors are omitted and charcoal will be used as the default.", + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "id": { + "description": "The ID of the personal label to update.", + "minLength": 1, + "type": "string" + }, + "isFavorite": { + "description": "Whether to mark the label as a favorite.", + "type": "boolean" + }, + "labelType": { + "const": "personal", + "description": "Update a personal label, identified by its ID.", + "type": "string" + }, + "name": { + "description": "The new name of the label.", + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "order": { + "description": "The new position of the label in the label list.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "labelType", + "id" + ], + "type": "object" + }, + { + "properties": { + "labelType": { + "const": "shared", + "description": "Rename a shared label across all tasks. Shared labels are identified by name; only renaming is supported (no color, order, or favorite).", + "type": "string" + }, + "name": { + "description": "The current name of the shared label.", + "minLength": 1, + "type": "string" + }, + "newName": { + "description": "The new name for the shared label.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "labelType", + "name", + "newName" + ], + "type": "object" + } +]
- Changed
update-projects1 field changed- changed
Input schema / properties / projects / items / requiredPrevious value: -[ - "id", - "color" -]New value: +[ + "id" +]
- Changed
update-tasks2 fields changed- removed
Output schema / properties / tasks / items / properties / recurring / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "string" - } -] - added
Output schema / properties / tasks / items / properties / recurring / typeAdded value: +[ + "boolean", + "string" +]
15 tool updates
v13.8.0- Changed
add-comments5 fields changed- added
Output schema / properties / failureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Comments that could not be added, identified by their content, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / successCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / totalRequestedAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "comments", - "totalCount", - "addedCommentIds" -]New value: +[ + "comments", + "totalCount", + "addedCommentIds", + "failures", + "totalRequested", + "successCount", + "failureCount" +]
- Changed
add-filters5 fields changed- added
Output schema / properties / failureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Filters that could not be created, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / successCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / totalRequestedAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "filters", - "totalCount" -]New value: +[ + "filters", + "totalCount", + "failures", + "totalRequested", + "successCount", + "failureCount" +]
- Changed
add-labels5 fields changed- added
Output schema / properties / failureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Labels that could not be created, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / successCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / totalRequestedAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "labels", - "totalCount" -]New value: +[ + "labels", + "totalCount", + "failures", + "totalRequested", + "successCount", + "failureCount" +]
- Changed
add-projects4 fields changed- removed
Output schema / properties / failureCount / descriptionRemoved value: -"The number of failed project creations." - changed
Output schema / properties / failures / descriptionPrevious value: -"Projects that could not be created, with the reason for each. A failure here does not affect the other projects in the batch — do not retry the whole batch; address or drop the failed items."New value: +"Projects that could not be created, with the reason for each." - removed
Output schema / properties / successCount / descriptionRemoved value: -"The number of successfully created projects." - removed
Output schema / properties / totalRequested / descriptionRemoved value: -"The total number of projects requested."
- Changed
add-reminders5 fields changed- added
Output schema / properties / failureCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Reminders that could not be created, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / successCountAdded value: +{ + "type": "number" +} - added
Output schema / properties / totalRequestedAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "reminders", - "totalCount", - "addedReminderIds" -]New value: +[ + "reminders", + "totalCount", + "addedReminderIds", + "failures", + "totalRequested", + "successCount", + "failureCount" +]
- Changed
add-sections4 fields changed- removed
Output schema / properties / failureCount / descriptionRemoved value: -"The number of failed section creations." - changed
Output schema / properties / failures / descriptionPrevious value: -"Sections that could not be created, with the reason for each. A failure here does not affect the other sections in the batch — do not retry the whole batch; address or drop the failed items."New value: +"Sections that could not be created, with the reason for each." - removed
Output schema / properties / successCount / descriptionRemoved value: -"The number of successfully created sections." - removed
Output schema / properties / totalRequested / descriptionRemoved value: -"The total number of sections requested."
- Changed
add-tasks4 fields changed- removed
Output schema / properties / failureCount / descriptionRemoved value: -"The number of failed task creations." - changed
Output schema / properties / failures / descriptionPrevious value: -"Failed task creations with error details."New value: +"Tasks that could not be created, with the reason for each." - removed
Output schema / properties / successCount / descriptionRemoved value: -"The number of successfully created tasks." - removed
Output schema / properties / totalRequested / descriptionRemoved value: -"The total number of tasks requested."
- Changed
find-activity1 field changed- changed
Input schema / properties / objectId / descriptionPrevious value: -"Filter by specific object ID (task, project, or comment)."New value: +"Filter by specific object ID (task, project, or comment). Requires objectType."
- Changed
update-comments4 fields changed- added
Output schema / properties / appliedOperations / properties / failureCountAdded value: +{ + "type": "number" +} - changed
Output schema / properties / appliedOperations / requiredPrevious value: -[ - "updateCount" -]New value: +[ + "updateCount", + "failureCount" +] - added
Output schema / properties / failuresAdded value: +{ + "description": "Comments that could not be updated, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "comments", - "totalCount", - "updatedCommentIds", - "appliedOperations" -]New value: +[ + "comments", + "totalCount", + "updatedCommentIds", + "failures", + "appliedOperations" +]
- Changed
update-filters5 fields changed- added
Output schema / properties / appliedOperations / properties / failureCountAdded value: +{ + "type": "number" +} - changed
Output schema / properties / appliedOperations / requiredPrevious value: -[ - "updateCount", - "skippedCount" -]New value: +[ + "updateCount", + "skippedCount", + "failureCount" +] - added
Output schema / properties / failuresAdded value: +{ + "description": "Filters that could not be updated, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / filters / descriptionPrevious value: -"The updated filters."New value: +"The updated filters, as read back after the update. Empty if they could not be read back; updatedFilterIds still lists what was updated." - changed
Output schema / requiredPrevious value: -[ - "filters", - "totalCount", - "updatedFilterIds", - "appliedOperations" -]New value: +[ + "filters", + "totalCount", + "updatedFilterIds", + "failures", + "appliedOperations" +]
- Changed
update-labels4 fields changed- added
Output schema / properties / appliedOperations / properties / failureCountAdded value: +{ + "type": "number" +} - changed
Output schema / properties / appliedOperations / requiredPrevious value: -[ - "updateCount", - "renameCount", - "skippedCount" -]New value: +[ + "updateCount", + "renameCount", + "skippedCount", + "failureCount" +] - added
Output schema / properties / failuresAdded value: +{ + "description": "Labels that could not be updated, identified by ID (personal) or name (shared), with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "updatedLabels", - "renamedSharedLabels", - "totalCount", - "appliedOperations" -]New value: +[ + "updatedLabels", + "renamedSharedLabels", + "totalCount", + "failures", + "appliedOperations" +]
- Changed
update-projects2 fields changed- removed
Output schema / properties / appliedOperations / properties / failureCount / descriptionRemoved value: -"The number of projects that failed to update." - changed
Output schema / properties / failures / descriptionPrevious value: -"Projects that could not be updated, with the reason for each. A failure here does not affect the other projects in the batch — do not retry the whole batch; address or drop the failed items."New value: +"Projects that could not be updated, with the reason for each."
- Changed
update-reminders3 fields changed- added
Output schema / properties / appliedOperationsAdded value: +{ + "additionalProperties": false, + "properties": { + "failureCount": { + "type": "number" + }, + "updateCount": { + "type": "number" + } + }, + "required": [ + "updateCount", + "failureCount" + ], + "type": "object" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Reminders that could not be updated, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "reminders", - "totalCount", - "updatedReminderIds" -]New value: +[ + "reminders", + "totalCount", + "updatedReminderIds", + "failures", + "appliedOperations" +]
- Changed
update-sections3 fields changed- added
Output schema / properties / appliedOperationsAdded value: +{ + "additionalProperties": false, + "properties": { + "failureCount": { + "type": "number" + }, + "updateCount": { + "type": "number" + } + }, + "required": [ + "updateCount", + "failureCount" + ], + "type": "object" +} - added
Output schema / properties / failuresAdded value: +{ + "description": "Sections that could not be updated, with the reason for each.", + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "item": { + "description": "Usually the ID of the item that failed.", + "type": "string" + } + }, + "required": [ + "item", + "error" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "sections", - "totalCount", - "updatedSectionIds" -]New value: +[ + "sections", + "totalCount", + "updatedSectionIds", + "failures", + "appliedOperations" +]
- Changed
update-tasks2 fields changed- removed
Output schema / properties / appliedOperations / properties / failureCount / descriptionRemoved value: -"The number of tasks that failed to update." - changed
Output schema / properties / failures / descriptionPrevious value: -"Tasks that could not be updated, with the reason for each. A failure here does not affect the other tasks in the batch."New value: +"Tasks that could not be updated, with the reason for each."
3 tool updates
v13.7.0- Changed
add-reminders2 fields changed- changed
Input schema / properties / reminders / items / oneOfPrevious value: -[ - { - "properties": { - "isUrgent": { - "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", - "type": "boolean" - }, - "minuteOffset": { - "description": "Minutes before the task due time to trigger the reminder. E.g., 30 for 30 minutes before, 60 for 1 hour before, 1440 for 1 day before.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "service": { - "description": "Delivery method: \"email\" or \"push\" notification. Defaults to push.", - "enum": [ - "email", - "push" - ], - "type": "string" - }, - "taskId": { - "description": "The ID of the task to set a reminder for.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "relative", - "type": "string" - } - }, - "required": [ - "type", - "taskId", - "minuteOffset" - ], - "type": "object" - }, - { - "properties": { - "due": { - "description": "The specific date/time for the reminder.", - "properties": { - "date": { - "description": "Due date in YYYY-MM-DD format.", - "type": "string" - }, - "lang": { - "description": "Language for parsing the due string, e.g. \"en\".", - "type": "string" - }, - "string": { - "description": "Natural language due string, e.g. \"tomorrow at 3pm\".", - "type": "string" - }, - "timezone": { - "description": "Timezone for the reminder, e.g. \"America/New_York\".", - "type": "string" - } - }, - "type": "object" - }, - "isUrgent": { - "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", - "type": "boolean" - }, - "service": { - "description": "Delivery method: \"email\" or \"push\" notification. Defaults to push.", - "enum": [ - "email", - "push" - ], - "type": "string" - }, - "taskId": { - "description": "The ID of the task to set a reminder for.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "absolute", - "type": "string" - } - }, - "required": [ - "type", - "taskId", - "due" - ], - "type": "object" - }, - { - "properties": { - "locLat": { - "description": "Latitude of the location as a string, e.g. \"37.7749\".", - "type": "string" - }, - "locLong": { - "description": "Longitude of the location as a string, e.g. \"-122.4194\".", - "type": "string" - }, - "locTrigger": { - "description": "When to trigger: \"on_enter\" (arriving) or \"on_leave\" (departing).", - "enum": [ - "on_enter", - "on_leave" - ], - "type": "string" - }, - "name": { - "description": "Name of the location, e.g. \"Office\", \"Home\".", - "minLength": 1, - "type": "string" - }, - "radius": { - "description": "Radius in meters for the geofence. Defaults to server default.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "taskId": { - "description": "The ID of the task to set a reminder for.", - "minLength": 1, - "type": "string" - }, - "type": { - "const": "location", - "type": "string" - } - }, - "required": [ - "type", - "taskId", - "name", - "locLat", - "locLong", - "locTrigger" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "isUrgent": { + "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", + "type": "boolean" + }, + "minuteOffset": { + "description": "Minutes before the task due time to trigger the reminder. E.g., 30 for 30 minutes before, 60 for 1 hour before, 1440 for 1 day before.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Defaults to the creator.", + "type": "string" + }, + "service": { + "description": "Delivery method: \"email\" or \"push\" notification. Defaults to push.", + "enum": [ + "email", + "push" + ], + "type": "string" + }, + "taskId": { + "description": "The ID of the task to set a reminder for.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "relative", + "type": "string" + } + }, + "required": [ + "type", + "taskId", + "minuteOffset" + ], + "type": "object" + }, + { + "properties": { + "due": { + "description": "The specific date/time for the reminder.", + "properties": { + "date": { + "description": "Due date in YYYY-MM-DD format.", + "type": "string" + }, + "lang": { + "description": "Language for parsing the due string, e.g. \"en\".", + "type": "string" + }, + "string": { + "description": "Natural language due string, e.g. \"tomorrow at 3pm\".", + "type": "string" + }, + "timezone": { + "description": "Timezone for the reminder, e.g. \"America/New_York\".", + "type": "string" + } + }, + "type": "object" + }, + "isUrgent": { + "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", + "type": "boolean" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Defaults to the creator.", + "type": "string" + }, + "service": { + "description": "Delivery method: \"email\" or \"push\" notification. Defaults to push.", + "enum": [ + "email", + "push" + ], + "type": "string" + }, + "taskId": { + "description": "The ID of the task to set a reminder for.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "absolute", + "type": "string" + } + }, + "required": [ + "type", + "taskId", + "due" + ], + "type": "object" + }, + { + "properties": { + "locLat": { + "description": "Latitude of the location as a string, e.g. \"37.7749\".", + "type": "string" + }, + "locLong": { + "description": "Longitude of the location as a string, e.g. \"-122.4194\".", + "type": "string" + }, + "locTrigger": { + "description": "When to trigger: \"on_enter\" (arriving) or \"on_leave\" (departing).", + "enum": [ + "on_enter", + "on_leave" + ], + "type": "string" + }, + "name": { + "description": "Name of the location, e.g. \"Office\", \"Home\".", + "minLength": 1, + "type": "string" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Defaults to the creator.", + "type": "string" + }, + "radius": { + "description": "Radius in meters for the geofence. Defaults to server default.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "taskId": { + "description": "The ID of the task to set a reminder for.", + "minLength": 1, + "type": "string" + }, + "type": { + "const": "location", + "type": "string" + } + }, + "required": [ + "type", + "taskId", + "name", + "locLat", + "locLong", + "locTrigger" + ], + "type": "object" + } +] - added
Output schema / properties / reminders / items / properties / notifyUidAdded value: +{ + "description": "User ID the reminder notifies.", + "type": "string" +}
- Changed
find-reminders1 field changed- added
Output schema / properties / reminders / items / properties / notifyUidAdded value: +{ + "description": "User ID the reminder notifies.", + "type": "string" +}
- Changed
update-reminders2 fields changed- changed
Input schema / properties / reminders / items / oneOfPrevious value: -[ - { - "properties": { - "id": { - "description": "The ID of the relative reminder to update.", - "minLength": 1, - "type": "string" - }, - "isUrgent": { - "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", - "type": "boolean" - }, - "minuteOffset": { - "description": "New minute offset before task due time.", - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - "service": { - "description": "New delivery method: \"email\" or \"push\".", - "enum": [ - "email", - "push" - ], - "type": "string" - }, - "type": { - "const": "relative", - "type": "string" - } - }, - "required": [ - "type", - "id" - ], - "type": "object" - }, - { - "properties": { - "due": { - "description": "New due date/time for the reminder.", - "properties": { - "date": { - "description": "Due date in YYYY-MM-DD format.", - "type": "string" - }, - "lang": { - "description": "Language for parsing the due string, e.g. \"en\".", - "type": "string" - }, - "string": { - "description": "Natural language due string, e.g. \"tomorrow at 3pm\".", - "type": "string" - }, - "timezone": { - "description": "Timezone for the reminder, e.g. \"America/New_York\".", - "type": "string" - } - }, - "type": "object" - }, - "id": { - "description": "The ID of the absolute reminder to update.", - "minLength": 1, - "type": "string" - }, - "isUrgent": { - "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", - "type": "boolean" - }, - "service": { - "description": "New delivery method: \"email\" or \"push\".", - "enum": [ - "email", - "push" - ], - "type": "string" - }, - "type": { - "const": "absolute", - "type": "string" - } - }, - "required": [ - "type", - "id" - ], - "type": "object" - }, - { - "properties": { - "id": { - "description": "The ID of the location reminder to update.", - "minLength": 1, - "type": "string" - }, - "locLat": { - "description": "New latitude.", - "type": "string" - }, - "locLong": { - "description": "New longitude.", - "type": "string" - }, - "locTrigger": { - "description": "New trigger condition: \"on_enter\" or \"on_leave\".", - "enum": [ - "on_enter", - "on_leave" - ], - "type": "string" - }, - "name": { - "description": "New location name.", - "type": "string" - }, - "radius": { - "description": "New radius in meters.", - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "type": { - "const": "location", - "type": "string" - } - }, - "required": [ - "type", - "id" - ], - "type": "object" - } -]New value: +[ + { + "properties": { + "id": { + "description": "The ID of the relative reminder to update.", + "minLength": 1, + "type": "string" + }, + "isUrgent": { + "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", + "type": "boolean" + }, + "minuteOffset": { + "description": "New minute offset before task due time.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Omit to keep the current one.", + "type": "string" + }, + "service": { + "description": "New delivery method: \"email\" or \"push\".", + "enum": [ + "email", + "push" + ], + "type": "string" + }, + "type": { + "const": "relative", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "due": { + "description": "New due date/time for the reminder.", + "properties": { + "date": { + "description": "Due date in YYYY-MM-DD format.", + "type": "string" + }, + "lang": { + "description": "Language for parsing the due string, e.g. \"en\".", + "type": "string" + }, + "string": { + "description": "Natural language due string, e.g. \"tomorrow at 3pm\".", + "type": "string" + }, + "timezone": { + "description": "Timezone for the reminder, e.g. \"America/New_York\".", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The ID of the absolute reminder to update.", + "minLength": 1, + "type": "string" + }, + "isUrgent": { + "description": "Whether this is an urgent reminder. Applies to relative and absolute reminders.", + "type": "boolean" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Omit to keep the current one.", + "type": "string" + }, + "service": { + "description": "New delivery method: \"email\" or \"push\".", + "enum": [ + "email", + "push" + ], + "type": "string" + }, + "type": { + "const": "absolute", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + { + "properties": { + "id": { + "description": "The ID of the location reminder to update.", + "minLength": 1, + "type": "string" + }, + "locLat": { + "description": "New latitude.", + "type": "string" + }, + "locLong": { + "description": "New longitude.", + "type": "string" + }, + "locTrigger": { + "description": "New trigger condition: \"on_enter\" or \"on_leave\".", + "enum": [ + "on_enter", + "on_leave" + ], + "type": "string" + }, + "name": { + "description": "New location name.", + "type": "string" + }, + "notifyUser": { + "description": "Who to remind: user ID, email, name, or \"me\". Must collaborate on the task's project. Omit to keep the current one.", + "type": "string" + }, + "radius": { + "description": "New radius in meters.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": { + "const": "location", + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + } +] - added
Output schema / properties / reminders / items / properties / notifyUidAdded value: +{ + "description": "User ID the reminder notifies.", + "type": "string" +}
1 tool update
v13.6.1- Changed
find-activity2 fields changed- changed
Input schema / properties / eventType / enumPrevious value: -[ - "added", - "updated", - "deleted", - "completed", - "uncompleted", - "archived", - "unarchived", - "shared", - "left" -]New value: +[ + "added", + "updated", + "deleted", + "completed", + "uncompleted", + "archived", + "unarchived", + "shared", + "left", + "moved" +] - changed
Input schema / properties / objectType / enumPrevious value: -[ - "task", - "project", - "comment" -]New value: +[ + "task", + "comment", + "project" +]
8 tool updates
v13.3.0- Changed
add-tasks2 fields changed- changed
Input schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task. Use format: \"2h\" (hours), \"90m\" (minutes), \"2h30m\" (combined), or \"1.5h\" (decimal hours). Max 24h."New value: +"The duration of the task. Use format: \"2h\" (hours), \"90m\" (minutes), \"2h30m\" (combined), \"1.5h\" (decimal hours), or \"3d\" (whole days; days cannot be combined with hours or minutes). Todoist apps only display durations under 24 hours: a longer or day-based duration is stored and reported by this server, but the apps show the task as having no duration." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
fetch-object1 field changed- changed
Output schema / properties / object / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "addedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "assignedByUid": { - "type": "string" - }, - "checked": { - "description": "Whether the task is completed.", - "type": "boolean" - }, - "completedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "content": { - "description": "Task title.", - "type": "string" - }, - "deadlineDate": { - "description": "ISO 8601.", - "type": "string" - }, - "description": { - "type": "string" - }, - "dueDate": { - "description": "ISO 8601.", - "type": "string" - }, - "duration": { - "description": "e.g. \"2h30m\".", - "type": "string" - }, - "id": { - "type": "string" - }, - "isDeleted": { - "description": "True when deleted; absent otherwise.", - "type": "boolean" - }, - "isUncompletable": { - "description": "An organizational header, not a real task.", - "type": "boolean" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "parentId": { - "type": "string" - }, - "priority": { - "description": "p1 is highest, p4 lowest.", - "enum": [ - "p1", - "p2", - "p3", - "p4" - ], - "type": "string" - }, - "projectId": { - "type": "string" - }, - "recurring": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string" - } - ], - "description": "False when not recurring, otherwise the recurrence string." - }, - "responsibleUid": { - "type": "string" - }, - "sectionId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "description", - "recurring", - "priority", - "projectId", - "checked" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "Ordering index among siblings.", - "type": "number" - }, - "color": { - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "description": { - "description": "Empty string when none.", - "type": "string" - }, - "folderId": { - "description": "Workspace projects only.", - "type": "string" - }, - "id": { - "type": "string" - }, - "inboxProject": { - "type": "boolean" - }, - "isArchived": { - "type": "boolean" - }, - "isFavorite": { - "type": "boolean" - }, - "isShared": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "parentId": { - "type": "string" - }, - "viewStyle": { - "description": "list, board or calendar.", - "type": "string" - }, - "workspaceId": { - "description": "Undefined for personal projects.", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "isFavorite", - "isShared", - "inboxProject", - "viewStyle", - "childOrder", - "isArchived" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "type": "string" - }, - "fileAttachment": { - "additionalProperties": false, - "properties": { - "fileDuration": { - "description": "Milliseconds, for audio/video.", - "type": "number" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "description": "Bytes.", - "type": "number" - }, - "fileType": { - "description": "MIME type.", - "type": "string" - }, - "fileUrl": { - "type": "string" - }, - "image": { - "description": "For image resource types.", - "type": "string" - }, - "imageHeight": { - "description": "Pixels.", - "type": "number" - }, - "imageWidth": { - "description": "Pixels.", - "type": "number" - }, - "resourceType": { - "description": "file, url, image, etc.", - "type": "string" - }, - "title": { - "description": "For link/url resource types.", - "type": "string" - }, - "uploadState": { - "enum": [ - "pending", - "completed" - ], - "type": "string" - }, - "url": { - "description": "For link/url resource types.", - "type": "string" - } - }, - "required": [ - "resourceType" - ], - "type": "object" - }, - "id": { - "type": "string" - }, - "notifiedUserIds": { - "description": "Users notified about this comment. Absent when nobody was notified.", - "items": { - "type": "string" - }, - "type": "array" - }, - "postedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "postedUid": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "taskId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "postedAt" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "description": { - "description": "Supports Markdown.", - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sectionOrder": { - "description": "Ordering index within the project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "addedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "assignedByUid": { + "type": "string" + }, + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "completedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "deadlineDate": { + "description": "ISO 8601.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "duration": { + "description": "e.g. \"2h30m\", or \"3d\" for a day-based duration.", + "type": "string" + }, + "id": { + "type": "string" + }, + "isDeleted": { + "description": "True when deleted; absent otherwise.", + "type": "boolean" + }, + "isUncompletable": { + "description": "An organizational header, not a real task.", + "type": "boolean" + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "parentId": { + "type": "string" + }, + "priority": { + "description": "p1 is highest, p4 lowest.", + "enum": [ + "p1", + "p2", + "p3", + "p4" + ], + "type": "string" + }, + "projectId": { + "type": "string" + }, + "recurring": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "False when not recurring, otherwise the recurrence string." + }, + "responsibleUid": { + "type": "string" + }, + "sectionId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "description", + "recurring", + "priority", + "projectId", + "checked" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "Ordering index among siblings.", + "type": "number" + }, + "color": { + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "description": { + "description": "Empty string when none.", + "type": "string" + }, + "folderId": { + "description": "Workspace projects only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "inboxProject": { + "type": "boolean" + }, + "isArchived": { + "type": "boolean" + }, + "isFavorite": { + "type": "boolean" + }, + "isShared": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "parentId": { + "type": "string" + }, + "viewStyle": { + "description": "list, board or calendar.", + "type": "string" + }, + "workspaceId": { + "description": "Undefined for personal projects.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "isFavorite", + "isShared", + "inboxProject", + "viewStyle", + "childOrder", + "isArchived" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "fileAttachment": { + "additionalProperties": false, + "properties": { + "fileDuration": { + "description": "Milliseconds, for audio/video.", + "type": "number" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "description": "Bytes.", + "type": "number" + }, + "fileType": { + "description": "MIME type.", + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "image": { + "description": "For image resource types.", + "type": "string" + }, + "imageHeight": { + "description": "Pixels.", + "type": "number" + }, + "imageWidth": { + "description": "Pixels.", + "type": "number" + }, + "resourceType": { + "description": "file, url, image, etc.", + "type": "string" + }, + "title": { + "description": "For link/url resource types.", + "type": "string" + }, + "uploadState": { + "enum": [ + "pending", + "completed" + ], + "type": "string" + }, + "url": { + "description": "For link/url resource types.", + "type": "string" + } + }, + "required": [ + "resourceType" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "notifiedUserIds": { + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" + }, + "postedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "postedUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "taskId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "postedAt" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + } +]
- Changed
find-completed-tasks1 field changed- changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
find-tasks1 field changed- changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
find-tasks-by-date1 field changed- changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
import-project-template1 field changed- changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
reschedule-tasks1 field changed- changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
- Changed
update-tasks2 fields changed- changed
Input schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task. Use format: \"2h\" (hours), \"90m\" (minutes), \"2h30m\" (combined), or \"1.5h\" (decimal hours). Max 24h."New value: +"The duration of the task. Use format: \"2h\" (hours), \"90m\" (minutes), \"2h30m\" (combined), \"1.5h\" (decimal hours), or \"3d\" (whole days; days cannot be combined with hours or minutes). Todoist apps only display durations under 24 hours: a longer or day-based duration is stored and reported by this server, but the apps show the task as having no duration." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"e.g. \"2h30m\"."New value: +"e.g. \"2h30m\", or \"3d\" for a day-based duration."
8 tool updates
v13.2.7- Changed
add-tasks1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
fetch-object1 field changed- changed
Output schema / properties / object / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "addedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "assignedByUid": { - "type": "string" - }, - "checked": { - "description": "Whether the task is completed.", - "type": "boolean" - }, - "completedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "content": { - "description": "Task title.", - "type": "string" - }, - "deadlineDate": { - "description": "ISO 8601.", - "type": "string" - }, - "description": { - "type": "string" - }, - "dueDate": { - "description": "ISO 8601.", - "type": "string" - }, - "duration": { - "description": "e.g. \"2h30m\".", - "type": "string" - }, - "id": { - "type": "string" - }, - "isUncompletable": { - "description": "An organizational header, not a real task.", - "type": "boolean" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "parentId": { - "type": "string" - }, - "priority": { - "description": "p1 is highest, p4 lowest.", - "enum": [ - "p1", - "p2", - "p3", - "p4" - ], - "type": "string" - }, - "projectId": { - "type": "string" - }, - "recurring": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string" - } - ], - "description": "False when not recurring, otherwise the recurrence string." - }, - "responsibleUid": { - "type": "string" - }, - "sectionId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "description", - "recurring", - "priority", - "projectId", - "checked" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "Ordering index among siblings.", - "type": "number" - }, - "color": { - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "description": { - "description": "Empty string when none.", - "type": "string" - }, - "folderId": { - "description": "Workspace projects only.", - "type": "string" - }, - "id": { - "type": "string" - }, - "inboxProject": { - "type": "boolean" - }, - "isArchived": { - "type": "boolean" - }, - "isFavorite": { - "type": "boolean" - }, - "isShared": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "parentId": { - "type": "string" - }, - "viewStyle": { - "description": "list, board or calendar.", - "type": "string" - }, - "workspaceId": { - "description": "Undefined for personal projects.", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "isFavorite", - "isShared", - "inboxProject", - "viewStyle", - "childOrder", - "isArchived" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "type": "string" - }, - "fileAttachment": { - "additionalProperties": false, - "properties": { - "fileDuration": { - "description": "Milliseconds, for audio/video.", - "type": "number" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "description": "Bytes.", - "type": "number" - }, - "fileType": { - "description": "MIME type.", - "type": "string" - }, - "fileUrl": { - "type": "string" - }, - "image": { - "description": "For image resource types.", - "type": "string" - }, - "imageHeight": { - "description": "Pixels.", - "type": "number" - }, - "imageWidth": { - "description": "Pixels.", - "type": "number" - }, - "resourceType": { - "description": "file, url, image, etc.", - "type": "string" - }, - "title": { - "description": "For link/url resource types.", - "type": "string" - }, - "uploadState": { - "enum": [ - "pending", - "completed" - ], - "type": "string" - }, - "url": { - "description": "For link/url resource types.", - "type": "string" - } - }, - "required": [ - "resourceType" - ], - "type": "object" - }, - "id": { - "type": "string" - }, - "notifiedUserIds": { - "description": "Users notified about this comment. Absent when nobody was notified.", - "items": { - "type": "string" - }, - "type": "array" - }, - "postedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "postedUid": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "taskId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "postedAt" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "description": { - "description": "Supports Markdown.", - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sectionOrder": { - "description": "Ordering index within the project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "addedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "assignedByUid": { + "type": "string" + }, + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "completedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "deadlineDate": { + "description": "ISO 8601.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "duration": { + "description": "e.g. \"2h30m\".", + "type": "string" + }, + "id": { + "type": "string" + }, + "isDeleted": { + "description": "True when deleted; absent otherwise.", + "type": "boolean" + }, + "isUncompletable": { + "description": "An organizational header, not a real task.", + "type": "boolean" + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "parentId": { + "type": "string" + }, + "priority": { + "description": "p1 is highest, p4 lowest.", + "enum": [ + "p1", + "p2", + "p3", + "p4" + ], + "type": "string" + }, + "projectId": { + "type": "string" + }, + "recurring": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "False when not recurring, otherwise the recurrence string." + }, + "responsibleUid": { + "type": "string" + }, + "sectionId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "description", + "recurring", + "priority", + "projectId", + "checked" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "Ordering index among siblings.", + "type": "number" + }, + "color": { + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "description": { + "description": "Empty string when none.", + "type": "string" + }, + "folderId": { + "description": "Workspace projects only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "inboxProject": { + "type": "boolean" + }, + "isArchived": { + "type": "boolean" + }, + "isFavorite": { + "type": "boolean" + }, + "isShared": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "parentId": { + "type": "string" + }, + "viewStyle": { + "description": "list, board or calendar.", + "type": "string" + }, + "workspaceId": { + "description": "Undefined for personal projects.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "isFavorite", + "isShared", + "inboxProject", + "viewStyle", + "childOrder", + "isArchived" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "fileAttachment": { + "additionalProperties": false, + "properties": { + "fileDuration": { + "description": "Milliseconds, for audio/video.", + "type": "number" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "description": "Bytes.", + "type": "number" + }, + "fileType": { + "description": "MIME type.", + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "image": { + "description": "For image resource types.", + "type": "string" + }, + "imageHeight": { + "description": "Pixels.", + "type": "number" + }, + "imageWidth": { + "description": "Pixels.", + "type": "number" + }, + "resourceType": { + "description": "file, url, image, etc.", + "type": "string" + }, + "title": { + "description": "For link/url resource types.", + "type": "string" + }, + "uploadState": { + "enum": [ + "pending", + "completed" + ], + "type": "string" + }, + "url": { + "description": "For link/url resource types.", + "type": "string" + } + }, + "required": [ + "resourceType" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "notifiedUserIds": { + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" + }, + "postedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "postedUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "taskId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "postedAt" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + } +]
- Changed
find-completed-tasks1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
find-tasks1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
find-tasks-by-date1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
import-project-template1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
reschedule-tasks1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
- Changed
update-tasks1 field changed- added
Output schema / properties / tasks / items / properties / isDeletedAdded value: +{ + "description": "True when deleted; absent otherwise.", + "type": "boolean" +}
1 tool update
v13.2.6- Changed
get-overview1 field changed- changed
Input schema / properties / projectId / descriptionPrevious value: -"Optional project ID. Use \"inbox\" for the Inbox. If provided, shows detailed overview of that project. If omitted, shows overview of all projects."New value: +"Optional project ID. Use \"inbox\" for the Inbox. If provided, returns that project's tasks grouped by section. If omitted, returns the project and section structure for the whole account with no tasks."
1 tool update
v13.2.4- Changed
get-overview1 field changed- changed
Input schema / properties / projectId / descriptionPrevious value: -"Optional project ID. If provided, shows detailed overview of that project. If omitted, shows overview of all projects."New value: +"Optional project ID. Use \"inbox\" for the Inbox. If provided, shows detailed overview of that project. If omitted, shows overview of all projects."
3 tool updates
v13.2.1- Changed
add-filters2 fields changed- added
Input schema / properties / filters / items / properties / descriptionAdded value: +{ + "description": "A markdown description explaining what the filter is for.", + "type": "string" +} - added
Output schema / properties / filters / items / properties / descriptionAdded value: +{ + "description": "A markdown description explaining what the filter is for. Omitted when the filter has none.", + "type": "string" +}
- Changed
find-filters1 field changed- added
Output schema / properties / filters / items / properties / descriptionAdded value: +{ + "description": "A markdown description explaining what the filter is for. Omitted when the filter has none.", + "type": "string" +}
- Changed
update-filters2 fields changed- added
Input schema / properties / filters / items / properties / descriptionAdded value: +{ + "description": "A markdown description explaining what the filter is for. Use \"remove\" to clear the description; omit the field to leave it unchanged.", + "type": "string" +} - added
Output schema / properties / filters / items / properties / descriptionAdded value: +{ + "description": "A markdown description explaining what the filter is for. Omitted when the filter has none.", + "type": "string" +}
3 tool updates
v13.1.3- Changed
find-tasks1 field changed- changed
Input schema / properties / responsibleUser / descriptionPrevious value: -"Find tasks assigned to this user. Can be a user ID, name, or email address."New value: +"Find tasks assigned to this user. Can be a user ID, name, or email address. The current user also includes unassigned tasks."
- Changed
find-tasks-by-date1 field changed- changed
Input schema / properties / responsibleUser / descriptionPrevious value: -"Filter tasks assigned to this user. User ID, name, or email. For personal queries (summaries, plans, reports), set to current user from user-info to exclude collaborators."New value: +"Filter tasks assigned to this user. User ID, name, or email. The current user also includes unassigned tasks."
- Changed
get-overview3 fields changed- added
Output schema / $defs / __schema0 / properties / sections / items / properties / descriptionAdded value: +{ + "description": "Supports Markdown.", + "type": "string" +} - added
Output schema / $defs / __schema0 / properties / sections / items / properties / sectionOrderAdded value: +{ + "description": "Ordering index within the project.", + "type": "number" +} - changed
Output schema / $defs / __schema0 / properties / sections / items / requiredPrevious value: -[ - "id", - "name" -]New value: +[ + "id", + "name", + "sectionOrder" +]
47 tool updates
v13.0.0- Changed
add-comments2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-filters2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-labels2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-projects2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-reminders2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-sections2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
add-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
analyze-project-health2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
complete-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
delete-object2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
export-project-template2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
fetch2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
fetch-object2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-activity2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-comments2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-completed-tasks4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / since / allOfPrevious value: -[ - { - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "type": "string" - } -]New value: +[ + { + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" + }, + { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + } +] - changed
Input schema / properties / until / allOfPrevious value: -[ - { - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - { - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "type": "string" - } -]New value: +[ + { + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" + }, + { + "pattern": "^\\d{4}-\\d{2}-\\d{2}$" + } +] - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-filters2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-labels2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-project-collaborators2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-projects2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-reminders2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-sections2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
find-tasks-by-date2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-overview6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / $defsAdded value: +{ + "__schema0": { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "The ordering index among siblings.", + "type": "number" + }, + "children": { + "description": "Nested child projects.", + "items": { + "$ref": "#/$defs/__schema0" + }, + "type": "array" + }, + "folderId": { + "description": "The folder ID this project belongs to (workspace projects only).", + "type": "string" + }, + "id": { + "description": "The project ID.", + "type": "string" + }, + "name": { + "description": "The project name.", + "type": "string" + }, + "parentId": { + "description": "The parent project ID (for sub-projects, personal projects only).", + "type": "string" + }, + "sections": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "childOrder", + "sections", + "children" + ], + "type": "object" + } +} - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Output schema / definitionsRemoved value: -{ - "__schema0": { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "The ordering index among siblings.", - "type": "number" - }, - "children": { - "description": "Nested child projects.", - "items": { - "$ref": "#/definitions/__schema0" - }, - "type": "array" - }, - "folderId": { - "description": "The folder ID this project belongs to (workspace projects only).", - "type": "string" - }, - "id": { - "description": "The project ID.", - "type": "string" - }, - "name": { - "description": "The project name.", - "type": "string" - }, - "parentId": { - "description": "The parent project ID (for sub-projects, personal projects only).", - "type": "string" - }, - "sections": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "name", - "childOrder", - "sections", - "children" - ], - "type": "object" - } -} - added
Output schema / properties / projects / items / $refAdded value: +"#/$defs/__schema0" - removed
Output schema / properties / projects / items / allOfRemoved value: -[ - { - "$ref": "#/definitions/__schema0" - } -]
- Changed
get-productivity-stats2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-project-activity-stats2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-project-health2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-workspace-insights2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
import-project-template2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list-workspaces2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
manage-assignments2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
project-management2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
project-move2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
reorder-objects2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
reschedule-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
uncomplete-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-comments2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-filters2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-labels2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-projects2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-reminders2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-sections2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-tasks2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
user-info2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
view-attachment1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
6 tool updates
v12.6.0- Changed
add-comments2 fields changed- added
Input schema / properties / comments / items / properties / notifyUsersAdded value: +{ + "description": "Who to notify about this comment — a user ID, email, full name, or \"me\" for each person. Set this whenever the comment mentions someone; the text of an @mention notifies nobody on its own. Omit to notify whoever the Todoist apps would (the task's assignee, assigner and creator on a first comment, or the previous comment's participants on a reply). Pass [\"none\"] to notify nobody.", + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 25, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / comments / items / properties / notifiedUserIdsAdded value: +{ + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
fetch-object1 field changed- changed
Output schema / properties / object / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "addedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "assignedByUid": { - "type": "string" - }, - "checked": { - "description": "Whether the task is completed.", - "type": "boolean" - }, - "completedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "content": { - "description": "Task title.", - "type": "string" - }, - "deadlineDate": { - "description": "ISO 8601.", - "type": "string" - }, - "description": { - "type": "string" - }, - "dueDate": { - "description": "ISO 8601.", - "type": "string" - }, - "duration": { - "description": "e.g. \"2h30m\".", - "type": "string" - }, - "id": { - "type": "string" - }, - "isUncompletable": { - "description": "An organizational header, not a real task.", - "type": "boolean" - }, - "labels": { - "items": { - "type": "string" - }, - "type": "array" - }, - "parentId": { - "type": "string" - }, - "priority": { - "description": "p1 is highest, p4 lowest.", - "enum": [ - "p1", - "p2", - "p3", - "p4" - ], - "type": "string" - }, - "projectId": { - "type": "string" - }, - "recurring": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string" - } - ], - "description": "False when not recurring, otherwise the recurrence string." - }, - "responsibleUid": { - "type": "string" - }, - "sectionId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "description", - "recurring", - "priority", - "projectId", - "checked" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "Ordering index among siblings.", - "type": "number" - }, - "color": { - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "description": { - "description": "Empty string when none.", - "type": "string" - }, - "folderId": { - "description": "Workspace projects only.", - "type": "string" - }, - "id": { - "type": "string" - }, - "inboxProject": { - "type": "boolean" - }, - "isArchived": { - "type": "boolean" - }, - "isFavorite": { - "type": "boolean" - }, - "isShared": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "parentId": { - "type": "string" - }, - "viewStyle": { - "description": "list, board or calendar.", - "type": "string" - }, - "workspaceId": { - "description": "Undefined for personal projects.", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "isFavorite", - "isShared", - "inboxProject", - "viewStyle", - "childOrder", - "isArchived" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "type": "string" - }, - "fileAttachment": { - "additionalProperties": false, - "properties": { - "fileDuration": { - "description": "Milliseconds, for audio/video.", - "type": "number" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "description": "Bytes.", - "type": "number" - }, - "fileType": { - "description": "MIME type.", - "type": "string" - }, - "fileUrl": { - "type": "string" - }, - "image": { - "description": "For image resource types.", - "type": "string" - }, - "imageHeight": { - "description": "Pixels.", - "type": "number" - }, - "imageWidth": { - "description": "Pixels.", - "type": "number" - }, - "resourceType": { - "description": "file, url, image, etc.", - "type": "string" - }, - "title": { - "description": "For link/url resource types.", - "type": "string" - }, - "uploadState": { - "enum": [ - "pending", - "completed" - ], - "type": "string" - }, - "url": { - "description": "For link/url resource types.", - "type": "string" - } - }, - "required": [ - "resourceType" - ], - "type": "object" - }, - "id": { - "type": "string" - }, - "postedAt": { - "description": "ISO 8601.", - "type": "string" - }, - "postedUid": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "taskId": { - "type": "string" - } - }, - "required": [ - "id", - "content", - "postedAt" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "description": { - "description": "Supports Markdown.", - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sectionOrder": { - "description": "Ordering index within the project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "addedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "assignedByUid": { + "type": "string" + }, + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "completedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "deadlineDate": { + "description": "ISO 8601.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "duration": { + "description": "e.g. \"2h30m\".", + "type": "string" + }, + "id": { + "type": "string" + }, + "isUncompletable": { + "description": "An organizational header, not a real task.", + "type": "boolean" + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "parentId": { + "type": "string" + }, + "priority": { + "description": "p1 is highest, p4 lowest.", + "enum": [ + "p1", + "p2", + "p3", + "p4" + ], + "type": "string" + }, + "projectId": { + "type": "string" + }, + "recurring": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "False when not recurring, otherwise the recurrence string." + }, + "responsibleUid": { + "type": "string" + }, + "sectionId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "description", + "recurring", + "priority", + "projectId", + "checked" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "Ordering index among siblings.", + "type": "number" + }, + "color": { + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "description": { + "description": "Empty string when none.", + "type": "string" + }, + "folderId": { + "description": "Workspace projects only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "inboxProject": { + "type": "boolean" + }, + "isArchived": { + "type": "boolean" + }, + "isFavorite": { + "type": "boolean" + }, + "isShared": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "parentId": { + "type": "string" + }, + "viewStyle": { + "description": "list, board or calendar.", + "type": "string" + }, + "workspaceId": { + "description": "Undefined for personal projects.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "isFavorite", + "isShared", + "inboxProject", + "viewStyle", + "childOrder", + "isArchived" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "fileAttachment": { + "additionalProperties": false, + "properties": { + "fileDuration": { + "description": "Milliseconds, for audio/video.", + "type": "number" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "description": "Bytes.", + "type": "number" + }, + "fileType": { + "description": "MIME type.", + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "image": { + "description": "For image resource types.", + "type": "string" + }, + "imageHeight": { + "description": "Pixels.", + "type": "number" + }, + "imageWidth": { + "description": "Pixels.", + "type": "number" + }, + "resourceType": { + "description": "file, url, image, etc.", + "type": "string" + }, + "title": { + "description": "For link/url resource types.", + "type": "string" + }, + "uploadState": { + "enum": [ + "pending", + "completed" + ], + "type": "string" + }, + "url": { + "description": "For link/url resource types.", + "type": "string" + } + }, + "required": [ + "resourceType" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "notifiedUserIds": { + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" + }, + "postedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "postedUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "taskId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "postedAt" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + } +]
- Changed
find-comments1 field changed- added
Output schema / properties / comments / items / properties / notifiedUserIdsAdded value: +{ + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
get-project-health1 field changed- removed
Output schema / properties / health / properties / taskRecommendationsRemoved value: -{ - "description": "Specific recommendations for individual tasks.", - "items": { - "additionalProperties": false, - "properties": { - "recommendation": { - "description": "The recommendation for this task.", - "type": "string" - }, - "taskId": { - "description": "The ID of the task this recommendation is for.", - "type": "string" - } - }, - "required": [ - "taskId", - "recommendation" - ], - "type": "object" - }, - "type": "array" -}
- Changed
import-project-template1 field changed- added
Output schema / properties / comments / items / properties / notifiedUserIdsAdded value: +{ + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
update-comments1 field changed- added
Output schema / properties / comments / items / properties / notifiedUserIdsAdded value: +{ + "description": "Users notified about this comment. Absent when nobody was notified.", + "items": { + "type": "string" + }, + "type": "array" +}
5 tool updates
v12.5.6- Changed
find-activity1 field changed- changed
Input schema / properties / initiatorId / descriptionPrevious value: -"Filter by the user ID who initiated the event."New value: +"Filter by the user ID who initiated the event. A first-person question (\"what did I complete\") needs this: without it the results cover every collaborator. Get the ID from user-info when you do not already have it."
- Changed
get-overview5 fields changed- added
Output schema / properties / inbox / additionalPropertiesAdded value: +false - removed
Output schema / properties / inbox / anyOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "description": "The inbox project ID.", - "type": "string" - }, - "name": { - "description": "The inbox project name.", - "type": "string" - }, - "sections": { - "description": "Sections in the inbox project.", - "items": { - "additionalProperties": false, - "properties": { - "description": { - "description": "Supports Markdown.", - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sectionOrder": { - "description": "Ordering index within the project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "name", - "sections" - ], - "type": "object" - }, - { - "type": "null" - } -] - added
Output schema / properties / inbox / propertiesAdded value: +{ + "id": { + "description": "The inbox project ID.", + "type": "string" + }, + "name": { + "description": "The inbox project name.", + "type": "string" + }, + "sections": { + "description": "Sections in the inbox project.", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + }, + "type": "array" + } +} - added
Output schema / properties / inbox / requiredAdded value: +[ + "id", + "name", + "sections" +] - added
Output schema / properties / inbox / typeAdded value: +"object"
- Changed
get-project-activity-stats4 fields changed- removed
Output schema / properties / weekItems / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "properties": { - "fromDate": { - "description": "Start date of the week.", - "type": "string" - }, - "toDate": { - "description": "End date of the week.", - "type": "string" - }, - "totalCount": { - "description": "Number of tasks completed in this week.", - "type": "number" - } - }, - "required": [ - "fromDate", - "toDate", - "totalCount" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Output schema / properties / weekItems / itemsAdded value: +{ + "additionalProperties": false, + "properties": { + "fromDate": { + "description": "Start date of the week.", + "type": "string" + }, + "toDate": { + "description": "End date of the week.", + "type": "string" + }, + "totalCount": { + "description": "Number of tasks completed in this week.", + "type": "number" + } + }, + "required": [ + "fromDate", + "toDate", + "totalCount" + ], + "type": "object" +} - added
Output schema / properties / weekItems / typeAdded value: +"array" - changed
Output schema / requiredPrevious value: -[ - "projectId", - "dayItems", - "weekItems" -]New value: +[ + "projectId", + "dayItems" +]
- Changed
get-project-health19 fields changed- removed
Output schema / properties / context / properties / projectDescription / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / context / properties / projectDescription / typeAdded value: +"string" - removed
Output schema / properties / context / properties / projectMetrics / properties / averageCompletionTime / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / context / properties / projectMetrics / properties / averageCompletionTime / typeAdded value: +"number" - changed
Output schema / properties / context / properties / projectMetrics / requiredPrevious value: -[ - "totalTasks", - "completedTasks", - "overdueTasks", - "tasksCreatedThisWeek", - "tasksCompletedThisWeek", - "averageCompletionTime" -]New value: +[ + "totalTasks", + "completedTasks", + "overdueTasks", + "tasksCreatedThisWeek", + "tasksCompletedThisWeek" +] - removed
Output schema / properties / context / properties / tasks / items / properties / deadline / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / context / properties / tasks / items / properties / deadline / typeAdded value: +"string" - removed
Output schema / properties / context / properties / tasks / items / properties / due / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / context / properties / tasks / items / properties / due / typeAdded value: +"string" - changed
Output schema / properties / context / requiredPrevious value: -[ - "projectDescription", - "projectMetrics", - "tasks" -]New value: +[ + "projectMetrics", + "tasks" +] - removed
Output schema / properties / health / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / health / properties / description / typeAdded value: +"string" - removed
Output schema / properties / health / properties / descriptionSummary / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / health / properties / descriptionSummary / typeAdded value: +"string" - removed
Output schema / properties / health / properties / taskRecommendations / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": false, - "properties": { - "recommendation": { - "description": "The recommendation for this task.", - "type": "string" - }, - "taskId": { - "description": "The ID of the task this recommendation is for.", - "type": "string" - } - }, - "required": [ - "taskId", - "recommendation" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Output schema / properties / health / properties / taskRecommendations / itemsAdded value: +{ + "additionalProperties": false, + "properties": { + "recommendation": { + "description": "The recommendation for this task.", + "type": "string" + }, + "taskId": { + "description": "The ID of the task this recommendation is for.", + "type": "string" + } + }, + "required": [ + "taskId", + "recommendation" + ], + "type": "object" +} - added
Output schema / properties / health / properties / taskRecommendations / typeAdded value: +"array" - removed
Output schema / properties / health / properties / updatedAt / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / health / properties / updatedAt / typeAdded value: +"string"
- Changed
get-workspace-insights15 fields changed- removed
Output schema / properties / folderIdRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The folder ID, if applicable." -} - added
Output schema / properties / projectInsights / items / properties / health / additionalPropertiesAdded value: +false - removed
Output schema / properties / projectInsights / items / properties / health / anyOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "isStale": { - "description": "Whether the health data is stale.", - "type": "boolean" - }, - "status": { - "description": "The health status of the project.", - "enum": [ - "UNKNOWN", - "ON_TRACK", - "AT_RISK", - "CRITICAL", - "EXCELLENT", - "ERROR" - ], - "type": "string" - }, - "updateInProgress": { - "description": "Whether a health analysis update is in progress.", - "type": "boolean" - } - }, - "required": [ - "status", - "isStale", - "updateInProgress" - ], - "type": "object" - }, - { - "type": "null" - } -] - changed
Output schema / properties / projectInsights / items / properties / health / descriptionPrevious value: -"Health data for this project, if available."New value: +"Health data for this project. Omitted when the project has none." - added
Output schema / properties / projectInsights / items / properties / health / propertiesAdded value: +{ + "isStale": { + "description": "Whether the health data is stale.", + "type": "boolean" + }, + "status": { + "description": "The health status of the project.", + "enum": [ + "UNKNOWN", + "ON_TRACK", + "AT_RISK", + "CRITICAL", + "EXCELLENT", + "ERROR" + ], + "type": "string" + }, + "updateInProgress": { + "description": "Whether a health analysis update is in progress.", + "type": "boolean" + } +} - added
Output schema / properties / projectInsights / items / properties / health / requiredAdded value: +[ + "status", + "isStale", + "updateInProgress" +] - added
Output schema / properties / projectInsights / items / properties / health / typeAdded value: +"object" - added
Output schema / properties / projectInsights / items / properties / progress / additionalPropertiesAdded value: +false - removed
Output schema / properties / projectInsights / items / properties / progress / anyOfRemoved value: -[ - { - "additionalProperties": false, - "properties": { - "activeCount": { - "description": "Number of active tasks.", - "type": "number" - }, - "completedCount": { - "description": "Number of completed tasks.", - "type": "number" - }, - "progressPercent": { - "description": "Completion percentage (0-100).", - "type": "number" - } - }, - "required": [ - "completedCount", - "activeCount", - "progressPercent" - ], - "type": "object" - }, - { - "type": "null" - } -] - changed
Output schema / properties / projectInsights / items / properties / progress / descriptionPrevious value: -"Progress data for this project, if available."New value: +"Progress data for this project. Omitted when the project has none." - added
Output schema / properties / projectInsights / items / properties / progress / propertiesAdded value: +{ + "activeCount": { + "description": "Number of active tasks.", + "type": "number" + }, + "completedCount": { + "description": "Number of completed tasks.", + "type": "number" + }, + "progressPercent": { + "description": "Completion percentage (0-100).", + "type": "number" + } +} - added
Output schema / properties / projectInsights / items / properties / progress / requiredAdded value: +[ + "completedCount", + "activeCount", + "progressPercent" +] - added
Output schema / properties / projectInsights / items / properties / progress / typeAdded value: +"object" - changed
Output schema / properties / projectInsights / items / requiredPrevious value: -[ - "projectId", - "health", - "progress" -]New value: +[ + "projectId" +] - changed
Output schema / requiredPrevious value: -[ - "workspaceId", - "workspaceName", - "folderId", - "projectInsights" -]New value: +[ + "workspaceId", + "workspaceName", + "projectInsights" +]
33 tool updates
v12.5.3- Changed
add-comments19 fields changed- removed
Output schema / properties / comments / items / properties / content / descriptionRemoved value: -"The content of the comment." - removed
Output schema / properties / comments / items / properties / fileAttachment / descriptionRemoved value: -"File attachment information, if any." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileDuration / descriptionPrevious value: -"The duration in milliseconds (for audio/video files)."New value: +"Milliseconds, for audio/video." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileName / descriptionRemoved value: -"The name of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileSize / descriptionPrevious value: -"The size of the file in bytes."New value: +"Bytes." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileType / descriptionPrevious value: -"The MIME type of the file."New value: +"MIME type." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileUrl / descriptionRemoved value: -"The URL to access the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / image / descriptionPrevious value: -"The image URL for image resource types."New value: +"For image resource types." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageHeight / descriptionPrevious value: -"The height of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageWidth / descriptionPrevious value: -"The width of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / resourceType / descriptionPrevious value: -"The type of resource (file, url, image, etc)."New value: +"file, url, image, etc." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / title / descriptionPrevious value: -"The title for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / uploadState / descriptionRemoved value: -"The upload state of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / url / descriptionPrevious value: -"The URL for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / id / descriptionRemoved value: -"The unique ID of the comment." - changed
Output schema / properties / comments / items / properties / postedAt / descriptionPrevious value: -"When the comment was posted (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / comments / items / properties / postedUid / descriptionRemoved value: -"The UID of the user who posted this comment." - removed
Output schema / properties / comments / items / properties / projectId / descriptionRemoved value: -"The ID of the project this comment belongs to." - removed
Output schema / properties / comments / items / properties / taskId / descriptionRemoved value: -"The ID of the task this comment belongs to."
- Changed
add-filters1 field changed- removed
Output schema / properties / filters / items / properties / color / descriptionRemoved value: -"The color key of the entity."
- Changed
add-labels5 fields changed- removed
Output schema / properties / labels / items / properties / color / descriptionRemoved value: -"The color key of the entity." - removed
Output schema / properties / labels / items / properties / id / descriptionRemoved value: -"The unique ID of the label." - removed
Output schema / properties / labels / items / properties / isFavorite / descriptionRemoved value: -"Whether the label is marked as favorite." - removed
Output schema / properties / labels / items / properties / name / descriptionRemoved value: -"The name of the label." - changed
Output schema / properties / labels / items / properties / order / descriptionPrevious value: -"The display order of the label."New value: +"Display order."
- Changed
add-projects16 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed." - changed
Output schema / properties / projects / items / properties / childOrder / descriptionPrevious value: -"The ordering index of the project among its siblings."New value: +"Ordering index among siblings." - removed
Output schema / properties / projects / items / properties / color / descriptionRemoved value: -"The color key of the entity." - changed
Output schema / properties / projects / items / properties / description / descriptionPrevious value: -"The description of the project (empty string if none)."New value: +"Empty string when none." - changed
Output schema / properties / projects / items / properties / folderId / descriptionPrevious value: -"The ID of the folder this project belongs to (workspace projects only)."New value: +"Workspace projects only." - removed
Output schema / properties / projects / items / properties / id / descriptionRemoved value: -"The unique ID of the project." - removed
Output schema / properties / projects / items / properties / inboxProject / descriptionRemoved value: -"Whether this is the inbox project." - removed
Output schema / properties / projects / items / properties / isArchived / descriptionRemoved value: -"Whether the project is archived." - removed
Output schema / properties / projects / items / properties / isFavorite / descriptionRemoved value: -"Whether the project is marked as favorite." - removed
Output schema / properties / projects / items / properties / isShared / descriptionRemoved value: -"Whether the project is shared." - removed
Output schema / properties / projects / items / properties / name / descriptionRemoved value: -"The name of the project." - removed
Output schema / properties / projects / items / properties / parentId / descriptionRemoved value: -"The ID of the parent project (for sub-projects)." - changed
Output schema / properties / projects / items / properties / viewStyle / descriptionPrevious value: -"The view style of the project (list, board, calendar)."New value: +"list, board or calendar." - changed
Output schema / properties / projects / items / properties / workspaceId / descriptionPrevious value: -"The ID of the workspace this project belongs to (undefined for personal projects)."New value: +"Undefined for personal projects."
- Changed
add-reminders15 fields changed- changed
Output schema / properties / reminders / items / properties / due / descriptionPrevious value: -"Due date info (absolute and sometimes relative reminders)."New value: +"Absolute, and sometimes relative, reminders." - changed
Output schema / properties / reminders / items / properties / due / properties / date / descriptionPrevious value: -"Due date in ISO format."New value: +"ISO 8601." - changed
Output schema / properties / reminders / items / properties / due / properties / datetime / descriptionPrevious value: -"Due datetime in ISO format."New value: +"ISO 8601." - removed
Output schema / properties / reminders / items / properties / due / properties / isRecurring / descriptionRemoved value: -"Whether this is a recurring reminder." - removed
Output schema / properties / reminders / items / properties / due / properties / timezone / descriptionRemoved value: -"Timezone of the reminder." - removed
Output schema / properties / reminders / items / properties / id / descriptionRemoved value: -"The unique ID of the reminder." - changed
Output schema / properties / reminders / items / properties / isUrgent / descriptionPrevious value: -"Whether this is an urgent reminder (relative and absolute reminders only)."New value: +"Relative and absolute reminders only." - changed
Output schema / properties / reminders / items / properties / locLat / descriptionPrevious value: -"Latitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locLong / descriptionPrevious value: -"Longitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locTrigger / descriptionPrevious value: -"Trigger type: on_enter or on_leave (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / minuteOffset / descriptionPrevious value: -"Minutes before due time to trigger (relative reminders only)."New value: +"Minutes before due. Relative reminders only." - changed
Output schema / properties / reminders / items / properties / name / descriptionPrevious value: -"Location name (location reminders only)."New value: +"Location name. Location reminders only." - changed
Output schema / properties / reminders / items / properties / radius / descriptionPrevious value: -"Geofence radius in meters (location reminders only)."New value: +"Geofence radius in metres. Location reminders only." - removed
Output schema / properties / reminders / items / properties / taskId / descriptionRemoved value: -"The task ID this reminder belongs to." - removed
Output schema / properties / reminders / items / properties / type / descriptionRemoved value: -"The type of reminder: relative, absolute, or location."
- Changed
add-sections7 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed." - changed
Output schema / properties / sections / items / properties / description / descriptionPrevious value: -"The description of the section. Supports Markdown."New value: +"Supports Markdown." - removed
Output schema / properties / sections / items / properties / id / descriptionRemoved value: -"The unique ID of the section." - removed
Output schema / properties / sections / items / properties / name / descriptionRemoved value: -"The name of the section." - changed
Output schema / properties / sections / items / properties / sectionOrder / descriptionPrevious value: -"The ordering index of the section within its project."New value: +"Ordering index within the project."
- Changed
add-tasks21 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
complete-tasks3 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed."
- Changed
fetch-object2 fields changed- changed
Output schema / properties / children / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "checked": { - "description": "Whether the task is checked/completed.", - "type": "boolean" - }, - "content": { - "description": "The task title/content.", - "type": "string" - }, - "dueDate": { - "description": "The due date of the task (ISO 8601 format).", - "type": "string" - }, - "hasChildren": { - "description": "Whether this subtask has subtasks of its own. Fetch it with includeChildren to expand.", - "type": "boolean" - }, - "id": { - "description": "The unique ID of the task.", - "type": "string" - } - }, - "required": [ - "id", - "content", - "checked", - "hasChildren" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "hasChildren": { - "description": "Whether this sub-project has sub-projects of its own. Fetch it with includeChildren to expand.", - "type": "boolean" - }, - "id": { - "description": "The unique ID of the project.", - "type": "string" - }, - "name": { - "description": "The name of the project.", - "type": "string" - } - }, - "required": [ - "id", - "name", - "hasChildren" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "hasChildren": { + "description": "Whether this subtask has subtasks of its own. Fetch it with includeChildren to expand.", + "type": "boolean" + }, + "id": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "checked", + "hasChildren" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "hasChildren": { + "description": "Whether this sub-project has sub-projects of its own. Fetch it with includeChildren to expand.", + "type": "boolean" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "hasChildren" + ], + "type": "object" + } +] - changed
Output schema / properties / object / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "addedAt": { - "description": "When the task was created (ISO 8601 format).", - "type": "string" - }, - "assignedByUid": { - "description": "The UID of the user who assigned this task.", - "type": "string" - }, - "checked": { - "description": "Whether the task is checked/completed.", - "type": "boolean" - }, - "completedAt": { - "description": "When the task was completed (ISO 8601 format).", - "type": "string" - }, - "content": { - "description": "The task title/content.", - "type": "string" - }, - "deadlineDate": { - "description": "The deadline date of the task (ISO 8601 format).", - "type": "string" - }, - "description": { - "description": "The task description.", - "type": "string" - }, - "dueDate": { - "description": "The due date of the task (ISO 8601 format).", - "type": "string" - }, - "duration": { - "description": "The duration of the task (e.g., \"2h30m\").", - "type": "string" - }, - "id": { - "description": "The unique ID of the task.", - "type": "string" - }, - "isUncompletable": { - "description": "Whether the task is uncompletable (organizational header).", - "type": "boolean" - }, - "labels": { - "description": "The labels attached to this task.", - "items": { - "type": "string" - }, - "type": "array" - }, - "parentId": { - "description": "The ID of the parent task (for subtasks).", - "type": "string" - }, - "priority": { - "description": "The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest).", - "enum": [ - "p1", - "p2", - "p3", - "p4" - ], - "type": "string" - }, - "projectId": { - "description": "The ID of the project this task belongs to.", - "type": "string" - }, - "recurring": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "string" - } - ], - "description": "Whether the task is recurring, or the recurrence string." - }, - "responsibleUid": { - "description": "The UID of the user responsible for this task.", - "type": "string" - }, - "sectionId": { - "description": "The ID of the section this task belongs to.", - "type": "string" - } - }, - "required": [ - "id", - "content", - "description", - "recurring", - "priority", - "projectId", - "checked" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "childOrder": { - "description": "The ordering index of the project among its siblings.", - "type": "number" - }, - "color": { - "description": "The color key of the entity.", - "enum": [ - "berry_red", - "red", - "orange", - "yellow", - "olive_green", - "lime_green", - "green", - "mint_green", - "teal", - "sky_blue", - "light_blue", - "blue", - "grape", - "violet", - "lavender", - "magenta", - "salmon", - "charcoal", - "grey", - "taupe" - ], - "type": "string" - }, - "description": { - "description": "The description of the project (empty string if none).", - "type": "string" - }, - "folderId": { - "description": "The ID of the folder this project belongs to (workspace projects only).", - "type": "string" - }, - "id": { - "description": "The unique ID of the project.", - "type": "string" - }, - "inboxProject": { - "description": "Whether this is the inbox project.", - "type": "boolean" - }, - "isArchived": { - "description": "Whether the project is archived.", - "type": "boolean" - }, - "isFavorite": { - "description": "Whether the project is marked as favorite.", - "type": "boolean" - }, - "isShared": { - "description": "Whether the project is shared.", - "type": "boolean" - }, - "name": { - "description": "The name of the project.", - "type": "string" - }, - "parentId": { - "description": "The ID of the parent project (for sub-projects).", - "type": "string" - }, - "viewStyle": { - "description": "The view style of the project (list, board, calendar).", - "type": "string" - }, - "workspaceId": { - "description": "The ID of the workspace this project belongs to (undefined for personal projects).", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "isFavorite", - "isShared", - "inboxProject", - "viewStyle", - "childOrder", - "isArchived" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "content": { - "description": "The content of the comment.", - "type": "string" - }, - "fileAttachment": { - "additionalProperties": false, - "description": "File attachment information, if any.", - "properties": { - "fileDuration": { - "description": "The duration in milliseconds (for audio/video files).", - "type": "number" - }, - "fileName": { - "description": "The name of the file.", - "type": "string" - }, - "fileSize": { - "description": "The size of the file in bytes.", - "type": "number" - }, - "fileType": { - "description": "The MIME type of the file.", - "type": "string" - }, - "fileUrl": { - "description": "The URL to access the file.", - "type": "string" - }, - "image": { - "description": "The image URL for image resource types.", - "type": "string" - }, - "imageHeight": { - "description": "The height of the image in pixels.", - "type": "number" - }, - "imageWidth": { - "description": "The width of the image in pixels.", - "type": "number" - }, - "resourceType": { - "description": "The type of resource (file, url, image, etc).", - "type": "string" - }, - "title": { - "description": "The title for link/url resource types.", - "type": "string" - }, - "uploadState": { - "description": "The upload state of the file.", - "enum": [ - "pending", - "completed" - ], - "type": "string" - }, - "url": { - "description": "The URL for link/url resource types.", - "type": "string" - } - }, - "required": [ - "resourceType" - ], - "type": "object" - }, - "id": { - "description": "The unique ID of the comment.", - "type": "string" - }, - "postedAt": { - "description": "When the comment was posted (ISO 8601 format).", - "type": "string" - }, - "postedUid": { - "description": "The UID of the user who posted this comment.", - "type": "string" - }, - "projectId": { - "description": "The ID of the project this comment belongs to.", - "type": "string" - }, - "taskId": { - "description": "The ID of the task this comment belongs to.", - "type": "string" - } - }, - "required": [ - "id", - "content", - "postedAt" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "description": { - "description": "The description of the section. Supports Markdown.", - "type": "string" - }, - "id": { - "description": "The unique ID of the section.", - "type": "string" - }, - "name": { - "description": "The name of the section.", - "type": "string" - }, - "sectionOrder": { - "description": "The ordering index of the section within its project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "addedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "assignedByUid": { + "type": "string" + }, + "checked": { + "description": "Whether the task is completed.", + "type": "boolean" + }, + "completedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "content": { + "description": "Task title.", + "type": "string" + }, + "deadlineDate": { + "description": "ISO 8601.", + "type": "string" + }, + "description": { + "type": "string" + }, + "dueDate": { + "description": "ISO 8601.", + "type": "string" + }, + "duration": { + "description": "e.g. \"2h30m\".", + "type": "string" + }, + "id": { + "type": "string" + }, + "isUncompletable": { + "description": "An organizational header, not a real task.", + "type": "boolean" + }, + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "parentId": { + "type": "string" + }, + "priority": { + "description": "p1 is highest, p4 lowest.", + "enum": [ + "p1", + "p2", + "p3", + "p4" + ], + "type": "string" + }, + "projectId": { + "type": "string" + }, + "recurring": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "False when not recurring, otherwise the recurrence string." + }, + "responsibleUid": { + "type": "string" + }, + "sectionId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "description", + "recurring", + "priority", + "projectId", + "checked" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "childOrder": { + "description": "Ordering index among siblings.", + "type": "number" + }, + "color": { + "enum": [ + "berry_red", + "red", + "orange", + "yellow", + "olive_green", + "lime_green", + "green", + "mint_green", + "teal", + "sky_blue", + "light_blue", + "blue", + "grape", + "violet", + "lavender", + "magenta", + "salmon", + "charcoal", + "grey", + "taupe" + ], + "type": "string" + }, + "description": { + "description": "Empty string when none.", + "type": "string" + }, + "folderId": { + "description": "Workspace projects only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "inboxProject": { + "type": "boolean" + }, + "isArchived": { + "type": "boolean" + }, + "isFavorite": { + "type": "boolean" + }, + "isShared": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "parentId": { + "type": "string" + }, + "viewStyle": { + "description": "list, board or calendar.", + "type": "string" + }, + "workspaceId": { + "description": "Undefined for personal projects.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "isFavorite", + "isShared", + "inboxProject", + "viewStyle", + "childOrder", + "isArchived" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "fileAttachment": { + "additionalProperties": false, + "properties": { + "fileDuration": { + "description": "Milliseconds, for audio/video.", + "type": "number" + }, + "fileName": { + "type": "string" + }, + "fileSize": { + "description": "Bytes.", + "type": "number" + }, + "fileType": { + "description": "MIME type.", + "type": "string" + }, + "fileUrl": { + "type": "string" + }, + "image": { + "description": "For image resource types.", + "type": "string" + }, + "imageHeight": { + "description": "Pixels.", + "type": "number" + }, + "imageWidth": { + "description": "Pixels.", + "type": "number" + }, + "resourceType": { + "description": "file, url, image, etc.", + "type": "string" + }, + "title": { + "description": "For link/url resource types.", + "type": "string" + }, + "uploadState": { + "enum": [ + "pending", + "completed" + ], + "type": "string" + }, + "url": { + "description": "For link/url resource types.", + "type": "string" + } + }, + "required": [ + "resourceType" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "postedAt": { + "description": "ISO 8601.", + "type": "string" + }, + "postedUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "taskId": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "postedAt" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + } +]
- Changed
find-activity12 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - changed
Output schema / properties / events / items / properties / eventDate / descriptionPrevious value: -"When the event occurred (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / events / items / properties / eventType / descriptionPrevious value: -"The type of event (added, updated, deleted, completed, etc)."New value: +"added, updated, deleted, completed, etc." - removed
Output schema / properties / events / items / properties / extraData / descriptionRemoved value: -"Additional event data." - removed
Output schema / properties / events / items / properties / id / descriptionRemoved value: -"The unique ID of the activity event." - changed
Output schema / properties / events / items / properties / initiatorId / descriptionPrevious value: -"The ID of the user who initiated this event."New value: +"User who initiated the event." - removed
Output schema / properties / events / items / properties / objectId / descriptionRemoved value: -"The ID of the object this event relates to." - changed
Output schema / properties / events / items / properties / objectType / descriptionPrevious value: -"The type of object this event relates to (task, project, etc)."New value: +"task, project, etc." - removed
Output schema / properties / events / items / properties / parentItemId / descriptionRemoved value: -"The ID of the parent item." - removed
Output schema / properties / events / items / properties / parentProjectId / descriptionRemoved value: -"The ID of the parent project." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results."
- Changed
find-comments21 fields changed- removed
Output schema / properties / comments / items / properties / content / descriptionRemoved value: -"The content of the comment." - removed
Output schema / properties / comments / items / properties / fileAttachment / descriptionRemoved value: -"File attachment information, if any." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileDuration / descriptionPrevious value: -"The duration in milliseconds (for audio/video files)."New value: +"Milliseconds, for audio/video." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileName / descriptionRemoved value: -"The name of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileSize / descriptionPrevious value: -"The size of the file in bytes."New value: +"Bytes." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileType / descriptionPrevious value: -"The MIME type of the file."New value: +"MIME type." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileUrl / descriptionRemoved value: -"The URL to access the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / image / descriptionPrevious value: -"The image URL for image resource types."New value: +"For image resource types." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageHeight / descriptionPrevious value: -"The height of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageWidth / descriptionPrevious value: -"The width of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / resourceType / descriptionPrevious value: -"The type of resource (file, url, image, etc)."New value: +"file, url, image, etc." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / title / descriptionPrevious value: -"The title for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / uploadState / descriptionRemoved value: -"The upload state of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / url / descriptionPrevious value: -"The URL for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / id / descriptionRemoved value: -"The unique ID of the comment." - changed
Output schema / properties / comments / items / properties / postedAt / descriptionPrevious value: -"When the comment was posted (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / comments / items / properties / postedUid / descriptionRemoved value: -"The UID of the user who posted this comment." - removed
Output schema / properties / comments / items / properties / projectId / descriptionRemoved value: -"The ID of the project this comment belongs to." - removed
Output schema / properties / comments / items / properties / taskId / descriptionRemoved value: -"The ID of the task this comment belongs to." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results."
- Changed
find-completed-tasks21 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
find-filters1 field changed- removed
Output schema / properties / filters / items / properties / color / descriptionRemoved value: -"The color key of the entity."
- Changed
find-labels8 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / labels / items / properties / color / descriptionRemoved value: -"The color key of the entity." - removed
Output schema / properties / labels / items / properties / id / descriptionRemoved value: -"The unique ID of the label." - removed
Output schema / properties / labels / items / properties / isFavorite / descriptionRemoved value: -"Whether the label is marked as favorite." - removed
Output schema / properties / labels / items / properties / name / descriptionRemoved value: -"The name of the label." - changed
Output schema / properties / labels / items / properties / order / descriptionPrevious value: -"The display order of the label."New value: +"Display order." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results."
- Changed
find-project-collaborators4 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / collaborators / items / properties / email / descriptionRemoved value: -"The email address of the user." - removed
Output schema / properties / collaborators / items / properties / id / descriptionRemoved value: -"The unique ID of the user." - removed
Output schema / properties / collaborators / items / properties / name / descriptionRemoved value: -"The full name of the user."
- Changed
find-projects16 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results." - changed
Output schema / properties / projects / items / properties / childOrder / descriptionPrevious value: -"The ordering index of the project among its siblings."New value: +"Ordering index among siblings." - removed
Output schema / properties / projects / items / properties / color / descriptionRemoved value: -"The color key of the entity." - changed
Output schema / properties / projects / items / properties / description / descriptionPrevious value: -"The description of the project (empty string if none)."New value: +"Empty string when none." - changed
Output schema / properties / projects / items / properties / folderId / descriptionPrevious value: -"The ID of the folder this project belongs to (workspace projects only)."New value: +"Workspace projects only." - removed
Output schema / properties / projects / items / properties / id / descriptionRemoved value: -"The unique ID of the project." - removed
Output schema / properties / projects / items / properties / inboxProject / descriptionRemoved value: -"Whether this is the inbox project." - removed
Output schema / properties / projects / items / properties / isArchived / descriptionRemoved value: -"Whether the project is archived." - removed
Output schema / properties / projects / items / properties / isFavorite / descriptionRemoved value: -"Whether the project is marked as favorite." - removed
Output schema / properties / projects / items / properties / isShared / descriptionRemoved value: -"Whether the project is shared." - removed
Output schema / properties / projects / items / properties / name / descriptionRemoved value: -"The name of the project." - removed
Output schema / properties / projects / items / properties / parentId / descriptionRemoved value: -"The ID of the parent project (for sub-projects)." - changed
Output schema / properties / projects / items / properties / viewStyle / descriptionPrevious value: -"The view style of the project (list, board, calendar)."New value: +"list, board or calendar." - changed
Output schema / properties / projects / items / properties / workspaceId / descriptionPrevious value: -"The ID of the workspace this project belongs to (undefined for personal projects)."New value: +"Undefined for personal projects."
- Changed
find-reminders15 fields changed- changed
Output schema / properties / reminders / items / properties / due / descriptionPrevious value: -"Due date info (absolute and sometimes relative reminders)."New value: +"Absolute, and sometimes relative, reminders." - changed
Output schema / properties / reminders / items / properties / due / properties / date / descriptionPrevious value: -"Due date in ISO format."New value: +"ISO 8601." - changed
Output schema / properties / reminders / items / properties / due / properties / datetime / descriptionPrevious value: -"Due datetime in ISO format."New value: +"ISO 8601." - removed
Output schema / properties / reminders / items / properties / due / properties / isRecurring / descriptionRemoved value: -"Whether this is a recurring reminder." - removed
Output schema / properties / reminders / items / properties / due / properties / timezone / descriptionRemoved value: -"Timezone of the reminder." - removed
Output schema / properties / reminders / items / properties / id / descriptionRemoved value: -"The unique ID of the reminder." - changed
Output schema / properties / reminders / items / properties / isUrgent / descriptionPrevious value: -"Whether this is an urgent reminder (relative and absolute reminders only)."New value: +"Relative and absolute reminders only." - changed
Output schema / properties / reminders / items / properties / locLat / descriptionPrevious value: -"Latitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locLong / descriptionPrevious value: -"Longitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locTrigger / descriptionPrevious value: -"Trigger type: on_enter or on_leave (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / minuteOffset / descriptionPrevious value: -"Minutes before due time to trigger (relative reminders only)."New value: +"Minutes before due. Relative reminders only." - changed
Output schema / properties / reminders / items / properties / name / descriptionPrevious value: -"Location name (location reminders only)."New value: +"Location name. Location reminders only." - changed
Output schema / properties / reminders / items / properties / radius / descriptionPrevious value: -"Geofence radius in meters (location reminders only)."New value: +"Geofence radius in metres. Location reminders only." - removed
Output schema / properties / reminders / items / properties / taskId / descriptionRemoved value: -"The task ID this reminder belongs to." - removed
Output schema / properties / reminders / items / properties / type / descriptionRemoved value: -"The type of reminder: relative, absolute, or location."
- Changed
find-sections5 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - changed
Output schema / properties / sections / items / properties / description / descriptionPrevious value: -"The description of the section. Supports Markdown."New value: +"Supports Markdown." - removed
Output schema / properties / sections / items / properties / id / descriptionRemoved value: -"The unique ID of the section." - removed
Output schema / properties / sections / items / properties / name / descriptionRemoved value: -"The name of the section." - changed
Output schema / properties / sections / items / properties / sectionOrder / descriptionPrevious value: -"The ordering index of the section within its project."New value: +"Ordering index within the project."
- Changed
find-tasks21 fields changed- removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
find-tasks-by-date22 fields changed- changed
Input schema / properties / startDate / descriptionPrevious value: -"The start date to get the tasks for. Format: YYYY-MM-DD or 'today'."New value: +"The start date to get the tasks for. Format: YYYY-MM-DD, or 'today', which by default also includes overdue tasks." - removed
Output schema / properties / appliedFilters / descriptionRemoved value: -"The filters that were applied to the search." - removed
Output schema / properties / hasMore / descriptionRemoved value: -"Whether there are more results available." - removed
Output schema / properties / nextCursor / descriptionRemoved value: -"Cursor for the next page of results." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
get-overview5 fields changed- changed
Output schema / properties / inbox / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "description": "The inbox project ID.", - "type": "string" - }, - "name": { - "description": "The inbox project name.", - "type": "string" - }, - "sections": { - "description": "Sections in the inbox project.", - "items": { - "additionalProperties": false, - "properties": { - "description": { - "description": "The description of the section. Supports Markdown.", - "type": "string" - }, - "id": { - "description": "The unique ID of the section.", - "type": "string" - }, - "name": { - "description": "The name of the section.", - "type": "string" - }, - "sectionOrder": { - "description": "The ordering index of the section within its project.", - "type": "number" - } - }, - "required": [ - "id", - "name", - "sectionOrder" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "id", - "name", - "sections" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "id": { + "description": "The inbox project ID.", + "type": "string" + }, + "name": { + "description": "The inbox project name.", + "type": "string" + }, + "sections": { + "description": "Sections in the inbox project.", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "description": "Supports Markdown.", + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "sectionOrder": { + "description": "Ordering index within the project.", + "type": "number" + } + }, + "required": [ + "id", + "name", + "sectionOrder" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "sections" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / sections / items / properties / description / descriptionPrevious value: -"The description of the section. Supports Markdown."New value: +"Supports Markdown." - removed
Output schema / properties / sections / items / properties / id / descriptionRemoved value: -"The unique ID of the section." - removed
Output schema / properties / sections / items / properties / name / descriptionRemoved value: -"The name of the section." - changed
Output schema / properties / sections / items / properties / sectionOrder / descriptionPrevious value: -"The ordering index of the section within its project."New value: +"Ordering index within the project."
- Changed
import-project-template41 fields changed- removed
Output schema / properties / comments / items / properties / content / descriptionRemoved value: -"The content of the comment." - removed
Output schema / properties / comments / items / properties / fileAttachment / descriptionRemoved value: -"File attachment information, if any." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileDuration / descriptionPrevious value: -"The duration in milliseconds (for audio/video files)."New value: +"Milliseconds, for audio/video." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileName / descriptionRemoved value: -"The name of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileSize / descriptionPrevious value: -"The size of the file in bytes."New value: +"Bytes." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileType / descriptionPrevious value: -"The MIME type of the file."New value: +"MIME type." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileUrl / descriptionRemoved value: -"The URL to access the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / image / descriptionPrevious value: -"The image URL for image resource types."New value: +"For image resource types." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageHeight / descriptionPrevious value: -"The height of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageWidth / descriptionPrevious value: -"The width of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / resourceType / descriptionPrevious value: -"The type of resource (file, url, image, etc)."New value: +"file, url, image, etc." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / title / descriptionPrevious value: -"The title for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / uploadState / descriptionRemoved value: -"The upload state of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / url / descriptionPrevious value: -"The URL for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / id / descriptionRemoved value: -"The unique ID of the comment." - changed
Output schema / properties / comments / items / properties / postedAt / descriptionPrevious value: -"When the comment was posted (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / comments / items / properties / postedUid / descriptionRemoved value: -"The UID of the user who posted this comment." - removed
Output schema / properties / comments / items / properties / projectId / descriptionRemoved value: -"The ID of the project this comment belongs to." - removed
Output schema / properties / comments / items / properties / taskId / descriptionRemoved value: -"The ID of the task this comment belongs to." - changed
Output schema / properties / sections / items / properties / description / descriptionPrevious value: -"The description of the section. Supports Markdown."New value: +"Supports Markdown." - removed
Output schema / properties / sections / items / properties / id / descriptionRemoved value: -"The unique ID of the section." - removed
Output schema / properties / sections / items / properties / name / descriptionRemoved value: -"The name of the section." - changed
Output schema / properties / sections / items / properties / sectionOrder / descriptionPrevious value: -"The ordering index of the section within its project."New value: +"Ordering index within the project." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
project-management13 fields changed- changed
Output schema / properties / project / properties / childOrder / descriptionPrevious value: -"The ordering index of the project among its siblings."New value: +"Ordering index among siblings." - removed
Output schema / properties / project / properties / color / descriptionRemoved value: -"The color key of the entity." - changed
Output schema / properties / project / properties / description / descriptionPrevious value: -"The description of the project (empty string if none)."New value: +"Empty string when none." - changed
Output schema / properties / project / properties / folderId / descriptionPrevious value: -"The ID of the folder this project belongs to (workspace projects only)."New value: +"Workspace projects only." - removed
Output schema / properties / project / properties / id / descriptionRemoved value: -"The unique ID of the project." - removed
Output schema / properties / project / properties / inboxProject / descriptionRemoved value: -"Whether this is the inbox project." - removed
Output schema / properties / project / properties / isArchived / descriptionRemoved value: -"Whether the project is archived." - removed
Output schema / properties / project / properties / isFavorite / descriptionRemoved value: -"Whether the project is marked as favorite." - removed
Output schema / properties / project / properties / isShared / descriptionRemoved value: -"Whether the project is shared." - removed
Output schema / properties / project / properties / name / descriptionRemoved value: -"The name of the project." - removed
Output schema / properties / project / properties / parentId / descriptionRemoved value: -"The ID of the parent project (for sub-projects)." - changed
Output schema / properties / project / properties / viewStyle / descriptionPrevious value: -"The view style of the project (list, board, calendar)."New value: +"list, board or calendar." - changed
Output schema / properties / project / properties / workspaceId / descriptionPrevious value: -"The ID of the workspace this project belongs to (undefined for personal projects)."New value: +"Undefined for personal projects."
- Changed
project-move13 fields changed- changed
Output schema / properties / project / properties / childOrder / descriptionPrevious value: -"The ordering index of the project among its siblings."New value: +"Ordering index among siblings." - removed
Output schema / properties / project / properties / color / descriptionRemoved value: -"The color key of the entity." - changed
Output schema / properties / project / properties / description / descriptionPrevious value: -"The description of the project (empty string if none)."New value: +"Empty string when none." - changed
Output schema / properties / project / properties / folderId / descriptionPrevious value: -"The ID of the folder this project belongs to (workspace projects only)."New value: +"Workspace projects only." - removed
Output schema / properties / project / properties / id / descriptionRemoved value: -"The unique ID of the project." - removed
Output schema / properties / project / properties / inboxProject / descriptionRemoved value: -"Whether this is the inbox project." - removed
Output schema / properties / project / properties / isArchived / descriptionRemoved value: -"Whether the project is archived." - removed
Output schema / properties / project / properties / isFavorite / descriptionRemoved value: -"Whether the project is marked as favorite." - removed
Output schema / properties / project / properties / isShared / descriptionRemoved value: -"Whether the project is shared." - removed
Output schema / properties / project / properties / name / descriptionRemoved value: -"The name of the project." - removed
Output schema / properties / project / properties / parentId / descriptionRemoved value: -"The ID of the parent project (for sub-projects)." - changed
Output schema / properties / project / properties / viewStyle / descriptionPrevious value: -"The view style of the project (list, board, calendar)."New value: +"list, board or calendar." - changed
Output schema / properties / project / properties / workspaceId / descriptionPrevious value: -"The ID of the workspace this project belongs to (undefined for personal projects)."New value: +"Undefined for personal projects."
- Changed
reschedule-tasks18 fields changed- changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
- Changed
uncomplete-tasks3 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed."
- Changed
update-comments19 fields changed- removed
Output schema / properties / comments / items / properties / content / descriptionRemoved value: -"The content of the comment." - removed
Output schema / properties / comments / items / properties / fileAttachment / descriptionRemoved value: -"File attachment information, if any." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileDuration / descriptionPrevious value: -"The duration in milliseconds (for audio/video files)."New value: +"Milliseconds, for audio/video." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileName / descriptionRemoved value: -"The name of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileSize / descriptionPrevious value: -"The size of the file in bytes."New value: +"Bytes." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileType / descriptionPrevious value: -"The MIME type of the file."New value: +"MIME type." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / fileUrl / descriptionRemoved value: -"The URL to access the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / image / descriptionPrevious value: -"The image URL for image resource types."New value: +"For image resource types." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageHeight / descriptionPrevious value: -"The height of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / imageWidth / descriptionPrevious value: -"The width of the image in pixels."New value: +"Pixels." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / resourceType / descriptionPrevious value: -"The type of resource (file, url, image, etc)."New value: +"file, url, image, etc." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / title / descriptionPrevious value: -"The title for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / fileAttachment / properties / uploadState / descriptionRemoved value: -"The upload state of the file." - changed
Output schema / properties / comments / items / properties / fileAttachment / properties / url / descriptionPrevious value: -"The URL for link/url resource types."New value: +"For link/url resource types." - removed
Output schema / properties / comments / items / properties / id / descriptionRemoved value: -"The unique ID of the comment." - changed
Output schema / properties / comments / items / properties / postedAt / descriptionPrevious value: -"When the comment was posted (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / comments / items / properties / postedUid / descriptionRemoved value: -"The UID of the user who posted this comment." - removed
Output schema / properties / comments / items / properties / projectId / descriptionRemoved value: -"The ID of the project this comment belongs to." - removed
Output schema / properties / comments / items / properties / taskId / descriptionRemoved value: -"The ID of the task this comment belongs to."
- Changed
update-filters1 field changed- removed
Output schema / properties / filters / items / properties / color / descriptionRemoved value: -"The color key of the entity."
- Changed
update-labels5 fields changed- removed
Output schema / properties / updatedLabels / items / properties / color / descriptionRemoved value: -"The color key of the entity." - removed
Output schema / properties / updatedLabels / items / properties / id / descriptionRemoved value: -"The unique ID of the label." - removed
Output schema / properties / updatedLabels / items / properties / isFavorite / descriptionRemoved value: -"Whether the label is marked as favorite." - removed
Output schema / properties / updatedLabels / items / properties / name / descriptionRemoved value: -"The name of the label." - changed
Output schema / properties / updatedLabels / items / properties / order / descriptionPrevious value: -"The display order of the label."New value: +"Display order."
- Changed
update-projects16 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed." - changed
Output schema / properties / projects / items / properties / childOrder / descriptionPrevious value: -"The ordering index of the project among its siblings."New value: +"Ordering index among siblings." - removed
Output schema / properties / projects / items / properties / color / descriptionRemoved value: -"The color key of the entity." - changed
Output schema / properties / projects / items / properties / description / descriptionPrevious value: -"The description of the project (empty string if none)."New value: +"Empty string when none." - changed
Output schema / properties / projects / items / properties / folderId / descriptionPrevious value: -"The ID of the folder this project belongs to (workspace projects only)."New value: +"Workspace projects only." - removed
Output schema / properties / projects / items / properties / id / descriptionRemoved value: -"The unique ID of the project." - removed
Output schema / properties / projects / items / properties / inboxProject / descriptionRemoved value: -"Whether this is the inbox project." - removed
Output schema / properties / projects / items / properties / isArchived / descriptionRemoved value: -"Whether the project is archived." - removed
Output schema / properties / projects / items / properties / isFavorite / descriptionRemoved value: -"Whether the project is marked as favorite." - removed
Output schema / properties / projects / items / properties / isShared / descriptionRemoved value: -"Whether the project is shared." - removed
Output schema / properties / projects / items / properties / name / descriptionRemoved value: -"The name of the project." - removed
Output schema / properties / projects / items / properties / parentId / descriptionRemoved value: -"The ID of the parent project (for sub-projects)." - changed
Output schema / properties / projects / items / properties / viewStyle / descriptionPrevious value: -"The view style of the project (list, board, calendar)."New value: +"list, board or calendar." - changed
Output schema / properties / projects / items / properties / workspaceId / descriptionPrevious value: -"The ID of the workspace this project belongs to (undefined for personal projects)."New value: +"Undefined for personal projects."
- Changed
update-reminders15 fields changed- changed
Output schema / properties / reminders / items / properties / due / descriptionPrevious value: -"Due date info (absolute and sometimes relative reminders)."New value: +"Absolute, and sometimes relative, reminders." - changed
Output schema / properties / reminders / items / properties / due / properties / date / descriptionPrevious value: -"Due date in ISO format."New value: +"ISO 8601." - changed
Output schema / properties / reminders / items / properties / due / properties / datetime / descriptionPrevious value: -"Due datetime in ISO format."New value: +"ISO 8601." - removed
Output schema / properties / reminders / items / properties / due / properties / isRecurring / descriptionRemoved value: -"Whether this is a recurring reminder." - removed
Output schema / properties / reminders / items / properties / due / properties / timezone / descriptionRemoved value: -"Timezone of the reminder." - removed
Output schema / properties / reminders / items / properties / id / descriptionRemoved value: -"The unique ID of the reminder." - changed
Output schema / properties / reminders / items / properties / isUrgent / descriptionPrevious value: -"Whether this is an urgent reminder (relative and absolute reminders only)."New value: +"Relative and absolute reminders only." - changed
Output schema / properties / reminders / items / properties / locLat / descriptionPrevious value: -"Latitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locLong / descriptionPrevious value: -"Longitude (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / locTrigger / descriptionPrevious value: -"Trigger type: on_enter or on_leave (location reminders only)."New value: +"Location reminders only." - changed
Output schema / properties / reminders / items / properties / minuteOffset / descriptionPrevious value: -"Minutes before due time to trigger (relative reminders only)."New value: +"Minutes before due. Relative reminders only." - changed
Output schema / properties / reminders / items / properties / name / descriptionPrevious value: -"Location name (location reminders only)."New value: +"Location name. Location reminders only." - changed
Output schema / properties / reminders / items / properties / radius / descriptionPrevious value: -"Geofence radius in meters (location reminders only)."New value: +"Geofence radius in metres. Location reminders only." - removed
Output schema / properties / reminders / items / properties / taskId / descriptionRemoved value: -"The task ID this reminder belongs to." - removed
Output schema / properties / reminders / items / properties / type / descriptionRemoved value: -"The type of reminder: relative, absolute, or location."
- Changed
update-sections4 fields changed- changed
Output schema / properties / sections / items / properties / description / descriptionPrevious value: -"The description of the section. Supports Markdown."New value: +"Supports Markdown." - removed
Output schema / properties / sections / items / properties / id / descriptionRemoved value: -"The unique ID of the section." - removed
Output schema / properties / sections / items / properties / name / descriptionRemoved value: -"The name of the section." - changed
Output schema / properties / sections / items / properties / sectionOrder / descriptionPrevious value: -"The ordering index of the section within its project."New value: +"Ordering index within the project."
- Changed
update-tasks21 fields changed- removed
Output schema / properties / failures / items / properties / code / descriptionRemoved value: -"The error code, if available." - removed
Output schema / properties / failures / items / properties / error / descriptionRemoved value: -"The error message." - changed
Output schema / properties / failures / items / properties / item / descriptionPrevious value: -"The item that failed (usually an ID or identifier)."New value: +"Usually the ID of the item that failed." - changed
Output schema / properties / tasks / items / properties / addedAt / descriptionPrevious value: -"When the task was created (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / assignedByUid / descriptionRemoved value: -"The UID of the user who assigned this task." - changed
Output schema / properties / tasks / items / properties / checked / descriptionPrevious value: -"Whether the task is checked/completed."New value: +"Whether the task is completed." - changed
Output schema / properties / tasks / items / properties / completedAt / descriptionPrevious value: -"When the task was completed (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / content / descriptionPrevious value: -"The task title/content."New value: +"Task title." - changed
Output schema / properties / tasks / items / properties / deadlineDate / descriptionPrevious value: -"The deadline date of the task (ISO 8601 format)."New value: +"ISO 8601." - removed
Output schema / properties / tasks / items / properties / description / descriptionRemoved value: -"The task description." - changed
Output schema / properties / tasks / items / properties / dueDate / descriptionPrevious value: -"The due date of the task (ISO 8601 format)."New value: +"ISO 8601." - changed
Output schema / properties / tasks / items / properties / duration / descriptionPrevious value: -"The duration of the task (e.g., \"2h30m\")."New value: +"e.g. \"2h30m\"." - removed
Output schema / properties / tasks / items / properties / id / descriptionRemoved value: -"The unique ID of the task." - changed
Output schema / properties / tasks / items / properties / isUncompletable / descriptionPrevious value: -"Whether the task is uncompletable (organizational header)."New value: +"An organizational header, not a real task." - removed
Output schema / properties / tasks / items / properties / labels / descriptionRemoved value: -"The labels attached to this task." - removed
Output schema / properties / tasks / items / properties / parentId / descriptionRemoved value: -"The ID of the parent task (for subtasks)." - changed
Output schema / properties / tasks / items / properties / priority / descriptionPrevious value: -"The priority level: p1 (highest), p2 (high), p3 (medium), p4 (lowest)."New value: +"p1 is highest, p4 lowest." - removed
Output schema / properties / tasks / items / properties / projectId / descriptionRemoved value: -"The ID of the project this task belongs to." - changed
Output schema / properties / tasks / items / properties / recurring / descriptionPrevious value: -"Whether the task is recurring, or the recurrence string."New value: +"False when not recurring, otherwise the recurrence string." - removed
Output schema / properties / tasks / items / properties / responsibleUid / descriptionRemoved value: -"The UID of the user responsible for this task." - removed
Output schema / properties / tasks / items / properties / sectionId / descriptionRemoved value: -"The ID of the section this task belongs to."
3 tool updates
v12.5.0- Added
export-project-template - Changed
find-tasks-by-date1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"The maximum number of tasks to return."New value: +"The maximum number of tasks to return. Default is 10."
- Added
import-project-template
2 tool updates
v12.4.0- Changed
add-tasks1 field changed- changed
Input schema / properties / tasks / items / properties / dueString / descriptionPrevious value: -"The due date for the task, in natural language."New value: +"The due date for the task, in natural language. Also use natural language for recurrences; do not prefix it with \"recurring\"."
- Changed
find-activity2 fields changed- added
Input schema / properties / dateFromAdded value: +{ + "description": "Inclusive start of the activity range, as an ISO 8601 date or date-time. For all events on one local calendar day, use that day's start, for example \"2026-08-02T00:00:00-04:00\". Natural-language dates such as \"tomorrow\" are not supported.", + "type": "string" +} - added
Input schema / properties / dateToAdded value: +{ + "description": "Exclusive end of the activity range, as an ISO 8601 date or date-time. For all events on 2026-08-02, use \"2026-08-03T00:00:00-04:00\". Natural-language dates such as \"tomorrow\" are not supported.", + "type": "string" +}
1 tool update
v12.3.1- Changed
update-tasks5 fields changed- changed
Input schema / properties / tasks / items / properties / parentId / descriptionPrevious value: -"The new parent task ID (for subtasks)."New value: +"Make the task a subtask of this task ID. Omit unless the parent should change." - changed
Input schema / properties / tasks / items / properties / projectId / descriptionPrevious value: -"The new project ID for the task. Project ID should be an ID string, or the text \"inbox\", for inbox tasks."New value: +"Move the task to this project ID, or the text \"inbox\" for the inbox. Omit unless the project should change: moving a task to a project also lifts it out of its section and out from under its parent." - changed
Input schema / properties / tasks / items / properties / sectionId / descriptionPrevious value: -"The new section ID for the task."New value: +"Move the task to this section ID. Omit unless the section should change: moving a task to a section also lifts it out from under its parent." - added
Output schema / properties / appliedOperations / properties / redundantMovesSkippedAdded value: +{ + "description": "Moves not performed because the task was already in the requested destination. A non-zero count means container fields were sent that did not need to be.", + "type": "number" +} - changed
Output schema / properties / appliedOperations / requiredPrevious value: -[ - "updateCount", - "skippedCount", - "failureCount" -]New value: +[ + "updateCount", + "skippedCount", + "failureCount", + "redundantMovesSkipped" +]
TDQS
Scored across 47 tools
Most tools map to a clear entity+action, and descriptions carefully differentiate tricky pairs (reschedule-tasks vs update-tasks, find-completed-tasks vs find-activity, get-project-health vs analyze-project-health). However, there are real overlaps: fetch-object vs fetch both retrieve a task/project by ID, and find-tasks vs find-tasks-by-date vs search vs get-overview all surface tasks with only subtle distinctions an agent could easily misselect.
The bulk follows a kebab-case verb-noun pattern (add-tasks, find-projects, update-comments), which is good, but several tools break it with noun-only or differently-verbed names: user-info, project-management, project-move, fetch, search, get-overview. Verb synonyms are also mixed (add/create, find/list/fetch/get), and singular/plural noun forms vary across otherwise parallel tools.
47 tools is well above a comfortable set size, and several are mergeable (fetch/fetch-object, search/find-tasks, get-project-activity-stats inside get-project-health). The Todoist domain is genuinely broad (tasks, projects, sections, labels, filters, comments, reminders, workspaces, templates, analytics), which softens the blow, but the surface still feels bloated rather than tightly scoped.
Coverage is strong: create/read/update for tasks, projects, sections, labels, filters, comments, and reminders, plus completion, assignment, reordering, templates, activity, and analytics, with deletion centralized in delete-object. Minor gaps remain (no granular per-entity deletes, no comment search, attachment viewing without upload), but core workflows have no dead ends.
Maintenance
Related MCP Connectors
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, labels, sections, and comments through natural conversation. Supports comprehensive task operations including creation, updates, completion, and organization with natural language quick-add functionality.-
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to Todoist for comprehensive task management, enabling natural language creation, updating, and organization of tasks, projects, sections, and labels.13 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, sections, and labels through natural language, supporting task creation, updates, completion, and intelligent organization of your workflow.13 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, comments, and labels through natural language commands. Provides complete CRUD operations securely via the Todoist REST API v2.Apache 2.0