Skip to main content
Glama

滴答清单 MCP 服务器

Python 3.10+ License: MIT PRs Welcome

English Version is Here!

这是一个基于滴答清单官方API的本地MCP服务,能让用户通过LLM和Agent应用轻松管理待办事项

🔗 API 文档: 滴答清单官方 OpenAPI


📢 Update

  • 2026-07-04 新增任务移动、已完成任务查询、项目更新、习惯管理模块 — 共 9 个新工具(move_tasks、get_completed_tasks、update_projects,以及习惯模块的 get_all_habits、get_habit、create_habits、update_habits、checkin_habits、get_habit_checkins)。

  • 2026-07-02 重构认证系统 — 移除环境变量配置,改为运行时 login 工具直接传入 OAuth 凭据,支持中国版/国际版一键切换。

  • 2026-05-12 提取工具描述 — 将所有工具的 Prompt 提取为独立 .txt 文件,便于维护和修改。

  • 2026-05-09 新增提醒参数 — 创建和更新任务时支持 reminders,可设置到期前推送提醒。

  • 2026-01-29 项目结构重构 — 迁移到 src 目录布局,代码组织更规范。

  • 2026-01-17 日志系统升级 — 改为基于会话的纯文件日志,交互追踪更清晰。

  • 2026-01-12 全面重构 — 实现无缝本地 OAuth 回调认证、统一日志追踪、移除 python-dotenv 依赖。

  • 2025-12-07 修复时区处理问题。

  • 2025-10-17 优化优先级参数自然语言映射及认证流程。

Related MCP server: TickTick MCP Server

✨ 功能特性

  • 🤖 让 AI Agent 管理你的任务:通过自然语言指令创建、查询、更新和完成任务

  • 🔑 运行时 OAuth 认证:通过 login 工具直接传入凭据,浏览器自动打开授权页面,无需配置环境变量

  • 📅 任务管理:支持创建任务、项目、子任务,以及复杂的查询功能

  • 🔍 高级查询:按日期范围、优先级、关键词等多维度筛选任务

🚀 安装与使用

前置条件

  • Python 版本:3.10 或更高

  • LLM 客户端(如 Claude Desktop、OpenCode 等)

安装步骤

# 克隆项目
git clone https://github.com/Code-MonkeyZhang/ticktick-mcp-enhanced.git
cd ticktick-mcp-enhanced

# 创建虚拟环境并安装
uv venv
source .venv/bin/activate  # macOS/Linux
# .venv\Scripts\activate   # Windows

uv pip install -e .

配置 LLM 客户端

在 Claude Desktop 或其他 LLM 应用的配置文件中添加:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ticktick": {
      "command": ["/path/to/ticktick-mcp-enhanced/.venv/bin/ticktick-mcp"],
      "enabled": true
    }
  }
}

注意:将 /path/to/ticktick-mcp-enhanced 替换为项目的实际绝对路径。Windows 用户请使用双反斜杠 \\ 或正斜杠 /

🔑 获取 API 凭证

滴答清单开发者中心(国内账号)或 TickTick Developer Center(国外账号)注册一个应用。

  1. 点击 "New App"

  2. 设置 Redirect URIhttp://localhost:8000/callback

  3. 保存你的 Client IDClient Secret

使用方法

  1. 重启 LLM 客户端

  2. 登录滴答清单

    • 在对话中输入:"帮我登录滴答清单",并提供你的 Client ID 和 Client Secret

    • AI 会调用 login 工具,浏览器自动打开滴答清单授权页

    • 在浏览器中点击允许,完成授权

    • 登录状态保存在本地,后续使用无需重复登录

  3. 开始使用

    • 查看任务:"查看我今天的任务"

    • 创建任务:"创建一个任务:明天下午3点开会"

    • 查询项目:"查看所有清单"

🧰 可用工具

此 MCP 向你的 LLM 客户端公开以下工具。

类别

工具名称

功能描述

认证

ticktick_status

检查当前的连接和授权状态。

login

传入 OAuth 凭据,启动浏览器授权流程并完成登录。

清单

get_all_projects

获取所有清单列表。

get_project_info

查看特定清单及其中的任务。

create_project

创建一个新的项目。

update_projects

原地修改项目名称、颜色、视图或类型(支持批量)。

delete_projects

删除项目。

任务

create_tasks

创建任务(支持智能时间识别)。

update_tasks

修改任务标题、内容、日期或优先级。

complete_tasks

将任务标记为完成。

delete_tasks

批量删除任务。

create_subtasks

为任务添加子任务。

move_tasks

在不同项目之间移动任务(支持批量)。

查询

query_tasks

高级清单查询(支持日期范围、优先级、搜索词)。

get_completed_tasks

按项目和时间范围查询已完成的任务。

习惯

get_all_habits

获取所有习惯列表。

get_habit

按 ID 查看单个习惯。

create_habits

创建习惯(支持批量)。

update_habits

原地修改习惯属性(支持批量)。

checkin_habits

给习惯打卡,默认今天(支持批量与补打)。

get_habit_checkins

按日期范围查询习惯的打卡记录。

📂 项目结构

ticktick-mcp-enhanced/
├── src/
│   └── ticktick_mcp/
│       ├── __init__.py          # 包入口
│       ├── server.py            # MCP 服务入口
│       ├── auth.py              # OAuth 逻辑与回调服务器
│       ├── client_manager.py    # 客户端管理
│       ├── log.py               # 日志配置
│       ├── ticktick_client.py   # TickTick API 客户端
│       ├── tools/               # 各类工具实现
│       │   ├── project_tools.py # 清单工具
│       │   ├── task_tools.py    # 任务工具
│       │   ├── query_tools.py   # 查询工具
│       │   ├── habit_tools.py   # 习惯工具
│       │   └── prompts/         # 工具描述 (.txt)
│       └── utils/               # 格式化与校验工具
├── pyproject.toml              # 项目配置与依赖
└── README.md                  # 本文档

📄 许可证

MIT License - 详见 LICENSE 文件

🙏 致谢

Available Tools

21 tools
checkin_habitsA

Create or update a habit check-in (mark a habit as done for a given day).

Supports both single check-in and batch. For a single check-in, pass a dictionary directly. For multiple, pass a list of dictionaries.

Important notes on the fields:

  • date defaults to today when omitted. Internally converted to the API's YYYYMMDD stamp.

  • value defaults to 1.0. For boolean habits (e.g. "did I run today") keep 1.0; for numeric habits (e.g. "read 30 minutes") set the actual number achieved.

  • goal defaults to 1.0. Compare value vs goal to know whether the habit was met.

  • To backfill a missed day, pass the past date explicitly.

Args: checkins: Check-in dictionary or list of dictionaries. Each item must contain: - habit_id (required): ID of the habit to check in - date (optional): Day to check in, YYYY-MM-DD format. Defaults to today. - value (optional): Check-in value, default 1.0 - goal (optional): Check-in goal, default 1.0 - status (optional): Check-in status

Examples: # Check in today for a boolean habit {"habit_id": "habit-1"}

# Numeric habit: read 45 minutes against a 30 minute goal
{"habit_id": "habit-1", "value": 45, "goal": 30}

# Backfill yesterday
{"habit_id": "habit-1", "date": "2026-07-03"}

# Batch
[
    {"habit_id": "habit-1"},
    {"habit_id": "habit-2", "value": 45, "goal": 30}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
checkinsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations to lean on, the description carries the full burden and discloses defaults ('date defaults to today'), internal conversion ('converted to the API's YYYYMMDD stamp'), and value/goal semantics. It doesn't discuss auth or side effects, but for a create/update tool the behavioral details provided are substantial.

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

Conciseness4/5

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

The description is well-structured with a clear summary, field notes, and labeled examples. It is somewhat long, but every sentence adds necessary detail given the flexible schema. The front-loaded purpose sentence makes it easy to grasp immediately.

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

Completeness5/5

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

The tool's complexity lies in its open-structured checkins parameter, and the description fully covers that complexity: field semantics, defaults, formats, batch usage, and examples. An output schema exists, so return values need not be explained. The description is complete for an agent to invoke this tool correctly.

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

Parameters5/5

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

The schema has 0% description coverage and an open 'additionalProperties' structure, so the description must compensate. It does so thoroughly by defining each field (habit_id required, date optional with format, value default 1.0, goal default 1.0, status optional) and providing concrete examples for boolean, numeric, backfill, and batch cases.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Create or update a habit check-in (mark a habit as done for a given day).' This clearly distinguishes it from sibling tools like get_habit_checkins (reading) and create_habits/update_habits (managing habits themselves).

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

Usage Guidelines4/5

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

The description provides rich usage context: it explains single vs batch usage, defaults, boolean vs numeric habit examples, and backfilling with a past date. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for an agent to apply it correctly.

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

complete_tasksA

Mark one or more tasks as complete.

Supports both single task and batch completion. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries.

Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - project_id (required): ID of the project - task_id (required): ID of the task

Examples: # Single task {"project_id": "xyz789", "task_id": "abc123"}

# Multiple tasks
[
    {"project_id": "xyz789", "task_id": "abc123"},
    {"project_id": "xyz789", "task_id": "def456"},
    {"project_id": "abc123", "task_id": "ghi789"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description only covers the input format. It does not disclose side effects, permission requirements, reversibility, or response behavior. The mutation is implied by 'complete' but no additional behavioral context is given.

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

Conciseness5/5

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

The description is well-structured: a one-line summary, a usage note, and a formatted Args section with examples. Every sentence adds value, and the examples make the structure instantly understandable. No fluff.

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

Completeness4/5

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

The description thoroughly documents the one parameter and its required subfields, and an output schema exists (though not shown) so return values don't need to be explained. It lacks details on preconditions or error cases, but for a simple completion tool this is acceptable.

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

Parameters5/5

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

The input schema is generic (an object or array of string maps), providing zero coverage of the required fields. The description compensates fully by specifying that each task must contain project_id and task_id, and by showing concrete examples for both single and batch cases.

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

Purpose4/5

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

The description clearly states 'Mark one or more tasks as complete' with a specific verb and resource. It also highlights batch support, but does not explicitly distinguish from sibling tools like update_tasks or ticktick_status, so it stops 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.

Usage Guidelines3/5

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

The description explains how to pass single vs. multiple tasks (dictionary vs. list) and provides examples, giving clear usage context. However, it does not mention when to prefer this tool over alternatives or any exclusions, making the guidance 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.

create_habitsA

Create one or more habits in TickTick.

Supports both single habit and batch creation. For a single habit, pass a dictionary directly. For multiple habits, pass a list of dictionaries.

Args: habits: Habit dictionary or list of habit dictionaries. Each habit must contain: - name (required): Habit name (max 1000 characters) - color (optional): Hex color code, e.g. "#4D8CF5" - type (optional): Habit type, e.g. "Boolean" - goal (optional): Numeric goal, default 1.0 - step (optional): Numeric step value - unit (optional): Unit of the goal, e.g. "Count" - repeat_rule (optional): Recurrence rule, e.g. "RRULE:FREQ=DAILY;INTERVAL=1" - reminders (optional): List of reminder trigger strings - encouragement (optional): Encouragement message - status (optional): Habit status

Examples: # Single boolean habit, repeated daily { "name": "Read", "color": "#4D8CF5", "type": "Boolean", "goal": 1.0, "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=1" }

# Multiple habits
[
    {"name": "Read", "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=1"},
    {"name": "Exercise", "repeat_rule": "RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
habitsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure. It only states that habits are created, without mentioning side effects, validation behavior, error handling, or required authentication. 'Create' implies mutation but lacks depth about what happens on failures or partial batch successes.

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

Conciseness5/5

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

Although longer than a terse description, every sentence earns its place by documenting fields and providing examples. The structure with 'Args' list and separate examples is well-organized and front-loaded with a clear summary. No fluff.

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

Completeness5/5

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

Given the minimal schema and no annotations, the description thoroughly covers all parameter semantics and examples for both single and batch creation. It is complete enough for an agent to understand how to invoke the tool correctly. The presence of an output schema means return values need not be described.

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

Parameters5/5

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

The input schema provides only a generic 'habits' field with no structure, while the description compensates fully by listing required and optional fields, types, formats (e.g., hex color, RRULE), and defaults. The examples further clarify correct usage, making the parameter meaning explicit.

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

Purpose5/5

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

The description clearly states 'Create one or more habits in TickTick,' identifying the specific verb (create) and resource (habits). It distinguishes itself from sibling tools like create_tasks and create_project by the resource and the explicit batch creation capability.

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

Usage Guidelines4/5

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

The description gives clear context on how to use the tool: supports both single dict and list for batch creation, with examples. It does not explicitly mention when not to use it or contrast with alternatives, but the usage pattern is unambiguous.

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

create_projectA

Create a new project in TickTick.

Args: name: Project name color: Color code (hex format) (optional) view_mode: View mode - one of list, kanban, or timeline (optional)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
colorNo#F18181
view_modeNolist

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are present, so the description must carry behavioral disclosure. It only states 'Create a new project,' implying a mutation but omitting any side effects, authentication requirements, or failure conditions such as duplicate project names. This is minimal transparency.

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

Conciseness5/5

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

The description is compact and to the point: one purpose sentence followed by a short Args list. No redundant or filler text is present.

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

Completeness4/5

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

For a simple create operation with three parameters and an output schema, the description covers the essential purpose and all parameter nuances. It falls slightly short in explaining when to choose this over related project tools, but is otherwise adequate for invocation.

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

Parameters4/5

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

The Args descriptions add clear value beyond the schema: color is specified as a hex format, and view_mode enumerates its allowed values (list, kanban, or timeline). This fully compensates for the schema's 0% property description coverage, though the name parameter is only trivially described.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Create a new project in TickTick'), clearly identifying what the tool does. It differentiates from sibling tools like create_tasks and update_projects by specifying 'new project'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus updating or deleting projects. There are no alternative tool references or exclusion conditions, so the agent must infer usage from the name and description alone.

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

create_subtasksA

Create one or more subtasks for parent tasks. For single subtask, you can pass a dictionary directly. For multiple subtasks, pass a list of dictionaries.

Args: subtasks: Subtask dictionary or list of subtask dictionaries. Each subtask must contain: - subtask_title (required): Title of the subtask - parent_task_id (required): ID of the parent task - project_id (required): ID of the project (must be same for both parent and subtask) - content (optional): Content/description for the subtask - priority (optional): Priority level - "none", "low", "medium", or "high" (case-insensitive)

Examples: # Single subtask {"subtask_title": "Subtask 1", "parent_task_id": "abc123", "project_id": "xyz789"}

# Multiple subtasks
[
    {"subtask_title": "Subtask 1", "parent_task_id": "abc123", "project_id": "xyz789", "priority": "medium"},
    {"subtask_title": "Subtask 2", "parent_task_id": "abc123", "project_id": "xyz789", "content": "Details"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
subtasksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does explain input structure and validation constraints (e.g., project_id must match), but it doesn't mention side effects, return values, error handling, or permissions. Basic mutation is implied but not stated. This is adequate but not rich behavioral context.

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

Conciseness5/5

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

The description is well-organized with an intro, ARGS section, and examples. Every sentence adds value; no filler. The format is scannable and the examples clarify the structured data needed. Length is justified by the need to document a flexible schema.

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

Completeness5/5

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

Given the sparse schema and the tool's role in creating subtasks, the description is highly complete. It covers all necessary input details, constraints, and multiple usage scenarios. An output schema exists, so return-value documentation is unnecessary. The info provided is sufficient for correct selection and invocation.

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

Parameters5/5

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

Schema coverage is 0% and the schema is minimal (just a generic 'subtasks' object/array). The description fully compensates by listing every subfield with required/optional status, priority enum values, and case-insensitivity. It also provides concrete examples for single and multiple subtasks, making invocation straightforward.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Create one or more subtasks for parent tasks.' This clearly distinguishes it from sibling tools like create_tasks by specifying the parent relationship. No ambiguity.

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

Usage Guidelines4/5

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

While it doesn't explicitly state alternatives or exclusions, the description clearly implies when to use this tool (when creating subtasks under an existing parent task). The detailed parameter requirements (parent_task_id, project_id) provide context for usage, but it lacks direct statements about when not to use it.

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

create_tasksA

Create one or more tasks in TickTick.

Supports both single task and batch creation. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries.

Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - title (required): Task Name - project_id (required): ID of the project for the task - content (optional): Task description - desc (optional): Description of checklist - start_date (optional): ISO datetime WITH timezone offset (e.g., 2025-12-16T08:00:00+0000) - due_date (optional): ISO datetime WITH timezone offset - time_zone (required): IANA timezone name (e.g. "Asia/Shanghai") - priority (optional): Priority level - "none", "low", "medium", or "high" - repeat_flag (optional): Recurring rules (e.g., "RRULE:FREQ=DAILY;INTERVAL=1") - items (optional): List of subtask dictionaries - reminders (optional): List of iCal TRIGGER strings. Without this, NO alarm fires even if due_date is set. Examples: ["TRIGGER:PT0S"] → at due time ["TRIGGER:-PT15M"] → 15 minutes before ["TRIGGER:-PT1H"] → 1 hour before ["TRIGGER:-P1D"] → 1 day before ["TRIGGER:-PT15M","TRIGGER:PT0S"] → 15 min before AND at due

Examples: # Single task with Beijing timezone, ring at due time { "title": "Buy milk", "project_id": "1234ABC", "content": "2% organic", "due_date": "2025-12-16T16:00:00+08:00", "time_zone": "Asia/Shanghai", "priority": "medium", "reminders": ["TRIGGER:PT0S"] }

# Multiple tasks (one timed, one all-day by omitting due_date)
[
    {
        "title": "Example A",
        "project_id": "1234ABC",
        "desc": "Timed task",
        "due_date": "2025-07-19T10:00:00+0000",
        "time_zone": "Asia/Shanghai",
        "priority": "high"
    },
    {
        "title": "Example B",
        "project_id": "1234XYZ",
        "content": "All-day task (no due_date means all-day)"
    }
]
ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses critical behaviors: the need for time_zone, the meaning of omitting due_date (all-day), the exact format for reminders (TRIGGER strings with examples), and the fact that no alarm fires without reminders. These go beyond what the schema shows.

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

Conciseness5/5

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

Though detailed, the description is well-organized with an opening summary, an Args list with bullet points, and two practical examples. Every clause adds value, and the most critical info (title, project_id, time_zone, reminders) is front-loaded in the Args list.

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

Completeness5/5

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

For a complex tool with a single loosely-typed parameter, the description is remarkably complete: it covers all inner fields, formats, edge cases (all-day vs timed tasks), and provides examples. An output schema is present, so return values need not be described. Minor omissions like the structure of 'items' are acceptable since subtask creation is handled by a sibling tool.

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

Parameters5/5

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

Schema coverage is 0%, and the schema only defines 'tasks' as an object or array. The description compensates fully by listing every inner field (title, project_id, content, desc, start_date, due_date, time_zone, priority, repeat_flag, items, reminders) with types, formats, defaults, and examples. This is exceptional compensation.

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

Purpose5/5

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

The description starts with 'Create one or more tasks in TickTick', which is a specific verb + resource + scope. It clearly distinguishes from sibling tools like update_tasks or delete_tasks by stating creation and batch support.

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

Usage Guidelines4/5

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

It explicitly explains when to use single vs batch creation ('For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries.') and provides important usage warnings (e.g., 'Without this, NO alarm fires'). However, it does not explicitly mention alternative tools like update_tasks for modifications, but for a creation tool the usage context is clear.

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

delete_projectsA

Delete one or more projects.

Supports both single project and batch deletion. For single project, you can pass a project ID string directly. For multiple projects, pass a list of project IDs.

Args: projects: Project ID string or list of project ID strings

Examples: # Single project "abc123"

# Multiple projects
["abc123", "def456", "ghi789"]
ParametersJSON Schema
NameRequiredDescriptionDefault
projectsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states 'Delete' which implies destructiveness, but it does not disclose whether deletion is permanent, reversible, or requires special permissions. It also does not mention any side effects or partial failure behavior in batch deletion. The description adds no behavioral context beyond the tool's name.

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

Conciseness4/5

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

The description is well-structured with a brief overview, a bullet explaining the parameter format, and examples. The 'Args' section slightly duplicates schema information but the examples add value. It is concise without unnecessary filler, though it could be tightened by removing the explicit 'Args' repetition.

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

Completeness3/5

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

The tool is relatively simple with one parameter, and an output schema exists (though not shown), so return values need not be described. However, given the lack of annotations and the destructive nature, the description would benefit from stating permanence or irreversible effects, and clarifying behavior for partial batch failures. It covers input well but misses important operational context.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It fully explains the 'projects' parameter, stating it can be a string or a list of strings, and provides clear examples for both single and multiple project IDs. This goes beyond the schema's basic type definition and gives practical usage guidance.

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

Purpose5/5

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

The description begins with 'Delete one or more projects', which is a specific verb (delete) and resource (projects). It clearly distinguishes from sibling tools like delete_tasks by naming the resource. The additional detail about supporting both single and batch deletion further clarifies the scope.

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

Usage Guidelines3/5

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

The description provides clear guidance on how to pass arguments (single ID vs list) but does not explicitly state when to use this tool versus alternatives. It does not mention exclusions or alternative tools like delete_tasks. The context for using this tool is implied by its name rather than explicitly explained.

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

delete_tasksA

Delete one or more tasks.

Supports both single task and batch deletion. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries.

Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - project_id (required): ID of the project - task_id (required): ID of the task

Examples: # Single task {"project_id": "xyz789", "task_id": "abc123"}

# Multiple tasks
[
    {"project_id": "xyz789", "task_id": "abc123"},
    {"project_id": "xyz789", "task_id": "def456"},
    {"project_id": "abc123", "task_id": "ghi789"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains the input format but does not state whether deletion is permanent, how missing tasks are handled, or whether batch deletion is atomic. This is a significant gap for a destructive mutation tool.

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

Conciseness5/5

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

The description is well-structured: a one-line purpose, clear mode explanation, explicit args with required fields, and illustrative examples. Every sentence adds value, and there is no unnecessary verbosity.

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

Completeness4/5

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

The tool is simple, and the description thoroughly covers input requirements for both single and batch deletion. While it lacks details on return values or error behavior, the presence of an output schema likely covers that. Overall, it is sufficient for correct invocation.

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

Parameters5/5

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

The schema is very generic (anyOf object/array with additionalProperties), providing no field-level detail. The description compensates by explicitly requiring project_id and task_id, clarifying single vs list inputs, and providing concrete examples. This makes parameter usage unambiguous.

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

Purpose5/5

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

The description opens with 'Delete one or more tasks,' clearly identifying the verb and resource. It also distinguishes itself from sibling tools like update_tasks or complete_tasks by explicitly focusing on deletion and supporting batch operations.

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

Usage Guidelines3/5

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

The usage is implied: if you want to delete tasks, use this tool. However, there is no explicit guidance on when to prefer this over alternative tools (e.g., for completing tasks) or any exclusions. The description does not mention alternatives like delete_projects or complete_tasks.

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

get_all_habitsA

List all of the user's habits.

No parameters. Returns complete habit objects (including each habit's ID) so you can act on them directly, for example to create a check-in afterwards.

Example: get_all_habits()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of transparency. It states that it returns complete habit objects including IDs and explicitly notes that there are no parameters, which sets expectations. It does not explicitly state that it is read-only, but the verb 'List' strongly implies a non-mutating operation. The example call adds transparency about invocation.

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

Conciseness5/5

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

The description is very concise: three short sentences plus an example. The purpose is front-loaded in the first sentence, and every sentence adds value—return content, usage hint, and invocation example. No fluff or redundant information.

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

Completeness5/5

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

For a simple list-all tool with zero parameters and an output schema present, the description fully covers what the tool does, what it returns, and how to invoke it. It includes an example and suggests a practical follow-up action. There are no obvious gaps in context.

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

Parameters4/5

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

There are zero parameters, and the schema coverage is 100% (vacuously). The description explicitly says 'No parameters' and provides an example invocation, which is more than sufficient for a parameterless tool. Per the rubric, the baseline for 0 params is 4, and it is met.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'List all of the user's habits.' This distinguishes it from the sibling get_habit (which likely retrieves a single habit) by emphasizing 'all'. The purpose is unambiguous and specific.

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

Usage Guidelines4/5

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

It provides usage context by stating that the returned habit objects (with IDs) enable direct follow-up actions like creating a check-in. It implies when to use this tool (when you need the full list), though it does not explicitly name alternatives or exclusions. This is clear context without being exhaustive.

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

get_all_projectsA

Get all projects from TickTick.

Note: This does not include the special "Inbox" project. To get inbox information and tasks, use get_project_info(project_id="inbox").

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses the key non-obvious behavior that Inbox is not included and points to the proper way to retrieve inbox data. It doesn't mention return format or auth, but that is less critical for a simple read-only tool with an output schema.

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

Conciseness5/5

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

The description is concise and front-loaded. It states the primary function in one sentence, then adds a focused note about the Inbox exception and alternative tool. Every sentence earns its place.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, output schema present), the description is complete. It clearly scopes what is returned and directs the agent to the sibling tool for the special case, making it sufficient for correct selection and invocation.

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

Parameters4/5

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

The tool has zero parameters, so the schema fully covers parameter semantics. The description appropriately adds no redundant parameter information, and baseline for 0 params is 4.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'all projects from TickTick', and explicitly notes the Inbox exclusion, which distinguishes it from get_project_info and other project-related tools.

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

Usage Guidelines5/5

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

It explicitly tells the agent when to use this tool (for all projects) and provides a direct alternative for the excluded case: use get_project_info(project_id='inbox'). This is clear usage guidance.

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

get_completed_tasksA

List tasks that have been completed within a given set of projects and time range.

All parameters are optional, but at least one is recommended to narrow the results. Returns complete task objects (id, projectId, completedTime, ...) so you can act on them directly without a second lookup.

Args: project_ids: List of project IDs to search across (use "inbox" for the inbox). start_date: ISO datetime WITH timezone offset, inclusive lower bound on completedTime (e.g., "2026-03-01T00:00:00+0800"). end_date: ISO datetime WITH timezone offset, inclusive upper bound on completedTime.

Examples: # Tasks completed in one project during March 2026 {"project_ids": ["abc123"], "start_date": "2026-03-01T00:00:00+0800", "end_date": "2026-03-31T23:59:59+0800"}

# All completed tasks across every project (no filters)
{}
ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo
project_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description takes on the burden of behavioral disclosure. It reveals that the tool returns complete task objects so no second lookup is needed, that date bounds are inclusive, and that datetimes must include timezone offsets. It could go further on edge cases like no results, but it is solidly transparent.

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

Conciseness5/5

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

The description is well-organized with an intro, Args block, and Examples. Every sentence earns its place—optionality, return value, parameter meanings, and examples are all covered without redundancy.

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

Completeness5/5

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

Despite having an output schema, the description still adds valuable context about return value (complete objects) so the agent knows it can act directly. Parameter semantics are thorough, examples illustrate both filtered and unfiltered calls, and the tool's behavior is fully specified for its complexity.

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

Parameters5/5

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

Schema coverage is 0%, so the description must and does provide full semantics for all three parameters. It explains project_ids accepts "inbox", start_date/end_date are ISO with timezone offsets and inclusive lower/upper bounds, and gives concrete examples that clarify usage.

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

Purpose5/5

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

The description clearly states the verb "List" and the resource "completed tasks" within a project and time-range scope. This distinguishes it from sibling tools like query_tasks (which likely lists all tasks) and complete_tasks (which marks tasks complete).

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool (for completed tasks) and gives parameter guidance (at least one recommended to narrow results). However, it does not explicitly mention alternatives or exclude use cases, e.g., saying "use query_tasks for non-completed tasks."

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

get_habitA

Get a single habit by its ID.

Args: habit_id: ID of the habit

Example: get_habit("habit-1")

ParametersJSON Schema
NameRequiredDescriptionDefault
habit_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses the core action (get) and the parameter, but doesn't mention what happens if the habit isn't found (e.g., error vs null) or any other behavior. For such a simple getter, this is adequate but not rich.

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

Conciseness5/5

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

The description is compact and well-structured: a one-line purpose, the argument definition, and a usage example. Every sentence earns its place, and the example aids comprehension.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no nested objects), the description fully covers the necessary context: what it does, how to call it, and a sample. The presence of an output schema means return values don't need to be detailed here.

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

Parameters4/5

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

With 0% schema coverage, the description compensates by explicitly naming 'habit_id: ID of the habit' and providing an example with 'habit-1'. This adds meaning beyond the schema's property name, though it's minimal.

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

Purpose5/5

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

The description clearly states 'Get a single habit by its ID,' using a specific verb and resource. It distinguishes itself from siblings like get_all_habits (plural) and get_habit_checkins by focusing on a single habit by ID.

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

Usage Guidelines4/5

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

The description implies when to use (when you have a specific habit ID and need that habit) and provides a concrete example. It doesn't explicitly mention alternatives, but the context is clear and excludes other operations like listing or checkins.

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

get_habit_checkinsA

Get habit check-in records within a date range.

Returns complete check-in objects so you can analyze streaks, completion rates or find missed days without a second lookup.

Args: habit_ids: A single habit ID or a list of habit IDs from_date: Start date, YYYYMMDD integer (e.g. 20260401) to_date: End date, YYYYMMDD integer (e.g. 20260407)

Example: # One week of check-ins for two habits {"habit_ids": ["habit-1", "habit-2"], "from_date": 20260401, "to_date": 20260407}

ParametersJSON Schema
NameRequiredDescriptionDefault
to_dateYes
from_dateYes
habit_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool returns complete check-in objects for the given date range, and the example clarifies input expectations. It does not mention edge cases like date inclusivity or empty results, but for a read-only retrieval tool the disclosure is adequate.

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

Conciseness5/5

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

The description is well-structured: a clear one-sentence purpose, a brief benefit statement, labeled arguments, and a concrete example. Every line adds value with no redundant or filler content.

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

Completeness5/5

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

Given the tool's low complexity, the existing output schema, and no annotations, the description covers all necessary aspects: what it does, how to specify parameters, and a practical use case. No major gaps are apparent.

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

Parameters5/5

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

Despite the schema having 0% description coverage, the description fully explains all three parameters: habit_ids accepts a single ID or list, from_date is a YYYYMMDD integer, and to_date is a YYYYMMDD integer. The example further reinforces the format and usage.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('habit check-in records') with an explicit date-range scope. It clearly distinguishes itself from siblings like checkin_habits (which writes check-ins) and get_habit/get_all_habits (which fetch habit definitions).

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

Usage Guidelines4/5

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

The description provides clear use cases: analyzing streaks, completion rates, and finding missed days without a second lookup. It does not explicitly name alternatives or when-not-to-use conditions, but the context strongly implies when this tool is appropriate.

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

get_project_infoA

Get comprehensive information about a project, including its details and all tasks.

This tool provides a complete view of a project in one call, showing both the project metadata (name, color, view mode, etc.) and all tasks within it.

Args: project_id: ID of the project, or "inbox" to get inbox information

Returns: A formatted string containing: - Project basic information (name, ID, color, etc.) - List of all tasks in the project with their details

Examples: - get_project_info("abc123") → Get project info and tasks - get_project_info("inbox") → Get inbox info and tasks

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It discloses the return type (formatted string), the special 'inbox' value, and that all tasks are included. It does not explicitly state read-only, but 'Get' and 'view' imply no mutation. Additional error-handling details would improve transparency.

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

Conciseness5/5

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

The description is well-structured with a concise summary, a brief expansion, and clearly labeled Args/Returns/Examples. Each section earns its place without unnecessary redundancy.

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

Completeness4/5

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

Given the tool's simplicity (one parameter) and lack of annotations, the description covers the essential aspects: input, output format, and special behavior. It could be more complete by stating read-only status or error handling, but it is sufficient for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It does so by explaining the project_id parameter (ID or 'inbox') and providing concrete examples, adding meaning far beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool gets comprehensive information about a single project, including both project metadata and all tasks. This distinguishes it from siblings like get_all_projects (which lists projects) and query_tasks (which searches tasks), as it provides a combined single-project view.

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

Usage Guidelines4/5

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

The description implies use when a complete view of one project is needed ('complete view of a project in one call'), but it does not explicitly mention alternatives or when not to use it. It provides clear context and examples, but lacks explicit exclusions.

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

loginA

Log in to TickTick by providing OAuth credentials.

Ask the user for all four parameters. They can be found on the developer console app settings page:

Args: client_id (required): OAuth application Client ID, shown on the app page. client_secret (required): OAuth application Client Secret, shown on the app page. account_type (optional, default "china"): "china" for Dida365 or "global" for TickTick international. Use the default unless the user explicitly says they use the international version (ticktick.com). redirect_uri (optional, default "http://localhost:8000/callback"): the callback URL configured in the developer console. Use the default unless the user explicitly states a different value. Never invent a URL — if the user does not provide one, use the default.

After calling this tool, a browser window opens automatically for the user to authorize. The tool blocks until authorization completes or times out (up to 120 seconds).

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYes
account_typeNochina
redirect_uriNohttp://localhost:8000/callback
client_secretYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that a browser window opens, the tool blocks, and it can time out after 120 seconds. It also warns against inventing URLs. Minor omission: no explicit mention of what happens on success or failure beyond timeout, but the output schema exists.

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

Conciseness5/5

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

The description is well-structured with an opening summary, helpful URLs, a clear Args list, and a behavioral note. Every sentence contributes practical value; no filler or redundancy.

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

Completeness5/5

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

The tool is an interactive OAuth flow with four parameters and no annotations. The description covers purpose, credential sourcing, parameter defaults, user prompting, browser behavior, and timeout handling. Combined with the output schema, this is complete for an agent to invoke correctly.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description fully compensates: it explains each parameter's meaning, required status, default values, where to find them, and even provides conditional usage guidance (e.g., 'Use the default unless the user explicitly says...'). This is exemplary parameter documentation.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Log in to TickTick by providing OAuth credentials.' This clearly distinguishes login from the operational sibling tools (project/task/habit management) and states the exact purpose.

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

Usage Guidelines4/5

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

It explicitly instructs to 'Ask the user for all four parameters' and provides concrete decision rules for optional parameters (e.g., use default unless user explicitly states otherwise). It does not mention when not to use the tool, but login is a prerequisite for all other tools, making the usage context clear.

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

move_tasksA

Move one or more tasks from their current project to a different project.

Args: moves: Move dictionary, or list of dictionaries. Each item must contain: - from_project_id (required): ID of the source project - to_project_id (required): ID of the destination project - task_id (required): ID of the task to move

Examples: # Move a single task {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task789"}

# Move multiple tasks
[
    {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task1"},
    {"from_project_id": "abc123", "to_project_id": "def456", "task_id": "task2"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
movesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It does not mention side effects, reversibility, required permissions, or any limitations, which is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is well-organized and front-loaded with the purpose statement. It includes a concise parameter breakdown and necessary examples, with no redundant or wordy content—every sentence earns its place.

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

Completeness4/5

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

The description thoroughly covers the input structure for a complex single-parameter tool, and the existence of an output schema means return-value documentation is not needed. It does not address error conditions or prerequisites, but overall it is fairly 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.

Parameters5/5

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

The schema provides only a generic 'moves' object/array with additionalProperties true, so the description is essential. It explicitly defines the required fields (from_project_id, to_project_id, task_id) and includes clear examples for both single and multiple moves, adding substantial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states it moves one or more tasks from their current project to a different project. This uses a specific verb-and-resource structure and distinguishes it from siblings like update_tasks or delete_tasks.

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

Usage Guidelines3/5

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

The usage is implied by the tool's name and description, but there is no explicit guidance on when to choose this tool over alternatives like update_tasks or complete_tasks, nor any mention of exclusions or prerequisites.

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

query_tasksA

Unified task query tool with flexible multi-dimensional filtering.

All parameters are optional. When no filters are provided, returns all tasks. Multiple filters can be combined - tasks must match ALL specified criteria (AND logic).

Args: task_id: Get a specific task by ID. When combined with project_id, uses direct API call (most efficient). When used alone, searches all tasks for matching ID. Can be combined with other filters to verify task properties. project_id: Limit search to specific project (use "inbox" for inbox tasks). When combined with task_id, enables direct API lookup. date_filter: Filter by date - one of: - "today": Tasks due today - "tomorrow": Tasks due tomorrow - "overdue": Overdue tasks - "next_7_days": Tasks due within the next 7 days - "custom": Tasks due in a specific number of days (requires custom_days) custom_days: Number of days from today (only for date_filter="custom") e.g., 0 for today, 1 for tomorrow, 3 for 3 days from now priority: Filter by priority level: "none", "low", "medium","high"(case-insensitive): search_term: Search keyword in title, content, or subtask titles (case-insensitive)

Examples: query_tasks() → All tasks query_tasks(task_id="abc123", project_id="xyz789") → Get specific task query_tasks(task_id="abc123") → Find task by ID across all projects query_tasks(date_filter="today") → Tasks due today query_tasks(priority="high") → High priority tasks query_tasks(date_filter="today", priority="high") → High priority tasks due today query_tasks(search_term="meeting") → Tasks containing "meeting"

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNo
priorityNo
project_idNo
custom_daysNo
date_filterNo
search_termNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It fully discloses behavior: all parameters optional, when no filters returns all tasks, AND logic when combining filters, special behavior for task_id with and without project_id, and the meaning of date_filter values. It also notes case-insensitivity for priority and search_term. This is thorough and transparent.

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

Conciseness5/5

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

The description is well-structured with a clear opening, logical parameter breakdown, and a helpful examples section. Although lengthy, every part adds value—parameter details and examples are essential for a flexible tool with 6 parameters. It is organized and front-loaded with the core purpose.

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

Completeness5/5

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

Given the tool's complexity (6 optional parameters, no enums), the description is complete. It covers all parameters, behaviors, combinations, and provides examples. Since an output schema exists, the lack of return value explanation is acceptable. The description leaves no ambiguity about how to invoke the tool for common scenarios.

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

Parameters5/5

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

The input schema provides only basic parameter names and types with no descriptions (coverage 0%). The description compensates by explaining every parameter in detail, including valid values, constraints (e.g., custom_days requires date_filter='custom'), and semantics like 'inbox' for project_id. Examples further clarify usage. This far exceeds the schema's information.

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

Purpose5/5

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

The description clearly states it is a 'Unified task query tool' with 'flexible multi-dimensional filtering,' which is specific and distinguishes it from sibling tools like get_completed_tasks or get_all_habits. It explains exactly what it does: query tasks with various filters, and includes multiple examples.

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

Usage Guidelines4/5

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

The description provides extensive usage context, stating all parameters are optional, that filters combine with AND logic, and includes seven concrete examples showing various use cases. However, it does not explicitly mention when to use this tool versus alternatives like get_completed_tasks for completed tasks, so it lacks explicit exclusions but gives clear context.

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

ticktick_statusA

Check the current connection status with TickTick. Returns whether the server is configured, authenticated, and ready to use.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It transparently explains the tool returns status fields (configured, authenticated, ready) and is non-mutating in nature ('Check', 'Returns'). It does not mention side effects, but for a status check this is not a significant gap.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the action, and every word adds value. No filler or repetition.

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

Completeness5/5

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

For a simple status tool with no parameters and an output schema present, the description completely captures the essential information. It conveys the tool's purpose and the nature of its return value without needing to detail output fields.

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

Parameters4/5

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

The tool has zero parameters and the schema coverage is 100%, so there is nothing for the description to add about parameters. The baseline of 4 for zero-parameter tools is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Check') and a clear resource ('current connection status with TickTick'), immediately distinguishing it from sibling tools like create_project or login. It clearly states what the tool does and what it reports.

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

Usage Guidelines4/5

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

The description implies usage as a health/readiness check by stating it returns whether the server is configured, authenticated, and ready to use. It does not explicitly name alternatives or when-not-to-use, but for a status tool the intended context is clear.

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

update_habitsA

Update one or more existing habits in place.

Only the fields you provide are changed; omitted fields keep their current value.

Args: habits: Habit update dictionary, or list of dictionaries. Each item must contain: - habit_id (required): ID of the habit to update - name (optional): New habit name - color (optional): New color (hex code) - type (optional): New habit type - goal (optional): New numeric goal - step (optional): New step value - unit (optional): New unit - repeat_rule (optional): New recurrence rule - reminders (optional): New reminder triggers - encouragement (optional): New encouragement message - status (optional): New status

Examples: # Rename a single habit {"habit_id": "habit-1", "name": "Read more"}

# Update goal and repeat rule for two habits
[
    {"habit_id": "habit-1", "goal": 2.0},
    {"habit_id": "habit-2", "repeat_rule": "RRULE:FREQ=DAILY;INTERVAL=2"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
habitsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description discloses the partial-update behavior (only provided fields change), support for single or multiple habits, and the requirement for habit_id. It doesn't cover error handling or atomicity, but the core behavioral traits are transparent.

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

Conciseness5/5

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

The description is well-structured and efficient: a one-line purpose, a brief behavior note, a compact field list, and two illustrative examples. There is no redundancy, and the format makes scanning easy.

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

Completeness4/5

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

Despite the complex nested parameter, the description thoroughly explains the parameter structure, required fields, and behavior. It's missing explicit error handling or return value information, but the presence of an output schema and the detailed usage notes make it nearly complete.

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

Parameters5/5

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

The input schema is completely opaque—just a generic object/array with no field descriptions. The description compensates by specifying the required habit_id, listing all optional fields with types, and providing clear examples. This gives full semantic meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Update one or more existing habits in place.' It specifies the verb, resource, and scope, distinguishing it from sibling tools like create_habits by emphasizing 'existing' and 'in place.' This leaves no ambiguity about 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.

Usage Guidelines4/5

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

The description implies use for modifying existing habits, reinforced by examples showing single and batch updates. It doesn't explicitly name alternatives or state when not to use it, but the context and sibling tool names make the intended use clear.

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

update_projectsA

Update one or more existing projects in place (without deleting them).

Only the fields you provide are changed; omitted fields keep their current value. Use this instead of delete-then-recreate to avoid losing the tasks inside a project.

Args: projects: Project update dictionary, or list of dictionaries. Each item must contain: - project_id (required): ID of the project to update - name (optional): New project name - color (optional): New color (hex code, e.g. "#F18181") - view_mode (optional): One of "list", "kanban", "timeline" - kind (optional): Project type - "TASK" or "NOTE"

Examples: # Rename a single project {"project_id": "abc123", "name": "Archived Work"}

# Switch several projects to kanban view
[
    {"project_id": "abc123", "view_mode": "kanban"},
    {"project_id": "def456", "view_mode": "kanban"}
]
ParametersJSON Schema
NameRequiredDescriptionDefault
projectsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses in-place, non-destructive updates, partial update behavior, and support for batching via list. It does not mention error handling or permissions, but covers core behavioral traits well.

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

Conciseness5/5

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

The description is well-structured: a concise purpose sentence, a usage guideline, clearly labeled Args with bullet-like formatting, and two illustrative examples. Every sentence contributes useful information with no redundancy.

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

Completeness5/5

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

Covers purpose, usage, full parameter detail, and examples. An output schema exists, so return values are presumably already documented. It lacks error-condition details, but for a batch update tool, this is sufficiently complete.

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

Parameters5/5

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

The input schema is bare (0% description coverage), so the description fully documents the 'projects' parameter: required project_id, optional name, color, view_mode, and kind, including enum values and an example hex code. This adds substantial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Update one or more existing projects in place (without deleting them)', using a specific verb and resource. It distinguishes itself from siblings like create_project and delete_projects by emphasizing the 'in place' and 'without deleting' aspects.

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

Usage Guidelines5/5

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

Explicitly recommends 'Use this instead of delete-then-recreate to avoid losing the tasks inside a project', providing a clear alternative and rationale. Also explains partial update semantics ('Only the fields you provide are changed; omitted fields keep their current value'), which guides correct usage.

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

update_tasksA

Update one or more existing tasks in TickTick.

Supports both single task and batch updates. For single task, you can pass a dictionary directly. For multiple tasks, pass a list of dictionaries.

Args: tasks: Task dictionary or list of task dictionaries. Each task must contain: - task_id (required): ID of the task to update - project_id (required): ID of the project the task belongs to - title (optional): task title - content (optional): task description/content - desc (optional): description of checklist - start_date (optional): ISO datetime WITH timezone offset - due_date (optional): ISO datetime WITH timezone offset; omit to make an all-day task - time_zone (optional): IANA timezone name (e.g., "Asia/Shanghai", "America/New_York") - priority (optional): priority level - "none", "low", "medium", or "high" - repeat_flag (optional): Recurring rules - items (optional): List of subtask dictionaries - reminders (optional): List of iCal TRIGGER strings (e.g., ["TRIGGER:PT0S"] = at due, ["TRIGGER:-PT15M"] = 15 min before). Pass [] to clear all reminders.

Examples: # Single task update (set due date with timezone) { "task_id": "abc123", "project_id": "xyz789", "title": "Updated title", "due_date": "2025-12-31T15:00:00+08:00", "time_zone": "Asia/Shanghai", "priority": "high" }

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It documents required and optional fields, input formats, and batch behavior, but it does not disclose whether updates are partial (only provided fields are changed) or full replacement of the task object. Also, it lacks details on error handling, idempotency, or side effects. This is a significant behavioral ambiguity for an update operation.

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

Conciseness4/5

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

The description is lengthy but well-structured with an Args list and examples. Every sentence serves a purpose; the length is justified by the complexity of the task parameters. It is front-loaded with the purpose and clearly organized, though it could be slightly more concise by trimming redundant wording.

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

Completeness4/5

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

Given the tool's complexity (many optional fields, batch support, timezone handling) and minimal schema, the description covers most necessary information. However, the partial vs. full update ambiguity is a gap that affects complete understanding. An output schema exists, so return-value documentation is not required, but the update semantics should have been clarified.

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

Parameters5/5

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

The input schema is extremely generic (a single 'tasks' property with anyOf object/array and additionalProperties true), providing essentially zero parameter documentation. The description compensates fully by listing all required and optional fields, their types, formats (ISO datetime, IANA timezone), and even an example. This is high-value semantic clarification.

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

Purpose5/5

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

The description clearly states it updates existing tasks, with specific verb+resource and scope ('one or more existing tasks'). It distinguishes itself from sibling tools like create_tasks, delete_tasks, and move_tasks by focusing on modification of existing tasks.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool (updating existing tasks) and provides usage examples for both single and batch updates. However, it does not explicitly mention alternatives or exclusions (e.g., use create_tasks for new tasks, move_tasks for moving between projects). It gives clear context without explicit when-not-to-use guidance.

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. Dates show when Glama detected each change.

  1. 21 tool updatesv0.2.0
    • First observedcheckin_habits
    • First observedcomplete_tasks
    • First observedcreate_habits
    • First observedcreate_project
    • First observedcreate_subtasks
    • First observedcreate_tasks
    • First observeddelete_projects
    • First observeddelete_tasks
    • First observedget_all_habits
    • First observedget_all_projects
    • First observedget_completed_tasks
    • First observedget_habit
    • First observedget_habit_checkins
    • First observedget_project_info
    • First observedlogin
    • First observedmove_tasks
    • First observedquery_tasks
    • First observedticktick_status
    • First observedupdate_habits
    • First observedupdate_projects
    • First observedupdate_tasks

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: projects, tasks, subtasks, habits, and authentication all have clear boundaries. Even similar-sounding tools like get_all_projects and get_project_info differ in scope, and query_tasks vs get_completed_tasks are clearly separated. No two tools overlap in a way that would cause an agent to select the wrong one.

Naming Consistency4/5

The vast majority of tools follow the predictable verb_noun pattern (create_project, update_tasks, get_habit, delete_projects, checkin_habits). The only outliers are 'ticktick_status' and 'login', which are not verb_noun, but they are minor deviations and do not create confusion.

Tool Count4/5

At 21 tools, the server is on the heavier side but still well-scoped for a feature-rich TickTick integration covering projects, tasks, and habits. Each tool serves a distinct purpose, and the count is appropriate for the breadth of functionality offered.

Completeness4/5

The tool surface provides comprehensive coverage for projects and tasks, including create, read, update, delete, and specialized operations like moving tasks and querying. The only notable gap is the absence of a habit deletion tool, which is a minor missing CRUD operation that agents could work around.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Code-MonkeyZhang/ticktick-mcp-enhanced'

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