ticktick-mcp 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/index.js +47 -1582
  2. package/dist/index.js.map +1 -1
  3. package/dist/tools/authExchangeCode.d.ts +9 -0
  4. package/dist/tools/authExchangeCode.d.ts.map +1 -0
  5. package/dist/tools/authExchangeCode.js +49 -0
  6. package/dist/tools/authExchangeCode.js.map +1 -0
  7. package/dist/tools/authGetAuthorizationUrl.d.ts +10 -0
  8. package/dist/tools/authGetAuthorizationUrl.d.ts.map +1 -0
  9. package/dist/tools/authGetAuthorizationUrl.js +53 -0
  10. package/dist/tools/authGetAuthorizationUrl.js.map +1 -0
  11. package/dist/tools/authLogout.d.ts +9 -0
  12. package/dist/tools/authLogout.d.ts.map +1 -0
  13. package/dist/tools/authLogout.js +43 -0
  14. package/dist/tools/authLogout.js.map +1 -0
  15. package/dist/tools/authRefreshToken.d.ts +9 -0
  16. package/dist/tools/authRefreshToken.d.ts.map +1 -0
  17. package/dist/tools/authRefreshToken.js +60 -0
  18. package/dist/tools/authRefreshToken.js.map +1 -0
  19. package/dist/tools/authStatus.d.ts +9 -0
  20. package/dist/tools/authStatus.d.ts.map +1 -0
  21. package/dist/tools/authStatus.js +63 -0
  22. package/dist/tools/authStatus.js.map +1 -0
  23. package/dist/tools/batchCreateTasks.d.ts +9 -0
  24. package/dist/tools/batchCreateTasks.d.ts.map +1 -0
  25. package/dist/tools/batchCreateTasks.js +75 -0
  26. package/dist/tools/batchCreateTasks.js.map +1 -0
  27. package/dist/tools/completeTask.d.ts +9 -0
  28. package/dist/tools/completeTask.d.ts.map +1 -0
  29. package/dist/tools/completeTask.js +47 -0
  30. package/dist/tools/completeTask.js.map +1 -0
  31. package/dist/tools/createProject.d.ts +9 -0
  32. package/dist/tools/createProject.d.ts.map +1 -0
  33. package/dist/tools/createProject.js +64 -0
  34. package/dist/tools/createProject.js.map +1 -0
  35. package/dist/tools/createTask.d.ts +9 -0
  36. package/dist/tools/createTask.d.ts.map +1 -0
  37. package/dist/tools/createTask.js +131 -0
  38. package/dist/tools/createTask.js.map +1 -0
  39. package/dist/tools/deleteProject.d.ts +9 -0
  40. package/dist/tools/deleteProject.d.ts.map +1 -0
  41. package/dist/tools/deleteProject.js +46 -0
  42. package/dist/tools/deleteProject.js.map +1 -0
  43. package/dist/tools/deleteTask.d.ts +9 -0
  44. package/dist/tools/deleteTask.d.ts.map +1 -0
  45. package/dist/tools/deleteTask.js +47 -0
  46. package/dist/tools/deleteTask.js.map +1 -0
  47. package/dist/tools/getHighPriorityTasks.d.ts +9 -0
  48. package/dist/tools/getHighPriorityTasks.d.ts.map +1 -0
  49. package/dist/tools/getHighPriorityTasks.js +114 -0
  50. package/dist/tools/getHighPriorityTasks.js.map +1 -0
  51. package/dist/tools/getProject.d.ts +9 -0
  52. package/dist/tools/getProject.d.ts.map +1 -0
  53. package/dist/tools/getProject.js +62 -0
  54. package/dist/tools/getProject.js.map +1 -0
  55. package/dist/tools/getProjectById.d.ts +9 -0
  56. package/dist/tools/getProjectById.d.ts.map +1 -0
  57. package/dist/tools/getProjectById.js +52 -0
  58. package/dist/tools/getProjectById.js.map +1 -0
  59. package/dist/tools/getTask.d.ts +9 -0
  60. package/dist/tools/getTask.d.ts.map +1 -0
  61. package/dist/tools/getTask.js +65 -0
  62. package/dist/tools/getTask.js.map +1 -0
  63. package/dist/tools/getTasksDueSoon.d.ts +9 -0
  64. package/dist/tools/getTasksDueSoon.d.ts.map +1 -0
  65. package/dist/tools/getTasksDueSoon.js +118 -0
  66. package/dist/tools/getTasksDueSoon.js.map +1 -0
  67. package/dist/tools/getUser.d.ts +9 -0
  68. package/dist/tools/getUser.d.ts.map +1 -0
  69. package/dist/tools/getUser.js +47 -0
  70. package/dist/tools/getUser.js.map +1 -0
  71. package/dist/tools/listProjects.d.ts +9 -0
  72. package/dist/tools/listProjects.d.ts.map +1 -0
  73. package/dist/tools/listProjects.js +78 -0
  74. package/dist/tools/listProjects.js.map +1 -0
  75. package/dist/tools/listTasksInProject.d.ts +10 -0
  76. package/dist/tools/listTasksInProject.d.ts.map +1 -0
  77. package/dist/tools/listTasksInProject.js +177 -0
  78. package/dist/tools/listTasksInProject.js.map +1 -0
  79. package/dist/tools/searchTasks.d.ts +9 -0
  80. package/dist/tools/searchTasks.d.ts.map +1 -0
  81. package/dist/tools/searchTasks.js +134 -0
  82. package/dist/tools/searchTasks.js.map +1 -0
  83. package/dist/tools/updateProject.d.ts +9 -0
  84. package/dist/tools/updateProject.d.ts.map +1 -0
  85. package/dist/tools/updateProject.js +66 -0
  86. package/dist/tools/updateProject.js.map +1 -0
  87. package/dist/tools/updateTask.d.ts +9 -0
  88. package/dist/tools/updateTask.d.ts.map +1 -0
  89. package/dist/tools/updateTask.js +132 -0
  90. package/dist/tools/updateTask.js.map +1 -0
  91. package/package.json +1 -1
@@ -0,0 +1,177 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: List tasks in project
4
+ *
5
+ * Returns all tasks in a specific project (without project metadata).
6
+ * This is a convenience tool that wraps getProjectWithTasks but only returns tasks.
7
+ */
8
+ export function registerListTasksInProjectTool(server, getClient) {
9
+ server.registerTool("list_tasks_in_project", {
10
+ description: "List all tasks in a specific project with optional client-side filtering and sorting. Returns only the tasks array without project metadata.",
11
+ inputSchema: {
12
+ projectId: z.string().describe("The ID of the project to list tasks from"),
13
+ status: z.enum(['active', 'completed', 'all']).optional().describe("Filter by task status (default: 'all')"),
14
+ priority: z.union([z.number(), z.array(z.number())]).optional().describe("Filter by priority: single value (0,1,3,5) or array [0,1,3,5]"),
15
+ dueBefore: z.string().optional().describe("ISO date - include only tasks due before this date"),
16
+ dueAfter: z.string().optional().describe("ISO date - include only tasks due after this date"),
17
+ startBefore: z.string().optional().describe("ISO date - include only tasks starting before this date"),
18
+ startAfter: z.string().optional().describe("ISO date - include only tasks starting after this date"),
19
+ hasSubtasks: z.boolean().optional().describe("Filter by presence of subtasks: true=with subtasks, false=without"),
20
+ tags: z.array(z.string()).optional().describe("Filter by tags - include tasks with any of these tags"),
21
+ search: z.string().optional().describe("Text search - filter tasks whose title or content contains this text (case-insensitive)"),
22
+ sortBy: z.enum(['dueDate', 'priority', 'title', 'createdTime', 'modifiedTime', 'sortOrder']).optional().describe("Field to sort by"),
23
+ sortDirection: z.enum(['asc', 'desc']).optional().describe("Sort direction (default: 'asc')"),
24
+ limit: z.number().optional().describe("Maximum number of tasks to return"),
25
+ },
26
+ }, async ({ projectId, status, priority, dueBefore, dueAfter, startBefore, startAfter, hasSubtasks, tags, search, sortBy, sortDirection, limit }) => {
27
+ try {
28
+ const client = await getClient();
29
+ const data = await client.getProjectWithTasks(projectId);
30
+ // Apply filters
31
+ let filteredTasks = data.tasks;
32
+ // Filter by status
33
+ if (status && status !== 'all') {
34
+ filteredTasks = filteredTasks.filter(t => {
35
+ if (status === 'active')
36
+ return t.status === 0;
37
+ if (status === 'completed')
38
+ return t.status === 2;
39
+ return true;
40
+ });
41
+ }
42
+ // Filter by priority
43
+ if (priority !== undefined) {
44
+ const priorities = Array.isArray(priority) ? priority : [priority];
45
+ filteredTasks = filteredTasks.filter(t => priorities.includes(t.priority));
46
+ }
47
+ // Filter by due date
48
+ if (dueBefore) {
49
+ const beforeDate = new Date(dueBefore);
50
+ filteredTasks = filteredTasks.filter(t => t.dueDate && new Date(t.dueDate) < beforeDate);
51
+ }
52
+ if (dueAfter) {
53
+ const afterDate = new Date(dueAfter);
54
+ filteredTasks = filteredTasks.filter(t => t.dueDate && new Date(t.dueDate) > afterDate);
55
+ }
56
+ // Filter by start date
57
+ if (startBefore) {
58
+ const beforeDate = new Date(startBefore);
59
+ filteredTasks = filteredTasks.filter(t => t.startDate && new Date(t.startDate) < beforeDate);
60
+ }
61
+ if (startAfter) {
62
+ const afterDate = new Date(startAfter);
63
+ filteredTasks = filteredTasks.filter(t => t.startDate && new Date(t.startDate) > afterDate);
64
+ }
65
+ // Filter by subtasks
66
+ if (hasSubtasks !== undefined) {
67
+ filteredTasks = filteredTasks.filter(t => {
68
+ const hasItems = t.items && t.items.length > 0;
69
+ return hasSubtasks ? hasItems : !hasItems;
70
+ });
71
+ }
72
+ // Filter by tags
73
+ if (tags && tags.length > 0) {
74
+ filteredTasks = filteredTasks.filter(t => {
75
+ return t.tags && t.tags.some(tag => tags.includes(tag));
76
+ });
77
+ }
78
+ // Filter by search text
79
+ if (search) {
80
+ const searchLower = search.toLowerCase();
81
+ filteredTasks = filteredTasks.filter(t => {
82
+ return t.title.toLowerCase().includes(searchLower) ||
83
+ (t.content && t.content.toLowerCase().includes(searchLower));
84
+ });
85
+ }
86
+ // Apply sorting
87
+ if (sortBy) {
88
+ const direction = sortDirection === 'desc' ? -1 : 1;
89
+ filteredTasks.sort((a, b) => {
90
+ let aVal;
91
+ let bVal;
92
+ switch (sortBy) {
93
+ case 'dueDate':
94
+ aVal = a.dueDate ? new Date(a.dueDate).getTime() : Infinity;
95
+ bVal = b.dueDate ? new Date(b.dueDate).getTime() : Infinity;
96
+ break;
97
+ case 'priority':
98
+ aVal = a.priority;
99
+ bVal = b.priority;
100
+ break;
101
+ case 'title':
102
+ aVal = a.title.toLowerCase();
103
+ bVal = b.title.toLowerCase();
104
+ break;
105
+ case 'createdTime':
106
+ aVal = new Date(a.createdTime).getTime();
107
+ bVal = new Date(b.createdTime).getTime();
108
+ break;
109
+ case 'modifiedTime':
110
+ aVal = new Date(a.modifiedTime).getTime();
111
+ bVal = new Date(b.modifiedTime).getTime();
112
+ break;
113
+ case 'sortOrder':
114
+ aVal = a.sortOrder;
115
+ bVal = b.sortOrder;
116
+ break;
117
+ default:
118
+ return 0;
119
+ }
120
+ if (aVal < bVal)
121
+ return -1 * direction;
122
+ if (aVal > bVal)
123
+ return 1 * direction;
124
+ return 0;
125
+ });
126
+ }
127
+ // Apply limit
128
+ if (limit && limit > 0) {
129
+ filteredTasks = filteredTasks.slice(0, limit);
130
+ }
131
+ return {
132
+ content: [
133
+ {
134
+ type: "text",
135
+ text: JSON.stringify({
136
+ success: true,
137
+ total: data.tasks.length,
138
+ count: filteredTasks.length,
139
+ tasks: filteredTasks.map((t) => ({
140
+ id: t.id,
141
+ title: t.title,
142
+ content: t.content,
143
+ priority: t.priority,
144
+ status: t.status,
145
+ dueDate: t.dueDate,
146
+ startDate: t.startDate,
147
+ isAllDay: t.isAllDay,
148
+ tags: t.tags,
149
+ items: t.items?.map((item) => ({
150
+ id: item.id,
151
+ title: item.title,
152
+ status: item.status,
153
+ })),
154
+ })),
155
+ }, null, 2),
156
+ },
157
+ ],
158
+ };
159
+ }
160
+ catch (error) {
161
+ const errorMessage = error instanceof Error ? error.message : String(error);
162
+ return {
163
+ content: [
164
+ {
165
+ type: "text",
166
+ text: JSON.stringify({
167
+ success: false,
168
+ error: errorMessage,
169
+ }, null, 2),
170
+ },
171
+ ],
172
+ isError: true,
173
+ };
174
+ }
175
+ });
176
+ }
177
+ //# sourceMappingURL=listTasksInProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTasksInProject.js","sourceRoot":"","sources":["../../src/tools/listTasksInProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Search tasks
5
+ *
6
+ * Search for tasks by keyword across all projects.
7
+ */
8
+ export declare function registerSearchTasksTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=searchTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchTasks.d.ts","sourceRoot":"","sources":["../../src/tools/searchTasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA4IzC"}
@@ -0,0 +1,134 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Search tasks
4
+ *
5
+ * Search for tasks by keyword across all projects.
6
+ */
7
+ export function registerSearchTasksTool(server, getClient) {
8
+ server.registerTool("search_tasks", {
9
+ description: "Search for tasks by keyword across all projects. Useful for finding tasks by text content.",
10
+ inputSchema: {
11
+ query: z.string().describe("Search term (required)"),
12
+ searchIn: z.array(z.enum(['title', 'content', 'desc'])).optional().describe("Fields to search in (default: ['title', 'content'])"),
13
+ projectIds: z.array(z.string()).optional().describe("Optional: limit to specific project IDs"),
14
+ status: z.enum(['active', 'completed', 'all']).optional().describe("Task status filter (default: 'active')"),
15
+ caseSensitive: z.boolean().optional().describe("Case-sensitive search (default: false)"),
16
+ limit: z.number().optional().describe("Maximum results to return (default: 20)"),
17
+ },
18
+ }, async ({ query, searchIn = ['title', 'content'], projectIds, status = 'active', caseSensitive = false, limit = 20 }) => {
19
+ try {
20
+ const client = await getClient();
21
+ const searchQuery = caseSensitive ? query : query.toLowerCase();
22
+ let allTasks = [];
23
+ if (projectIds && projectIds.length > 0) {
24
+ // Search in specific projects
25
+ for (const projectId of projectIds) {
26
+ try {
27
+ const data = await client.getProjectWithTasks(projectId);
28
+ const tasksWithProject = data.tasks.map(t => ({
29
+ ...t,
30
+ projectName: data.project.name,
31
+ }));
32
+ allTasks = allTasks.concat(tasksWithProject);
33
+ }
34
+ catch {
35
+ continue;
36
+ }
37
+ }
38
+ }
39
+ else {
40
+ // Search all projects
41
+ const projects = await client.listProjects();
42
+ for (const project of projects) {
43
+ if (!project.closed) {
44
+ try {
45
+ const data = await client.getProjectWithTasks(project.id);
46
+ const tasksWithProject = data.tasks.map(t => ({
47
+ ...t,
48
+ projectName: project.name,
49
+ }));
50
+ allTasks = allTasks.concat(tasksWithProject);
51
+ }
52
+ catch {
53
+ continue;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ // Filter by status
59
+ let filteredTasks = allTasks;
60
+ if (status === 'active') {
61
+ filteredTasks = filteredTasks.filter(t => t.status === 0);
62
+ }
63
+ else if (status === 'completed') {
64
+ filteredTasks = filteredTasks.filter(t => t.status === 2);
65
+ }
66
+ // Search and collect matches
67
+ const matches = [];
68
+ for (const task of filteredTasks) {
69
+ const matchedIn = [];
70
+ for (const field of searchIn) {
71
+ let fieldValue = '';
72
+ if (field === 'title')
73
+ fieldValue = task.title || '';
74
+ else if (field === 'content')
75
+ fieldValue = task.content || '';
76
+ else if (field === 'desc')
77
+ fieldValue = task.desc || '';
78
+ const searchText = caseSensitive ? fieldValue : fieldValue.toLowerCase();
79
+ if (searchText.includes(searchQuery)) {
80
+ matchedIn.push(field);
81
+ }
82
+ }
83
+ if (matchedIn.length > 0) {
84
+ matches.push({
85
+ ...task,
86
+ matchedIn,
87
+ });
88
+ }
89
+ if (matches.length >= limit)
90
+ break;
91
+ }
92
+ return {
93
+ content: [
94
+ {
95
+ type: "text",
96
+ text: JSON.stringify({
97
+ success: true,
98
+ query: query,
99
+ count: matches.length,
100
+ tasks: matches.map(t => ({
101
+ id: t.id,
102
+ title: t.title,
103
+ projectId: t.projectId,
104
+ projectName: t.projectName,
105
+ content: t.content,
106
+ dueDate: t.dueDate,
107
+ priority: t.priority,
108
+ status: t.status,
109
+ tags: t.tags,
110
+ matchedIn: t.matchedIn,
111
+ })),
112
+ }, null, 2),
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ catch (error) {
118
+ const errorMessage = error instanceof Error ? error.message : String(error);
119
+ return {
120
+ content: [
121
+ {
122
+ type: "text",
123
+ text: JSON.stringify({
124
+ success: false,
125
+ error: errorMessage,
126
+ }, null, 2),
127
+ },
128
+ ],
129
+ isError: true,
130
+ };
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=searchTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchTasks.js","sourceRoot":"","sources":["../../src/tools/searchTasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Update project
5
+ *
6
+ * Updates an existing project.
7
+ */
8
+ export declare function registerUpdateProjectTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=updateProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateProject.d.ts","sourceRoot":"","sources":["../../src/tools/updateProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAwEzC"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Update project
4
+ *
5
+ * Updates an existing project.
6
+ */
7
+ export function registerUpdateProjectTool(server, getClient) {
8
+ server.registerTool("update_project", {
9
+ description: "Update an existing project in TickTick.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The ID of the project to update"),
12
+ name: z.string().optional().describe("New name for the project"),
13
+ color: z
14
+ .string()
15
+ .optional()
16
+ .describe('New hex color code (e.g., "#ff6b6b")'),
17
+ viewMode: z
18
+ .enum(["list", "kanban", "timeline"])
19
+ .optional()
20
+ .describe("New view mode for the project"),
21
+ },
22
+ }, async ({ projectId, name, color, viewMode }) => {
23
+ try {
24
+ const client = await getClient();
25
+ const project = await client.updateProject(projectId, {
26
+ name,
27
+ color,
28
+ viewMode: viewMode,
29
+ });
30
+ return {
31
+ content: [
32
+ {
33
+ type: "text",
34
+ text: JSON.stringify({
35
+ success: true,
36
+ message: `Project "${project.name}" updated successfully!`,
37
+ project: {
38
+ id: project.id,
39
+ name: project.name,
40
+ color: project.color,
41
+ viewMode: project.viewMode,
42
+ closed: project.closed,
43
+ },
44
+ }, null, 2),
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ catch (error) {
50
+ const errorMessage = error instanceof Error ? error.message : String(error);
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify({
56
+ success: false,
57
+ error: errorMessage,
58
+ }, null, 2),
59
+ },
60
+ ],
61
+ isError: true,
62
+ };
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=updateProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateProject.js","sourceRoot":"","sources":["../../src/tools/updateProject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,yCAAyC;QACtD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAChE,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sCAAsC,CAAC;YACnD,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;iBACpC,QAAQ,EAAE;iBACV,QAAQ,CAAC,+BAA+B,CAAC;SAC7C;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE;gBACpD,IAAI;gBACJ,KAAK;gBACL,QAAQ,EAAE,QAAe;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,yBAAyB;4BAC1D,OAAO,EAAE;gCACP,EAAE,EAAE,OAAO,CAAC,EAAE;gCACd,IAAI,EAAE,OAAO,CAAC,IAAI;gCAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gCAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;6BACvB;yBACF,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,YAAY;yBACpB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Update task
5
+ *
6
+ * Updates an existing task.
7
+ */
8
+ export declare function registerUpdateTaskTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=updateTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTask.d.ts","sourceRoot":"","sources":["../../src/tools/updateTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA4IzC"}
@@ -0,0 +1,132 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Update task
4
+ *
5
+ * Updates an existing task.
6
+ */
7
+ export function registerUpdateTaskTool(server, getClient) {
8
+ server.registerTool("update_task", {
9
+ description: "Update an existing task in TickTick. Supports all task fields including scheduling, reminders, recurrence, and subtasks.",
10
+ inputSchema: {
11
+ taskId: z.string().describe("The ID of the task to update"),
12
+ title: z.string().optional().describe("New title for the task"),
13
+ content: z.string().optional().describe("New description/notes"),
14
+ dueDate: z
15
+ .string()
16
+ .nullable()
17
+ .optional()
18
+ .describe("New due date (ISO 8601) or null to remove"),
19
+ priority: z
20
+ .number()
21
+ .min(0)
22
+ .max(5)
23
+ .optional()
24
+ .describe("New priority: 0=None, 1=Low, 3=Medium, 5=High"),
25
+ tags: z.array(z.string()).optional().describe("Array of tag names"),
26
+ projectId: z
27
+ .string()
28
+ .optional()
29
+ .describe("Move task to a different project by specifying the target project ID"),
30
+ isAllDay: z
31
+ .boolean()
32
+ .optional()
33
+ .describe("Whether this is an all-day task (no specific time)"),
34
+ startDate: z
35
+ .string()
36
+ .nullable()
37
+ .optional()
38
+ .describe("Start date in ISO 8601 format (e.g., 2024-01-15T09:00:00+0000) or null to remove"),
39
+ timeZone: z
40
+ .string()
41
+ .optional()
42
+ .describe("IANA timezone (e.g., 'America/New_York', 'Europe/London')"),
43
+ reminders: z
44
+ .array(z.string())
45
+ .nullable()
46
+ .optional()
47
+ .describe("Array of reminder strings in iCalendar TRIGGER format (e.g., 'TRIGGER:P0DT9H0M0S' for 9:00 AM, 'TRIGGER:-PT15M' for 15 minutes before) or null to clear all reminders"),
48
+ repeat: z
49
+ .string()
50
+ .nullable()
51
+ .optional()
52
+ .describe("Recurrence rule in RRULE format (e.g., 'RRULE:FREQ=DAILY;INTERVAL=1' for daily, 'RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR' for Mon/Wed/Fri) or null to remove recurrence"),
53
+ items: z
54
+ .array(z.object({
55
+ title: z.string().describe("Subtask/checklist item text"),
56
+ status: z
57
+ .number()
58
+ .min(0)
59
+ .max(1)
60
+ .optional()
61
+ .describe("Status: 0=Unchecked (default), 1=Checked"),
62
+ }))
63
+ .optional()
64
+ .describe("Array of subtask/checklist items. Note: This replaces existing items when provided."),
65
+ },
66
+ }, async ({ taskId, title, content, dueDate, priority, tags, projectId, isAllDay, startDate, timeZone, reminders, repeat, items }) => {
67
+ try {
68
+ const client = await getClient();
69
+ const task = await client.updateTask(taskId, {
70
+ title,
71
+ content,
72
+ dueDate,
73
+ priority,
74
+ tags,
75
+ projectId,
76
+ isAllDay,
77
+ startDate,
78
+ timeZone,
79
+ reminders: reminders === null ? undefined : reminders,
80
+ repeatFlag: repeat === null ? "" : repeat,
81
+ items,
82
+ });
83
+ return {
84
+ content: [
85
+ {
86
+ type: "text",
87
+ text: JSON.stringify({
88
+ success: true,
89
+ message: `Task "${task.title}" updated successfully!`,
90
+ task: {
91
+ id: task.id,
92
+ title: task.title,
93
+ projectId: task.projectId,
94
+ content: task.content,
95
+ priority: task.priority,
96
+ dueDate: task.dueDate,
97
+ startDate: task.startDate,
98
+ isAllDay: task.isAllDay,
99
+ timeZone: task.timeZone,
100
+ reminders: task.reminders,
101
+ repeat: task.repeatFlag,
102
+ status: task.status,
103
+ tags: task.tags,
104
+ items: task.items?.map((item) => ({
105
+ id: item.id,
106
+ title: item.title,
107
+ status: item.status,
108
+ })),
109
+ },
110
+ }, null, 2),
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ catch (error) {
116
+ const errorMessage = error instanceof Error ? error.message : String(error);
117
+ return {
118
+ content: [
119
+ {
120
+ type: "text",
121
+ text: JSON.stringify({
122
+ success: false,
123
+ error: errorMessage,
124
+ }, null, 2),
125
+ },
126
+ ],
127
+ isError: true,
128
+ };
129
+ }
130
+ });
131
+ }
132
+ //# sourceMappingURL=updateTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateTask.js","sourceRoot":"","sources":["../../src/tools/updateTask.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ticktick-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "A Model Context Protocol (MCP) server for TickTick integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",