ticktick-mcp
TickTick MCP 서버 -- Claude를 위한 완벽한 TickTick 통합
28개의 도구. 전체 CRUD. 스마트 쿼리. 다중 조건 필터. 일괄 작업. GTD 지원. Dida365 호환.
Claude를 TickTick 계정에 연결하고 자연스러운 대화를 통해 전체 작업 시스템을 관리하세요. 앱을 열지 않고도 작업을 생성하고, 프로젝트 전체를 검색하고, 기한이 지난 항목을 확인하고, 항목을 일괄 생성하며 체계적으로 관리할 수 있습니다.
"기한이 지난 작업은?" --> 모든 프로젝트에서 놓친 마감일을 즉시 보여줍니다.
왜 이 서버인가요?
기능 | 이 서버 | TickTick 공식 MCP | jacepark12 |
도구 | 28 | 22 | ~20 |
다중 조건 필터 | 예 (우선순위 + 태그 + 날짜 + 프로젝트) | 예 | 아니요 |
프로젝트 간 작업 이동 | 예 | 예 | 아니요 |
일괄 완료 | 예 (최대 20개) | 예 (최대 20개) | 아니요 |
일괄 업데이트 | 예 | 예 | 아니요 |
완료된 작업 보기 | 예 | 예 | 아니요 |
프로젝트 간 검색 | 전체 텍스트 검색 | 예 | 예 |
하위 작업 | 예 | 아니요 | 아니요 |
GTD 포커스 뷰 | 예 (높은 우선순위 + 기한 + 기한 경과) | 아니요 | 부분 지원 |
Dida365 지원 | 예 (기본 URL 구성 가능) | 아니요 | 예 |
비동기 (httpx) | 예 | N/A | 아니요 (동기 요청) |
Pydantic 유효성 검사 | 예 (타입 지정 입력) | N/A | 아니요 |
MCP 주석 | 예 (읽기 전용, 파괴적 작업 힌트) | N/A | 아니요 |
자체 호스팅 / 오픈 소스 | 예 | 아니요 (호스팅 서비스) | 예 |
개인정보 보호 | 100% 로컬, 사용자 토큰만 사용 | TickTick 서버를 거침 | 100% 로컬 |
Related MCP server: mcp-server-asana
빠른 시작
사전 요구 사항
TickTick 계정
Python 3.10+
Claude Code 또는 Claude Desktop
1단계 -- 복제 및 설치
git clone https://github.com/Salen-Project/ticktick-mcp
cd ticktick-mcp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt2단계 -- TickTick 개발자 앱 등록
developer.ticktick.com으로 이동합니다.
New App을 클릭하고 이름을 입력합니다.
OAuth Redirect URL을
http://localhost:8080/callback으로 설정합니다.Client ID와 Client Secret을 복사합니다.
3단계 -- 인증
TICKTICK_CLIENT_ID=your_id TICKTICK_CLIENT_SECRET=your_secret .venv/bin/python3 setup_auth.py브라우저가 열리고 앱 승인을 요청합니다. Allow를 클릭하세요. 토큰은 ~/.ticktick_mcp/tokens.json에 저장되며 자동으로 새로 고침됩니다.
4단계 -- Claude Code에 등록
claude mcp add ticktick \
-e TICKTICK_CLIENT_ID=your_id \
-e TICKTICK_CLIENT_SECRET=your_secret \
-- /path/to/ticktick-mcp/.venv/bin/python3 /path/to/ticktick-mcp/server.pyClaude Desktop의 경우
claude_desktop_config.json에 다음을 추가하세요:
{
"mcpServers": {
"ticktick": {
"type": "stdio",
"command": "/path/to/ticktick-mcp/.venv/bin/python3",
"args": ["/path/to/ticktick-mcp/server.py"],
"env": {
"TICKTICK_CLIENT_ID": "your_id",
"TICKTICK_CLIENT_SECRET": "your_secret"
}
}
}
}5단계 -- 생산성 기술 추가 (선택 사항)
mkdir -p ~/.claude/skills/ticktick
cp skills/ticktick/SKILL.md ~/.claude/skills/ticktick/Dida365 지원
Dida365(TickTick의 중국 버전)의 경우 다음 환경 변수를 설정하세요:
TICKTICK_BASE_URL=https://api.dida365.com/open/v1
TICKTICK_TOKEN_URL=https://dida365.com/oauth/token사용 예시
사용자 말하기 | 결과 |
"금요일에 치과 예약하라고 알려줘" | 기한이 설정된 작업 생성 |
"'1분기 보고서 검토'를 업무 프로젝트에 추가하고 우선순위를 높게 설정해" | 업무 프로젝트에 우선순위 5인 작업 생성 |
"기한이 지난 작업은?" | 모든 프로젝트에서 기한이 지난 작업 표시 |
"무엇에 집중해야 할까?" | GTD 뷰: 높은 우선순위 + 오늘 기한 + 기한 경과 |
"'예산'과 관련된 모든 것 검색해" | 모든 프로젝트에서 전체 텍스트 검색 |
"높은 우선순위 작업만 보여줘" | 모든 프로젝트에서 우선순위=5인 작업 필터링 |
"이번 주 기한인 작업은?" | 향후 7일 이내 기한인 작업 표시 |
"작업 생성: 우유 사기, 존에게 전화하기, 보고서 제출" | 3개의 작업을 일괄 생성 |
"'휴가 계획'이라는 프로젝트 생성해" | 새 프로젝트 생성 |
"휴가 작업 아래에 '선크림 사기' 하위 작업 추가해" | 하위 작업 생성 |
"치과 작업 완료했어" | 작업을 완료 상태로 표시 |
"오래된 스프린트 프로젝트 삭제해" | 프로젝트 및 모든 작업 삭제 |
MCP 도구 참조
프로젝트 (5개 도구)
도구 | 설명 |
| ID, 이름, 색상이 포함된 모든 프로젝트 나열 |
| 특정 프로젝트의 세부 정보 가져오기 |
| 프로젝트 세부 정보 + 완료되지 않은 모든 작업을 한 번에 가져오기 |
| 새 프로젝트 생성 (이름, 색상, 보기 모드) |
| 프로젝트 이름, 색상 또는 보기 모드 업데이트 |
| 프로젝트 영구 삭제 |
작업 -- 기본 CRUD (7개 도구)
도구 | 설명 |
| 특정 프로젝트의 모든 작업 나열 |
| 작업 생성 (제목, 기한, 우선순위, 프로젝트, 태그) |
| 특정 작업의 전체 세부 정보 가져오기 |
| 제목, 내용, 날짜 또는 우선순위 업데이트 |
| 작업을 완료로 표시 |
| 작업 영구 삭제 |
| 상위 작업 아래에 하위 작업 생성 |
작업 -- 스마트 쿼리 (7개 도구)
도구 | 설명 |
| 모든 활성 프로젝트의 모든 작업 가져오기 |
| 제목, 내용, 하위 작업에 대한 전체 텍스트 검색 |
| 우선순위별 필터링 (없음/낮음/중간/높음) |
| 모든 프로젝트에서 오늘 기한인 작업 |
| 모든 프로젝트에서 기한이 지난 모든 작업 |
| 향후 7일 이내 기한인 작업 |
| 정확히 N일 후 기한인 작업 |
작업 -- 일괄 처리 및 생산성 (5개 도구)
도구 | 설명 |
| 여러 작업을 한 번에 생성 |
| 여러 작업을 한 번에 업데이트 |
| 최대 20개의 작업을 한 번에 완료 표시 |
| 작업을 다른 프로젝트로 이동 |
| GTD 포커스 뷰: 높은 우선순위 + 오늘 기한 + 기한 경과 |
작업 -- 고급 필터 (2개 도구)
도구 | 설명 |
| 다중 조건 필터: 우선순위 + 태그 + 날짜 범위 + 프로젝트 + 상태 |
| 프로젝트에서 완료된 작업 보기 |
사용자 (1개 도구)
도구 | 설명 |
| 사용자 설정 가져오기 (시간대, 주 시작일 등) |
아키텍처
server.py # 20 MCP tools, async httpx, Pydantic validation
setup_auth.py # One-time OAuth 2.0 setup (browser-based)
~/.ticktick_mcp/ # Token storage (auto-refreshed)
skills/ticktick/ # Claude skill for natural task language설계 선택:
모든 곳에 비동기 적용 -- 차단 없는 API 호출을 위한
httpx.AsyncClient사용Pydantic 입력 모델 -- 명확한 오류 메시지와 함께 타입 안전성이 보장된 입력
MCP 주석 -- 더 안전한 도구 사용을 위한
readOnlyHint,destructiveHint사용자동 토큰 새로 고침 -- 60초 버퍼를 사용하여 토큰이 투명하게 새로 고침됨
문제 해결
"Given client ID does not match" -- developer.ticktick.com에서 Client ID를 다시 확인하세요.
Port 8080 already in use -- lsof -ti:8080 | xargs kill -9를 실행한 후 다시 시도하세요.
Tokens expired -- setup_auth.py를 다시 실행하여 새 토큰을 받으세요.
Claude doesn't see tools -- claude mcp list를 실행하여 등록 여부를 확인하세요.
기여
기여를 환영합니다! 변경하고 싶은 내용이 있으면 먼저 이슈를 열어 논의해 주세요.
git clone https://github.com/Salen-Project/ticktick-mcp
cd ticktick-mcp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
# Make your changes to server.py
# Test: python3 -c "from server import mcp; print(len(mcp._tool_manager._tools), 'tools')"링크
라이선스
MIT (c) Salen-Project
Available Tools
7 toolsticktick_complete_taskBIdempotent
Mark a TickTick task as completed.
Args: params (TaskActionInput): - task_id (str): ID of the task to complete - project_id (str): ID of the project the task belongs to
Returns: str: JSON success confirmation or error message.
Examples: - "Mark the grocery task as done" - "Complete task X"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false (mutation), openWorldHint=true (flexible inputs), idempotentHint=true (safe to retry), and destructiveHint=false (non-destructive). The description adds that it 'marks as completed,' which aligns with annotations but doesn't provide extra behavioral context like rate limits, authentication needs, or what 'completed' entails (e.g., archiving). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by structured sections (Args, Returns, Examples). It's appropriately sized, though the Examples are somewhat redundant and could be more illustrative. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations cover mutation and idempotency, and an output schema exists (Returns mentions JSON), the description is moderately complete. However, it lacks context on error handling, side effects, or how it fits with siblings, leaving gaps for a tool that modifies task state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section detailing task_id and project_id with minimal semantics ('ID of the task/project'). This compensates somewhat, but it doesn't explain format, sourcing, or relationships beyond what's implied. With 0% coverage, baseline might be lower, but the Args add basic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark a TickTick task as completed') and identifies the resource ('task'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from siblings like ticktick_update_task (which might also handle completion) or ticktick_delete_task (another task modification).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing task), exclusions, or comparisons to siblings like ticktick_update_task (which might handle partial updates including completion). The examples are generic and don't clarify context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_create_taskA
Create a new task in TickTick.
Creates a task with the given title and optional details. If no project_id is provided, the task goes to the Inbox.
Args: params (CreateTaskInput): - title (str): Task title (required) - content (Optional[str]): Notes or description - due_date (Optional[str]): Due date e.g. '2026-03-20' or '2026-03-20T10:00:00+0000' - priority (Optional[int]): 0=None, 1=Low, 3=Medium, 5=High (default: 0) - project_id (Optional[str]): Project ID. Uses Inbox if not set. - tags (Optional[List[str]]): Tag names to apply
Returns: str: JSON with success status and created task details including its new ID.
Examples: - "Add a task to buy groceries" -> title="Buy groceries" - "Remind me to call John tomorrow, high priority" -> title="Call John", priority=5, due_date="2026-03-15" - "Add 'Review report' to my Work project" -> use ticktick_list_projects first to get project_id
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint: false) and not destructive or idempotent. The description adds valuable context beyond annotations: it explains the default behavior (tasks go to Inbox if no project_id), provides concrete examples of usage, and describes the return format. However, it doesn't mention authentication needs, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficiently organized: a clear purpose statement, parameter documentation with examples, return value explanation, and practical usage examples. Every section adds value without redundancy, and information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a creation tool with no destructive annotations and an output schema exists (returns JSON with success status and task details), the description provides excellent completeness. It covers purpose, all parameters with semantics, usage examples, return format, and references to sibling tools. The combination of description and annotations gives the agent everything needed to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (the schema has no descriptions at the top level, only within the nested CreateTaskInput), the description carries the full burden. It provides excellent parameter semantics: it lists all parameters with clear explanations, examples of values, default behaviors, and even includes practical examples showing how natural language requests map to parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Create a new task in TickTick') and distinguishes it from siblings like update_task, complete_task, and delete_task by focusing on creation. It specifies the resource (task) and key parameters, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (creating tasks) and mentions using ticktick_list_projects first to get project_id, which is helpful guidance. However, it doesn't explicitly state when NOT to use it (e.g., vs. update_task for existing tasks) or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_delete_taskADestructive
Permanently delete a TickTick task. This action cannot be undone.
Args: params (TaskActionInput): - task_id (str): ID of the task to delete - project_id (str): ID of the project the task belongs to
Returns: str: JSON success confirmation or error message.
Examples: - "Delete the grocery task" - "Remove task X permanently"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context by emphasizing 'This action cannot be undone,' which reinforces the irreversible nature beyond the annotation. It does not mention rate limits, auth needs, or side effects, but the added warning is helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (description, Args, Returns, Examples) and front-loaded key information. The examples are relevant but could be more concise; overall, it avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature and lack of schema descriptions, the description compensates well with parameter documentation and a warning. The output schema exists (Returns section mentions JSON), so return values need not be detailed. It covers essential aspects but could improve by addressing authentication or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section that documents both task_id and project_id parameters, adding meaning beyond the bare schema. However, it does not explain parameter relationships or provide format examples, keeping it at baseline adequacy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('permanently delete') and resource ('a TickTick task'), distinguishing it from siblings like complete_task, update_task, or get_task. The verb 'delete' is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating the action is permanent and irreversible, which helps differentiate from non-destructive siblings. However, it does not explicitly name when to use alternatives (e.g., complete_task vs. delete_task) or specify prerequisites like authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_get_taskARead-onlyIdempotent
Get full details of a specific TickTick task by ID.
Args: params (GetTaskInput): - task_id (str): The task ID - project_id (str): The project ID the task belongs to
Returns: str: JSON object with full task details including created and modified timestamps.
Examples: - Use when: You have a task ID and need its current details
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide strong behavioral hints (readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true), covering safety and idempotency. The description adds minimal context beyond this, such as specifying it returns 'full details' including timestamps, but does not elaborate on error conditions, rate limits, or authentication needs. With annotations doing heavy lifting, a baseline 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns, Examples) and front-loaded the core functionality. It avoids redundancy, but the 'Args' section could be more integrated into the flow rather than a separate block, slightly reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter object with 2 fields), rich annotations, and the presence of an output schema (implied by 'Returns: str: JSON object'), the description is mostly complete. It covers purpose, parameters, returns, and usage examples, though it lacks details on error handling or authentication, which are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by listing both parameters (task_id and project_id) and their purposes in the 'Args' section, adding meaning beyond the bare schema. However, it does not explain parameter constraints (e.g., format of IDs) or interactions, so it only partially addresses the coverage gap, warranting a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get full details') and resource ('a specific TickTick task by ID'), distinguishing it from siblings like list_tasks (which retrieves multiple tasks) or update_task (which modifies tasks). The verb 'Get' combined with 'full details' precisely communicates the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('when you have a task ID and need its current details'), which implicitly distinguishes it from list_tasks (for multiple tasks without IDs) and other siblings. However, it does not explicitly state when NOT to use it or name alternatives, preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_list_projectsARead-onlyIdempotent
List all TickTick projects (task lists) in the user's account.
Returns all projects with their IDs and names. Use the project ID with other tools to create or list tasks in a specific project.
Returns: str: JSON array of projects, each containing: - id (str): Project ID - name (str): Project name - color (str): Project color - closed (bool): Whether the project is archived
Examples: - Use when: "What projects/lists do I have in TickTick?" - Use when: You need a project ID before creating or listing tasks
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover key behavioral traits (readOnlyHint: true, destructiveHint: false, etc.), but the description adds valuable context by specifying the return format (JSON array with id, name, color, closed) and that project IDs are needed for other tools. It doesn't contradict annotations and enhances understanding beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by return details, usage guidelines, and examples. Every sentence adds value without redundancy, and it's appropriately sized for a tool with no parameters but important output semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, annotations covering safety, and an output schema), the description is complete. It explains what the tool does, when to use it, the return format, and how it integrates with siblings. No gaps exist for this read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters, and schema description coverage is 100%, so the baseline is high. The description doesn't need to explain parameters, but it implicitly confirms there are no inputs by focusing on the output and usage. It adds value by clarifying the tool's scope without parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all TickTick projects (task lists) in the user's account'), distinguishing it from sibling tools like ticktick_list_tasks (which lists tasks, not projects). It specifies that it returns projects with IDs and names, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage scenarios with 'Use when:' examples, such as 'What projects/lists do I have in TickTick?' and needing a project ID for other tools. It distinguishes this tool from siblings by indicating it's for listing projects, not tasks, and guides on using the output with other tools like creating or listing tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_list_tasksARead-onlyIdempotent
List all active tasks in a specific TickTick project.
Fetches all tasks for the given project ID. Use ticktick_list_projects first if you don't know the project ID.
Args: params (ListTasksInput): - project_id (str): Project ID to list tasks from
Returns: str: JSON array of tasks, each with id, title, content, due_date, priority, status, tags, and project_id.
Examples: - Use when: "Show me my tasks in the Work project" - Use when: "What's on my to-do list?"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide comprehensive behavioral hints (readOnlyHint: true, destructiveHint: false, etc.), so the bar is lower. The description adds valuable context about the prerequisite (need project ID) and clarifies it fetches 'all active tasks' rather than filtered subsets, which isn't covered by annotations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (description, args, returns, examples) and front-loaded purpose. The examples are helpful but slightly verbose; every sentence earns its place by adding practical guidance or clarifying usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter), rich annotations covering safety and behavior, and the presence of an output schema (described in the returns section), the description is complete. It provides purpose, usage guidance, parameter context, and output format without redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the single parameter's purpose ('Project ID to list tasks from') and providing guidance on how to obtain it (via ticktick_list_projects). However, it doesn't add format details or constraints beyond what's implied. With only one parameter, this meets baseline expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all active tasks') and resource ('in a specific TickTick project'), distinguishing it from siblings like ticktick_get_task (single task) and ticktick_list_projects (projects rather than tasks). It precisely defines scope with 'active tasks' and 'specific project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance: 'Use ticktick_list_projects first if you don't know the project ID' and includes two concrete examples ('Show me my tasks in the Work project' and 'What's on my to-do list?'). This clearly differentiates it from alternatives and provides practical application scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticktick_update_taskAIdempotent
Update an existing TickTick task. Only provided fields are changed.
Fetches the current task first, then applies your changes on top, so fields you don't specify are preserved.
Args: params (UpdateTaskInput): - task_id (str): ID of the task to update (required) - project_id (str): Project ID the task belongs to (required) - title (Optional[str]): New task title - content (Optional[str]): New task description - due_date (Optional[str]): New due date (e.g., '2026-03-25') - priority (Optional[int]): New priority: 0=None, 1=Low, 3=Medium, 5=High
Returns: str: JSON with success status and updated task details.
Examples: - "Change the due date of task X to Friday" - "Make task Y high priority" - "Update the title of task Z"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the fetch-then-merge approach ('Fetches the current task first, then applies your changes on top'), clarifies that unspecified fields are preserved, and provides format examples for due dates. Annotations cover idempotency and non-destructive nature, but the description adds practical implementation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Perfectly structured with clear sections: purpose statement, behavioral explanation, Args with parameter details, Returns, and Examples. Every sentence adds value with zero redundancy. The information is front-loaded with the core update behavior explained first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for an update tool with good annotations and output schema. The description covers purpose, behavioral approach, all parameters with semantics, return format, and practical examples. With annotations covering safety profile (non-destructive, idempotent) and output schema presumably documenting return structure, the description provides excellent contextual coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (context signals show Parameter count: 1, Required parameters: 1), the description carries full burden. It provides clear semantics for all parameters: explains task_id and project_id are required, documents optional fields with examples (due date format) and priority mapping (0=None, 1=Low, 3=Medium, 5=High). This fully compensates for the schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and resource 'existing TickTick task', distinguishing it from siblings like create_task, delete_task, and complete_task. It specifies that only provided fields are changed, which differentiates it from a full replacement operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples like changing due dates or priorities, but doesn't explicitly state when to use this vs. alternatives like complete_task or delete_task. It mentions fetching current task first, which provides some context but not explicit guidance on tool selection.
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.
7 tool updates
v1.0.0- First observed
ticktick_complete_task - First observed
ticktick_create_task - First observed
ticktick_delete_task - First observed
ticktick_get_task - First observed
ticktick_list_projects - First observed
ticktick_list_tasks - First observed
ticktick_update_task
TDQS
Scored across 7 tools
Every tool has a clearly distinct purpose with no ambiguity. Each tool targets a specific CRUD operation (create, read, update, delete, list) on either tasks or projects, with clear boundaries between task operations and project operations. The descriptions reinforce distinct use cases.
All tools follow a consistent verb_noun pattern with the 'ticktick_' prefix (e.g., ticktick_create_task, ticktick_list_projects). The naming is perfectly predictable throughout the set, using clear action verbs followed by resource nouns.
With 7 tools, this server is well-scoped for task management. It provides complete CRUD operations for tasks (create, get, update, delete, complete, list) plus project listing, which covers the essential workflows without being overwhelming or insufficient.
The tool surface provides complete coverage for task management. It includes all essential CRUD operations for tasks, plus task completion, project listing, and task listing within projects. There are no obvious gaps—agents can create, read, update, delete, complete, and list tasks, and navigate projects effectively.
Maintenance
Related MCP Connectors
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Personal CRM for Claude. Contacts live as plain-text files in your own Google Drive.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP Server for the Notion API, enabling Claude to interact with Notion workspaces.31850 npm922MIT
- AlicenseBqualityCmaintenancePerform Asana operations from an MCP Client such as Anthropic's Claude Desktop Application, and many more.221,756 npm148MIT
- AlicenseBqualityDmaintenanceA TypeScript Model Context Protocol server that integrates with Google Tasks API, allowing users to create, list, update, delete, and toggle completion status of tasks.47MIT

Notion MCP Serverofficial
AlicenseBqualityDmaintenanceAn MCP server that enables AI assistants to interact with the Notion API, allowing them to search, read, comment on, and create content in Notion workspaces through natural language commands.19122,532 npm4,632MIT