ticktick-mcp 0.1.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 (115) hide show
  1. package/dist/index.js +47 -1096
  2. package/dist/index.js.map +1 -1
  3. package/dist/sdk/__tests__/client.test.d.ts +2 -0
  4. package/dist/sdk/__tests__/client.test.d.ts.map +1 -0
  5. package/dist/sdk/__tests__/client.test.js +251 -0
  6. package/dist/sdk/__tests__/client.test.js.map +1 -0
  7. package/dist/sdk/__tests__/errors.test.d.ts +2 -0
  8. package/dist/sdk/__tests__/errors.test.d.ts.map +1 -0
  9. package/dist/sdk/__tests__/errors.test.js +164 -0
  10. package/dist/sdk/__tests__/errors.test.js.map +1 -0
  11. package/dist/sdk/__tests__/types.test.d.ts +2 -0
  12. package/dist/sdk/__tests__/types.test.d.ts.map +1 -0
  13. package/dist/sdk/__tests__/types.test.js +134 -0
  14. package/dist/sdk/__tests__/types.test.js.map +1 -0
  15. package/dist/sdk/client.d.ts +10 -2
  16. package/dist/sdk/client.d.ts.map +1 -1
  17. package/dist/sdk/client.js +14 -3
  18. package/dist/sdk/client.js.map +1 -1
  19. package/dist/sdk/index.d.ts +5 -3
  20. package/dist/sdk/index.d.ts.map +1 -1
  21. package/dist/sdk/index.js +10 -2
  22. package/dist/sdk/index.js.map +1 -1
  23. package/dist/sdk/types.d.ts +215 -23
  24. package/dist/sdk/types.d.ts.map +1 -1
  25. package/dist/sdk/types.js +169 -6
  26. package/dist/sdk/types.js.map +1 -1
  27. package/dist/tools/authExchangeCode.d.ts +9 -0
  28. package/dist/tools/authExchangeCode.d.ts.map +1 -0
  29. package/dist/tools/authExchangeCode.js +49 -0
  30. package/dist/tools/authExchangeCode.js.map +1 -0
  31. package/dist/tools/authGetAuthorizationUrl.d.ts +10 -0
  32. package/dist/tools/authGetAuthorizationUrl.d.ts.map +1 -0
  33. package/dist/tools/authGetAuthorizationUrl.js +53 -0
  34. package/dist/tools/authGetAuthorizationUrl.js.map +1 -0
  35. package/dist/tools/authLogout.d.ts +9 -0
  36. package/dist/tools/authLogout.d.ts.map +1 -0
  37. package/dist/tools/authLogout.js +43 -0
  38. package/dist/tools/authLogout.js.map +1 -0
  39. package/dist/tools/authRefreshToken.d.ts +9 -0
  40. package/dist/tools/authRefreshToken.d.ts.map +1 -0
  41. package/dist/tools/authRefreshToken.js +60 -0
  42. package/dist/tools/authRefreshToken.js.map +1 -0
  43. package/dist/tools/authStatus.d.ts +9 -0
  44. package/dist/tools/authStatus.d.ts.map +1 -0
  45. package/dist/tools/authStatus.js +63 -0
  46. package/dist/tools/authStatus.js.map +1 -0
  47. package/dist/tools/batchCreateTasks.d.ts +9 -0
  48. package/dist/tools/batchCreateTasks.d.ts.map +1 -0
  49. package/dist/tools/batchCreateTasks.js +75 -0
  50. package/dist/tools/batchCreateTasks.js.map +1 -0
  51. package/dist/tools/completeTask.d.ts +9 -0
  52. package/dist/tools/completeTask.d.ts.map +1 -0
  53. package/dist/tools/completeTask.js +47 -0
  54. package/dist/tools/completeTask.js.map +1 -0
  55. package/dist/tools/createProject.d.ts +9 -0
  56. package/dist/tools/createProject.d.ts.map +1 -0
  57. package/dist/tools/createProject.js +64 -0
  58. package/dist/tools/createProject.js.map +1 -0
  59. package/dist/tools/createTask.d.ts +9 -0
  60. package/dist/tools/createTask.d.ts.map +1 -0
  61. package/dist/tools/createTask.js +131 -0
  62. package/dist/tools/createTask.js.map +1 -0
  63. package/dist/tools/deleteProject.d.ts +9 -0
  64. package/dist/tools/deleteProject.d.ts.map +1 -0
  65. package/dist/tools/deleteProject.js +46 -0
  66. package/dist/tools/deleteProject.js.map +1 -0
  67. package/dist/tools/deleteTask.d.ts +9 -0
  68. package/dist/tools/deleteTask.d.ts.map +1 -0
  69. package/dist/tools/deleteTask.js +47 -0
  70. package/dist/tools/deleteTask.js.map +1 -0
  71. package/dist/tools/getHighPriorityTasks.d.ts +9 -0
  72. package/dist/tools/getHighPriorityTasks.d.ts.map +1 -0
  73. package/dist/tools/getHighPriorityTasks.js +114 -0
  74. package/dist/tools/getHighPriorityTasks.js.map +1 -0
  75. package/dist/tools/getProject.d.ts +9 -0
  76. package/dist/tools/getProject.d.ts.map +1 -0
  77. package/dist/tools/getProject.js +62 -0
  78. package/dist/tools/getProject.js.map +1 -0
  79. package/dist/tools/getProjectById.d.ts +9 -0
  80. package/dist/tools/getProjectById.d.ts.map +1 -0
  81. package/dist/tools/getProjectById.js +52 -0
  82. package/dist/tools/getProjectById.js.map +1 -0
  83. package/dist/tools/getTask.d.ts +9 -0
  84. package/dist/tools/getTask.d.ts.map +1 -0
  85. package/dist/tools/getTask.js +65 -0
  86. package/dist/tools/getTask.js.map +1 -0
  87. package/dist/tools/getTasksDueSoon.d.ts +9 -0
  88. package/dist/tools/getTasksDueSoon.d.ts.map +1 -0
  89. package/dist/tools/getTasksDueSoon.js +118 -0
  90. package/dist/tools/getTasksDueSoon.js.map +1 -0
  91. package/dist/tools/getUser.d.ts +9 -0
  92. package/dist/tools/getUser.d.ts.map +1 -0
  93. package/dist/tools/getUser.js +47 -0
  94. package/dist/tools/getUser.js.map +1 -0
  95. package/dist/tools/listProjects.d.ts +9 -0
  96. package/dist/tools/listProjects.d.ts.map +1 -0
  97. package/dist/tools/listProjects.js +78 -0
  98. package/dist/tools/listProjects.js.map +1 -0
  99. package/dist/tools/listTasksInProject.d.ts +10 -0
  100. package/dist/tools/listTasksInProject.d.ts.map +1 -0
  101. package/dist/tools/listTasksInProject.js +177 -0
  102. package/dist/tools/listTasksInProject.js.map +1 -0
  103. package/dist/tools/searchTasks.d.ts +9 -0
  104. package/dist/tools/searchTasks.d.ts.map +1 -0
  105. package/dist/tools/searchTasks.js +134 -0
  106. package/dist/tools/searchTasks.js.map +1 -0
  107. package/dist/tools/updateProject.d.ts +9 -0
  108. package/dist/tools/updateProject.d.ts.map +1 -0
  109. package/dist/tools/updateProject.js +66 -0
  110. package/dist/tools/updateProject.js.map +1 -0
  111. package/dist/tools/updateTask.d.ts +9 -0
  112. package/dist/tools/updateTask.d.ts.map +1 -0
  113. package/dist/tools/updateTask.js +132 -0
  114. package/dist/tools/updateTask.js.map +1 -0
  115. package/package.json +14 -4
@@ -0,0 +1,131 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Create task
4
+ *
5
+ * Creates a new task.
6
+ */
7
+ export function registerCreateTaskTool(server, getClient) {
8
+ server.registerTool("create_task", {
9
+ description: "Create a new task in TickTick.",
10
+ inputSchema: {
11
+ title: z.string().describe("The title of the task"),
12
+ projectId: z
13
+ .string()
14
+ .optional()
15
+ .describe("The project ID (defaults to inbox if not specified)"),
16
+ content: z.string().optional().describe("Task description/notes"),
17
+ dueDate: z
18
+ .string()
19
+ .optional()
20
+ .describe("Due date in ISO 8601 format (e.g., 2024-01-15T17:00:00+0000)"),
21
+ priority: z
22
+ .number()
23
+ .min(0)
24
+ .max(5)
25
+ .optional()
26
+ .describe("Priority: 0=None, 1=Low, 3=Medium, 5=High"),
27
+ tags: z.array(z.string()).optional().describe("Array of tag names"),
28
+ isAllDay: z
29
+ .boolean()
30
+ .optional()
31
+ .describe("Whether this is an all-day task (no specific time)"),
32
+ startDate: z
33
+ .string()
34
+ .optional()
35
+ .describe("Start date in ISO 8601 format (e.g., 2024-01-15T09:00:00+0000)"),
36
+ timeZone: z
37
+ .string()
38
+ .optional()
39
+ .describe("IANA timezone (e.g., 'America/New_York', 'Europe/London')"),
40
+ reminders: z
41
+ .array(z.string())
42
+ .optional()
43
+ .describe("Array of reminder strings in iCalendar TRIGGER format (e.g., 'TRIGGER:P0DT9H0M0S' for 9:00 AM, 'TRIGGER:-PT15M' for 15 minutes before)"),
44
+ repeat: z
45
+ .string()
46
+ .optional()
47
+ .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)"),
48
+ items: z
49
+ .array(z.object({
50
+ title: z.string().describe("Subtask/checklist item text"),
51
+ status: z
52
+ .number()
53
+ .min(0)
54
+ .max(1)
55
+ .optional()
56
+ .describe("Status: 0=Unchecked (default), 1=Checked"),
57
+ }))
58
+ .optional()
59
+ .describe("Array of subtask/checklist items"),
60
+ },
61
+ }, async ({ title, projectId, content, dueDate, priority, tags, isAllDay, startDate, timeZone, reminders, repeat, items }) => {
62
+ try {
63
+ const client = await getClient();
64
+ const task = await client.createTask({
65
+ title,
66
+ projectId,
67
+ content,
68
+ dueDate,
69
+ priority,
70
+ isAllDay,
71
+ startDate,
72
+ timeZone,
73
+ reminders,
74
+ repeatFlag: repeat,
75
+ items,
76
+ });
77
+ // If tags are provided, update the task with tags
78
+ let finalTask = task;
79
+ if (tags && tags.length > 0) {
80
+ finalTask = await client.updateTask(task.id, { tags });
81
+ }
82
+ return {
83
+ content: [
84
+ {
85
+ type: "text",
86
+ text: JSON.stringify({
87
+ success: true,
88
+ message: `Task "${finalTask.title}" created successfully!`,
89
+ task: {
90
+ id: finalTask.id,
91
+ title: finalTask.title,
92
+ projectId: finalTask.projectId,
93
+ content: finalTask.content,
94
+ priority: finalTask.priority,
95
+ dueDate: finalTask.dueDate,
96
+ startDate: finalTask.startDate,
97
+ isAllDay: finalTask.isAllDay,
98
+ timeZone: finalTask.timeZone,
99
+ reminders: finalTask.reminders,
100
+ repeat: finalTask.repeatFlag,
101
+ status: finalTask.status,
102
+ tags: finalTask.tags,
103
+ items: finalTask.items?.map((item) => ({
104
+ id: item.id,
105
+ title: item.title,
106
+ status: item.status,
107
+ })),
108
+ },
109
+ }, null, 2),
110
+ },
111
+ ],
112
+ };
113
+ }
114
+ catch (error) {
115
+ const errorMessage = error instanceof Error ? error.message : String(error);
116
+ return {
117
+ content: [
118
+ {
119
+ type: "text",
120
+ text: JSON.stringify({
121
+ success: false,
122
+ error: errorMessage,
123
+ }, null, 2),
124
+ },
125
+ ],
126
+ isError: true,
127
+ };
128
+ }
129
+ });
130
+ }
131
+ //# sourceMappingURL=createTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTask.js","sourceRoot":"","sources":["../../src/tools/createTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,gCAAgC;QAC7C,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnD,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,qDAAqD,CAAC;YAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACjE,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8DAA8D,CAAC;YAC3E,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,2CAA2C,CAAC;YACxD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnE,QAAQ,EAAE,CAAC;iBACR,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;YACjE,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gEAAgE,CAAC;YAC7E,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2DAA2D,CAAC;YACxE,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,wIAAwI,CAAC;YACrJ,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,qIAAqI,CAAC;YAClJ,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACzD,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,GAAG,CAAC,CAAC,CAAC;qBACN,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,EAAE;qBACV,QAAQ,CAAC,0CAA0C,CAAC;aACxD,CAAC,CACH;iBACA,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;SAChD;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACxH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;gBACnC,KAAK;gBACL,SAAS;gBACT,OAAO;gBACP,OAAO;gBACP,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,QAAQ;gBACR,SAAS;gBACT,UAAU,EAAE,MAAM;gBAClB,KAAK;aACN,CAAC,CAAC;YAEH,kDAAkD;YAClD,IAAI,SAAS,GAAG,IAAI,CAAC;YACrB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,SAAS,SAAS,CAAC,KAAK,yBAAyB;4BAC1D,IAAI,EAAE;gCACJ,EAAE,EAAE,SAAS,CAAC,EAAE;gCAChB,KAAK,EAAE,SAAS,CAAC,KAAK;gCACtB,SAAS,EAAE,SAAS,CAAC,SAAS;gCAC9B,OAAO,EAAE,SAAS,CAAC,OAAO;gCAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;gCAC5B,OAAO,EAAE,SAAS,CAAC,OAAO;gCAC1B,SAAS,EAAE,SAAS,CAAC,SAAS;gCAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;gCAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;gCAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;gCAC9B,MAAM,EAAE,SAAS,CAAC,UAAU;gCAC5B,MAAM,EAAE,SAAS,CAAC,MAAM;gCACxB,IAAI,EAAE,SAAS,CAAC,IAAI;gCACpB,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oCACrC,EAAE,EAAE,IAAI,CAAC,EAAE;oCACX,KAAK,EAAE,IAAI,CAAC,KAAK;oCACjB,MAAM,EAAE,IAAI,CAAC,MAAM;iCACpB,CAAC,CAAC;6BACJ;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: Delete project
5
+ *
6
+ * Deletes a project.
7
+ */
8
+ export declare function registerDeleteProjectTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=deleteProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteProject.d.ts","sourceRoot":"","sources":["../../src/tools/deleteProject.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,QAoDzC"}
@@ -0,0 +1,46 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Delete project
4
+ *
5
+ * Deletes a project.
6
+ */
7
+ export function registerDeleteProjectTool(server, getClient) {
8
+ server.registerTool("delete_project", {
9
+ description: "Delete a project from TickTick.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The ID of the project to delete"),
12
+ },
13
+ }, async ({ projectId }) => {
14
+ try {
15
+ const client = await getClient();
16
+ await client.deleteProject(projectId);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({
22
+ success: true,
23
+ message: "Project deleted successfully!",
24
+ }, null, 2),
25
+ },
26
+ ],
27
+ };
28
+ }
29
+ catch (error) {
30
+ const errorMessage = error instanceof Error ? error.message : String(error);
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: JSON.stringify({
36
+ success: false,
37
+ error: errorMessage,
38
+ }, null, 2),
39
+ },
40
+ ],
41
+ isError: true,
42
+ };
43
+ }
44
+ });
45
+ }
46
+ //# sourceMappingURL=deleteProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteProject.js","sourceRoot":"","sources":["../../src/tools/deleteProject.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,iCAAiC;QAC9C,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAClE;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAEtC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,+BAA+B;yBACzC,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: Delete task
5
+ *
6
+ * Deletes a task.
7
+ */
8
+ export declare function registerDeleteTaskTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=deleteTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteTask.d.ts","sourceRoot":"","sources":["../../src/tools/deleteTask.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,QAqDzC"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Delete task
4
+ *
5
+ * Deletes a task.
6
+ */
7
+ export function registerDeleteTaskTool(server, getClient) {
8
+ server.registerTool("delete_task", {
9
+ description: "Delete a task from TickTick.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The project ID containing the task"),
12
+ taskId: z.string().describe("The ID of the task to delete"),
13
+ },
14
+ }, async ({ projectId, taskId }) => {
15
+ try {
16
+ const client = await getClient();
17
+ await client.deleteTask(projectId, taskId);
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: JSON.stringify({
23
+ success: true,
24
+ message: "Task deleted successfully!",
25
+ }, null, 2),
26
+ },
27
+ ],
28
+ };
29
+ }
30
+ catch (error) {
31
+ const errorMessage = error instanceof Error ? error.message : String(error);
32
+ return {
33
+ content: [
34
+ {
35
+ type: "text",
36
+ text: JSON.stringify({
37
+ success: false,
38
+ error: errorMessage,
39
+ }, null, 2),
40
+ },
41
+ ],
42
+ isError: true,
43
+ };
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=deleteTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteTask.js","sourceRoot":"","sources":["../../src/tools/deleteTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC5D;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,4BAA4B;yBACtC,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: Get high priority tasks
5
+ *
6
+ * Returns high priority tasks across all projects.
7
+ */
8
+ export declare function registerGetHighPriorityTasksTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getHighPriorityTasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHighPriorityTasks.d.ts","sourceRoot":"","sources":["../../src/tools/getHighPriorityTasks.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,gCAAgC,CAC9C,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA2HzC"}
@@ -0,0 +1,114 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Get high priority tasks
4
+ *
5
+ * Returns high priority tasks across all projects.
6
+ */
7
+ export function registerGetHighPriorityTasksTool(server, getClient) {
8
+ server.registerTool("get_high_priority_tasks", {
9
+ description: "Get high priority tasks across all projects. Useful for finding the most important work.",
10
+ inputSchema: {
11
+ minPriority: z.number().optional().describe("Minimum priority level: 0=None, 1=Low, 3=Medium, 5=High (default: 3)"),
12
+ projectId: z.string().optional().describe("Optional: limit to a specific project"),
13
+ includeCompleted: z.boolean().optional().describe("Include completed tasks (default: false)"),
14
+ limit: z.number().optional().describe("Maximum results to return (default: 10)"),
15
+ },
16
+ }, async ({ minPriority = 3, projectId, includeCompleted = false, limit = 10 }) => {
17
+ try {
18
+ const client = await getClient();
19
+ let allTasks = [];
20
+ if (projectId) {
21
+ // Fetch tasks from specific project
22
+ const data = await client.getProjectWithTasks(projectId);
23
+ allTasks = data.tasks.map(t => ({
24
+ ...t,
25
+ projectName: data.project.name,
26
+ }));
27
+ }
28
+ else {
29
+ // Fetch all projects and their tasks
30
+ const projects = await client.listProjects();
31
+ for (const project of projects) {
32
+ if (!project.closed) {
33
+ try {
34
+ const data = await client.getProjectWithTasks(project.id);
35
+ const tasksWithProject = data.tasks.map(t => ({
36
+ ...t,
37
+ projectName: project.name,
38
+ }));
39
+ allTasks = allTasks.concat(tasksWithProject);
40
+ }
41
+ catch {
42
+ continue;
43
+ }
44
+ }
45
+ }
46
+ }
47
+ // Filter tasks
48
+ let filteredTasks = allTasks;
49
+ // Filter by completion status
50
+ if (!includeCompleted) {
51
+ filteredTasks = filteredTasks.filter(t => t.status === 0);
52
+ }
53
+ // Filter by priority
54
+ filteredTasks = filteredTasks.filter(t => t.priority >= minPriority);
55
+ // Sort by priority desc (high first), then by dueDate asc (earliest first)
56
+ filteredTasks.sort((a, b) => {
57
+ // First sort by priority (descending)
58
+ if (a.priority !== b.priority) {
59
+ return b.priority - a.priority;
60
+ }
61
+ // Then by due date (ascending, nulls last)
62
+ if (a.dueDate && b.dueDate) {
63
+ return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime();
64
+ }
65
+ if (a.dueDate)
66
+ return -1;
67
+ if (b.dueDate)
68
+ return 1;
69
+ return 0;
70
+ });
71
+ // Apply limit
72
+ filteredTasks = filteredTasks.slice(0, limit);
73
+ return {
74
+ content: [
75
+ {
76
+ type: "text",
77
+ text: JSON.stringify({
78
+ success: true,
79
+ count: filteredTasks.length,
80
+ minPriority,
81
+ tasks: filteredTasks.map(t => ({
82
+ id: t.id,
83
+ title: t.title,
84
+ projectId: t.projectId,
85
+ projectName: t.projectName,
86
+ dueDate: t.dueDate,
87
+ priority: t.priority,
88
+ status: t.status,
89
+ content: t.content,
90
+ tags: t.tags,
91
+ })),
92
+ }, null, 2),
93
+ },
94
+ ],
95
+ };
96
+ }
97
+ catch (error) {
98
+ const errorMessage = error instanceof Error ? error.message : String(error);
99
+ return {
100
+ content: [
101
+ {
102
+ type: "text",
103
+ text: JSON.stringify({
104
+ success: false,
105
+ error: errorMessage,
106
+ }, null, 2),
107
+ },
108
+ ],
109
+ isError: true,
110
+ };
111
+ }
112
+ });
113
+ }
114
+ //# sourceMappingURL=getHighPriorityTasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHighPriorityTasks.js","sourceRoot":"","sources":["../../src/tools/getHighPriorityTasks.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: Get project with tasks
5
+ *
6
+ * Returns a specific project and all its tasks.
7
+ */
8
+ export declare function registerGetProjectTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.d.ts","sourceRoot":"","sources":["../../src/tools/getProject.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,QAoEzC"}
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Get project with tasks
4
+ *
5
+ * Returns a specific project and all its tasks.
6
+ */
7
+ export function registerGetProjectTool(server, getClient) {
8
+ server.registerTool("get_project", {
9
+ description: "Get a specific project and all its tasks.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The ID of the project to retrieve"),
12
+ },
13
+ }, async ({ projectId }) => {
14
+ try {
15
+ const client = await getClient();
16
+ const data = await client.getProjectWithTasks(projectId);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({
22
+ success: true,
23
+ project: {
24
+ id: data.project.id,
25
+ name: data.project.name,
26
+ color: data.project.color,
27
+ viewMode: data.project.viewMode,
28
+ closed: data.project.closed,
29
+ },
30
+ taskCount: data.tasks.length,
31
+ tasks: data.tasks.map((t) => ({
32
+ id: t.id,
33
+ title: t.title,
34
+ content: t.content,
35
+ priority: t.priority,
36
+ status: t.status,
37
+ dueDate: t.dueDate,
38
+ tags: t.tags,
39
+ })),
40
+ }, null, 2),
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ catch (error) {
46
+ const errorMessage = error instanceof Error ? error.message : String(error);
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: JSON.stringify({
52
+ success: false,
53
+ error: errorMessage,
54
+ }, null, 2),
55
+ },
56
+ ],
57
+ isError: true,
58
+ };
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=getProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProject.js","sourceRoot":"","sources":["../../src/tools/getProject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACpE;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE;gCACP,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;gCACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gCACvB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gCACzB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gCAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;6BAC5B;4BACD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;4BAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;gCACR,KAAK,EAAE,CAAC,CAAC,KAAK;gCACd,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gCACpB,MAAM,EAAE,CAAC,CAAC,MAAM;gCAChB,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,IAAI,EAAE,CAAC,CAAC,IAAI;6BACb,CAAC,CAAC;yBACJ,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: Get project by ID (metadata only)
5
+ *
6
+ * Returns a specific project's metadata without its tasks.
7
+ */
8
+ export declare function registerGetProjectByIdTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getProjectById.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectById.d.ts","sourceRoot":"","sources":["../../src/tools/getProjectById.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,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA0DzC"}
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Get project by ID (metadata only)
4
+ *
5
+ * Returns a specific project's metadata without its tasks.
6
+ */
7
+ export function registerGetProjectByIdTool(server, getClient) {
8
+ server.registerTool("get_project_by_id", {
9
+ description: "Get a specific project's metadata by ID (without tasks). Use this when you only need project info, not its tasks.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The ID of the project to retrieve"),
12
+ },
13
+ }, async ({ projectId }) => {
14
+ try {
15
+ const client = await getClient();
16
+ const project = await client.getProject(projectId);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: JSON.stringify({
22
+ success: true,
23
+ project: {
24
+ id: project.id,
25
+ name: project.name,
26
+ color: project.color,
27
+ viewMode: project.viewMode,
28
+ closed: project.closed,
29
+ },
30
+ }, null, 2),
31
+ },
32
+ ],
33
+ };
34
+ }
35
+ catch (error) {
36
+ const errorMessage = error instanceof Error ? error.message : String(error);
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: JSON.stringify({
42
+ success: false,
43
+ error: errorMessage,
44
+ }, null, 2),
45
+ },
46
+ ],
47
+ isError: true,
48
+ };
49
+ }
50
+ });
51
+ }
52
+ //# sourceMappingURL=getProjectById.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectById.js","sourceRoot":"","sources":["../../src/tools/getProjectById.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,mHAAmH;QAChI,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACpE;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEnD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,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: Get task
5
+ *
6
+ * Gets a specific task by ID.
7
+ */
8
+ export declare function registerGetTaskTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTask.d.ts","sourceRoot":"","sources":["../../src/tools/getTask.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,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAuEzC"}
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Get task
4
+ *
5
+ * Gets a specific task by ID.
6
+ */
7
+ export function registerGetTaskTool(server, getClient) {
8
+ server.registerTool("get_task", {
9
+ description: "Get a specific task from TickTick.",
10
+ inputSchema: {
11
+ projectId: z.string().describe("The project ID containing the task"),
12
+ taskId: z.string().describe("The ID of the task to retrieve"),
13
+ },
14
+ }, async ({ projectId, taskId }) => {
15
+ try {
16
+ const client = await getClient();
17
+ const task = await client.getTask(projectId, taskId);
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: JSON.stringify({
23
+ success: true,
24
+ task: {
25
+ id: task.id,
26
+ title: task.title,
27
+ projectId: task.projectId,
28
+ content: task.content,
29
+ priority: task.priority,
30
+ status: task.status,
31
+ dueDate: task.dueDate,
32
+ startDate: task.startDate,
33
+ isAllDay: task.isAllDay,
34
+ tags: task.tags,
35
+ items: task.items.map((item) => ({
36
+ id: item.id,
37
+ title: item.title,
38
+ status: item.status,
39
+ })),
40
+ createdTime: task.createdTime,
41
+ modifiedTime: task.modifiedTime,
42
+ },
43
+ }, null, 2),
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ catch (error) {
49
+ const errorMessage = error instanceof Error ? error.message : String(error);
50
+ return {
51
+ content: [
52
+ {
53
+ type: "text",
54
+ text: JSON.stringify({
55
+ success: false,
56
+ error: errorMessage,
57
+ }, null, 2),
58
+ },
59
+ ],
60
+ isError: true,
61
+ };
62
+ }
63
+ });
64
+ }
65
+ //# sourceMappingURL=getTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTask.js","sourceRoot":"","sources":["../../src/tools/getTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAC9D;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAErD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,OAAO,EAAE,IAAI;4BACb,IAAI,EAAE;gCACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gCACX,KAAK,EAAE,IAAI,CAAC,KAAK;gCACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gCACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gCACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gCACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gCACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oCAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;oCACX,KAAK,EAAE,IAAI,CAAC,KAAK;oCACjB,MAAM,EAAE,IAAI,CAAC,MAAM;iCACpB,CAAC,CAAC;gCACH,WAAW,EAAE,IAAI,CAAC,WAAW;gCAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;6BAChC;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"}