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.
- package/dist/index.js +47 -1582
- package/dist/index.js.map +1 -1
- package/dist/tools/authExchangeCode.d.ts +9 -0
- package/dist/tools/authExchangeCode.d.ts.map +1 -0
- package/dist/tools/authExchangeCode.js +49 -0
- package/dist/tools/authExchangeCode.js.map +1 -0
- package/dist/tools/authGetAuthorizationUrl.d.ts +10 -0
- package/dist/tools/authGetAuthorizationUrl.d.ts.map +1 -0
- package/dist/tools/authGetAuthorizationUrl.js +53 -0
- package/dist/tools/authGetAuthorizationUrl.js.map +1 -0
- package/dist/tools/authLogout.d.ts +9 -0
- package/dist/tools/authLogout.d.ts.map +1 -0
- package/dist/tools/authLogout.js +43 -0
- package/dist/tools/authLogout.js.map +1 -0
- package/dist/tools/authRefreshToken.d.ts +9 -0
- package/dist/tools/authRefreshToken.d.ts.map +1 -0
- package/dist/tools/authRefreshToken.js +60 -0
- package/dist/tools/authRefreshToken.js.map +1 -0
- package/dist/tools/authStatus.d.ts +9 -0
- package/dist/tools/authStatus.d.ts.map +1 -0
- package/dist/tools/authStatus.js +63 -0
- package/dist/tools/authStatus.js.map +1 -0
- package/dist/tools/batchCreateTasks.d.ts +9 -0
- package/dist/tools/batchCreateTasks.d.ts.map +1 -0
- package/dist/tools/batchCreateTasks.js +75 -0
- package/dist/tools/batchCreateTasks.js.map +1 -0
- package/dist/tools/completeTask.d.ts +9 -0
- package/dist/tools/completeTask.d.ts.map +1 -0
- package/dist/tools/completeTask.js +47 -0
- package/dist/tools/completeTask.js.map +1 -0
- package/dist/tools/createProject.d.ts +9 -0
- package/dist/tools/createProject.d.ts.map +1 -0
- package/dist/tools/createProject.js +64 -0
- package/dist/tools/createProject.js.map +1 -0
- package/dist/tools/createTask.d.ts +9 -0
- package/dist/tools/createTask.d.ts.map +1 -0
- package/dist/tools/createTask.js +131 -0
- package/dist/tools/createTask.js.map +1 -0
- package/dist/tools/deleteProject.d.ts +9 -0
- package/dist/tools/deleteProject.d.ts.map +1 -0
- package/dist/tools/deleteProject.js +46 -0
- package/dist/tools/deleteProject.js.map +1 -0
- package/dist/tools/deleteTask.d.ts +9 -0
- package/dist/tools/deleteTask.d.ts.map +1 -0
- package/dist/tools/deleteTask.js +47 -0
- package/dist/tools/deleteTask.js.map +1 -0
- package/dist/tools/getHighPriorityTasks.d.ts +9 -0
- package/dist/tools/getHighPriorityTasks.d.ts.map +1 -0
- package/dist/tools/getHighPriorityTasks.js +114 -0
- package/dist/tools/getHighPriorityTasks.js.map +1 -0
- package/dist/tools/getProject.d.ts +9 -0
- package/dist/tools/getProject.d.ts.map +1 -0
- package/dist/tools/getProject.js +62 -0
- package/dist/tools/getProject.js.map +1 -0
- package/dist/tools/getProjectById.d.ts +9 -0
- package/dist/tools/getProjectById.d.ts.map +1 -0
- package/dist/tools/getProjectById.js +52 -0
- package/dist/tools/getProjectById.js.map +1 -0
- package/dist/tools/getTask.d.ts +9 -0
- package/dist/tools/getTask.d.ts.map +1 -0
- package/dist/tools/getTask.js +65 -0
- package/dist/tools/getTask.js.map +1 -0
- package/dist/tools/getTasksDueSoon.d.ts +9 -0
- package/dist/tools/getTasksDueSoon.d.ts.map +1 -0
- package/dist/tools/getTasksDueSoon.js +118 -0
- package/dist/tools/getTasksDueSoon.js.map +1 -0
- package/dist/tools/getUser.d.ts +9 -0
- package/dist/tools/getUser.d.ts.map +1 -0
- package/dist/tools/getUser.js +47 -0
- package/dist/tools/getUser.js.map +1 -0
- package/dist/tools/listProjects.d.ts +9 -0
- package/dist/tools/listProjects.d.ts.map +1 -0
- package/dist/tools/listProjects.js +78 -0
- package/dist/tools/listProjects.js.map +1 -0
- package/dist/tools/listTasksInProject.d.ts +10 -0
- package/dist/tools/listTasksInProject.d.ts.map +1 -0
- package/dist/tools/listTasksInProject.js +177 -0
- package/dist/tools/listTasksInProject.js.map +1 -0
- package/dist/tools/searchTasks.d.ts +9 -0
- package/dist/tools/searchTasks.d.ts.map +1 -0
- package/dist/tools/searchTasks.js +134 -0
- package/dist/tools/searchTasks.js.map +1 -0
- package/dist/tools/updateProject.d.ts +9 -0
- package/dist/tools/updateProject.d.ts.map +1 -0
- package/dist/tools/updateProject.js +66 -0
- package/dist/tools/updateProject.js.map +1 -0
- package/dist/tools/updateTask.d.ts +9 -0
- package/dist/tools/updateTask.d.ts.map +1 -0
- package/dist/tools/updateTask.js +132 -0
- package/dist/tools/updateTask.js.map +1 -0
- package/package.json +1 -1
|
@@ -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"}
|
|
@@ -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"}
|