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,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: Get tasks due soon
5
+ *
6
+ * Returns tasks due within a specified number of days across all projects.
7
+ */
8
+ export declare function registerGetTasksDueSoonTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getTasksDueSoon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTasksDueSoon.d.ts","sourceRoot":"","sources":["../../src/tools/getTasksDueSoon.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,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAgIzC"}
@@ -0,0 +1,118 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: Get tasks due soon
4
+ *
5
+ * Returns tasks due within a specified number of days across all projects.
6
+ */
7
+ export function registerGetTasksDueSoonTool(server, getClient) {
8
+ server.registerTool("get_tasks_due_soon", {
9
+ description: "Get tasks that are due soon (within the next N days). Useful for finding urgent work across all projects.",
10
+ inputSchema: {
11
+ days: z.number().optional().describe("Number of days to look ahead (default: 7)"),
12
+ includeOverdue: z.boolean().optional().describe("Include past-due tasks (default: true)"),
13
+ projectId: z.string().optional().describe("Optional: limit to a specific project"),
14
+ status: z.enum(['active', 'all']).optional().describe("Task status filter (default: 'active')"),
15
+ },
16
+ }, async ({ days = 7, includeOverdue = true, projectId, status = 'active' }) => {
17
+ try {
18
+ const client = await getClient();
19
+ // Calculate date range
20
+ const now = new Date();
21
+ const futureDate = new Date();
22
+ futureDate.setDate(now.getDate() + days);
23
+ let allTasks = [];
24
+ if (projectId) {
25
+ // Fetch tasks from specific project
26
+ const data = await client.getProjectWithTasks(projectId);
27
+ allTasks = data.tasks.map(t => ({
28
+ ...t,
29
+ projectName: data.project.name,
30
+ }));
31
+ }
32
+ else {
33
+ // Fetch all projects and their tasks
34
+ const projects = await client.listProjects();
35
+ for (const project of projects) {
36
+ if (!project.closed) { // Skip archived projects
37
+ try {
38
+ const data = await client.getProjectWithTasks(project.id);
39
+ const tasksWithProject = data.tasks.map(t => ({
40
+ ...t,
41
+ projectName: project.name,
42
+ }));
43
+ allTasks = allTasks.concat(tasksWithProject);
44
+ }
45
+ catch {
46
+ // Skip projects that can't be fetched
47
+ continue;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ // Filter tasks
53
+ let filteredTasks = allTasks;
54
+ // Filter by status
55
+ if (status === 'active') {
56
+ filteredTasks = filteredTasks.filter(t => t.status === 0);
57
+ }
58
+ // Filter by due date
59
+ filteredTasks = filteredTasks.filter(t => {
60
+ if (!t.dueDate)
61
+ return false;
62
+ const dueDate = new Date(t.dueDate);
63
+ const isOverdue = dueDate < now;
64
+ const isDueSoon = dueDate >= now && dueDate <= futureDate;
65
+ if (includeOverdue && isOverdue)
66
+ return true;
67
+ if (isDueSoon)
68
+ return true;
69
+ return false;
70
+ });
71
+ // Sort by due date ascending (earliest first)
72
+ filteredTasks.sort((a, b) => {
73
+ const aDate = new Date(a.dueDate).getTime();
74
+ const bDate = new Date(b.dueDate).getTime();
75
+ return aDate - bDate;
76
+ });
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: JSON.stringify({
82
+ success: true,
83
+ count: filteredTasks.length,
84
+ daysAhead: days,
85
+ tasks: filteredTasks.map(t => ({
86
+ id: t.id,
87
+ title: t.title,
88
+ projectId: t.projectId,
89
+ projectName: t.projectName,
90
+ dueDate: t.dueDate,
91
+ priority: t.priority,
92
+ status: t.status,
93
+ content: t.content,
94
+ tags: t.tags,
95
+ })),
96
+ }, null, 2),
97
+ },
98
+ ],
99
+ };
100
+ }
101
+ catch (error) {
102
+ const errorMessage = error instanceof Error ? error.message : String(error);
103
+ return {
104
+ content: [
105
+ {
106
+ type: "text",
107
+ text: JSON.stringify({
108
+ success: false,
109
+ error: errorMessage,
110
+ }, null, 2),
111
+ },
112
+ ],
113
+ isError: true,
114
+ };
115
+ }
116
+ });
117
+ }
118
+ //# sourceMappingURL=getTasksDueSoon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTasksDueSoon.js","sourceRoot":"","sources":["../../src/tools/getTasksDueSoon.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 current user
5
+ *
6
+ * Returns information about the authenticated TickTick user.
7
+ */
8
+ export declare function registerGetUserTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=getUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUser.d.ts","sourceRoot":"","sources":["../../src/tools/getUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,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,QAsDzC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Tool: Get current user
3
+ *
4
+ * Returns information about the authenticated TickTick user.
5
+ */
6
+ export function registerGetUserTool(server, getClient) {
7
+ server.registerTool("get_user", {
8
+ description: "Get the current authenticated user's information from TickTick.",
9
+ inputSchema: {},
10
+ }, async () => {
11
+ try {
12
+ const client = await getClient();
13
+ const user = await client.getUser();
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: JSON.stringify({
19
+ success: true,
20
+ user: {
21
+ id: user.id,
22
+ username: user.username,
23
+ name: user.name,
24
+ },
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=getUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUser.js","sourceRoot":"","sources":["../../src/tools/getUser.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,SAAwC;IAExC,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEpC,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,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,IAAI,EAAE,IAAI,CAAC,IAAI;6BAChB;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: List all projects
5
+ *
6
+ * Returns all projects for the authenticated user.
7
+ */
8
+ export declare function registerListProjectsTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
9
+ //# sourceMappingURL=listProjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.d.ts","sourceRoot":"","sources":["../../src/tools/listProjects.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,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QAyFzC"}
@@ -0,0 +1,78 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Tool: List all projects
4
+ *
5
+ * Returns all projects for the authenticated user.
6
+ */
7
+ export function registerListProjectsTool(server, getClient) {
8
+ server.registerTool("list_projects", {
9
+ description: "List all projects in the user's TickTick account with optional filtering. By default, only returns active (non-archived) projects.",
10
+ inputSchema: {
11
+ includeArchived: z.boolean().optional().describe("Include archived/closed projects (default: false)"),
12
+ kind: z.enum(['TASK', 'NOTE']).optional().describe("Filter by project type"),
13
+ viewMode: z.enum(['list', 'kanban', 'timeline']).optional().describe("Filter by view mode"),
14
+ search: z.string().optional().describe("Text search in project name (case-insensitive)"),
15
+ limit: z.number().optional().describe("Maximum number of projects to return"),
16
+ },
17
+ }, async ({ includeArchived, kind, viewMode, search, limit }) => {
18
+ try {
19
+ const client = await getClient();
20
+ let projects = await client.listProjects();
21
+ // Filter out archived projects by default
22
+ if (!includeArchived) {
23
+ projects = projects.filter(p => !p.closed);
24
+ }
25
+ // Filter by kind
26
+ if (kind) {
27
+ projects = projects.filter(p => p.kind === kind);
28
+ }
29
+ // Filter by viewMode
30
+ if (viewMode) {
31
+ projects = projects.filter(p => p.viewMode === viewMode);
32
+ }
33
+ // Filter by search text
34
+ if (search) {
35
+ const searchLower = search.toLowerCase();
36
+ projects = projects.filter(p => p.name.toLowerCase().includes(searchLower));
37
+ }
38
+ // Apply limit
39
+ if (limit && limit > 0) {
40
+ projects = projects.slice(0, limit);
41
+ }
42
+ return {
43
+ content: [
44
+ {
45
+ type: "text",
46
+ text: JSON.stringify({
47
+ success: true,
48
+ count: projects.length,
49
+ projects: projects.map((p) => ({
50
+ id: p.id,
51
+ name: p.name,
52
+ color: p.color,
53
+ viewMode: p.viewMode,
54
+ closed: p.closed,
55
+ })),
56
+ }, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : String(error);
63
+ return {
64
+ content: [
65
+ {
66
+ type: "text",
67
+ text: JSON.stringify({
68
+ success: false,
69
+ error: errorMessage,
70
+ }, null, 2),
71
+ },
72
+ ],
73
+ isError: true,
74
+ };
75
+ }
76
+ });
77
+ }
78
+ //# sourceMappingURL=listProjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listProjects.js","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { TickTickClient } from "../sdk/client.js";
3
+ /**
4
+ * Tool: List tasks in project
5
+ *
6
+ * Returns all tasks in a specific project (without project metadata).
7
+ * This is a convenience tool that wraps getProjectWithTasks but only returns tasks.
8
+ */
9
+ export declare function registerListTasksInProjectTool(server: McpServer, getClient: () => Promise<TickTickClient>): void;
10
+ //# sourceMappingURL=listTasksInProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTasksInProject.d.ts","sourceRoot":"","sources":["../../src/tools/listTasksInProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,QA8LzC"}
@@ -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"}