@doist/todoist-ai 2.0.0 → 2.1.0
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/README.md +7 -0
- package/dist/index.d.ts +29 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -48
- package/dist/main.js +6 -11
- package/dist/mcp-helpers.d.ts +2 -2
- package/dist/mcp-helpers.d.ts.map +1 -1
- package/dist/mcp-helpers.js +1 -4
- package/dist/mcp-server.d.ts +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +34 -36
- package/dist/todoist-tool.js +1 -2
- package/dist/tool-helpers.d.ts +13 -1
- package/dist/tool-helpers.d.ts.map +1 -1
- package/dist/tool-helpers.js +43 -22
- package/dist/tool-helpers.test.js +55 -14
- package/dist/tools/__tests__/delete-one.test.d.ts +2 -0
- package/dist/tools/__tests__/delete-one.test.d.ts.map +1 -0
- package/dist/tools/__tests__/delete-one.test.js +90 -0
- package/dist/tools/__tests__/overview.test.d.ts +2 -0
- package/dist/tools/__tests__/overview.test.d.ts.map +1 -0
- package/dist/tools/__tests__/overview.test.js +163 -0
- package/dist/tools/__tests__/projects-list.test.d.ts +2 -0
- package/dist/tools/__tests__/projects-list.test.d.ts.map +1 -0
- package/dist/tools/__tests__/projects-list.test.js +140 -0
- package/dist/tools/__tests__/projects-manage.test.d.ts +2 -0
- package/dist/tools/__tests__/projects-manage.test.d.ts.map +1 -0
- package/dist/tools/__tests__/projects-manage.test.js +106 -0
- package/dist/tools/__tests__/sections-manage.test.d.ts +2 -0
- package/dist/tools/__tests__/sections-manage.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sections-manage.test.js +138 -0
- package/dist/tools/__tests__/sections-search.test.d.ts +2 -0
- package/dist/tools/__tests__/sections-search.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sections-search.test.js +235 -0
- package/dist/tools/__tests__/tasks-add-multiple.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-add-multiple.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-add-multiple.test.js +274 -0
- package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-complete-multiple.test.js +146 -0
- package/dist/tools/__tests__/tasks-list-by-date.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-list-by-date.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-list-by-date.test.js +192 -0
- package/dist/tools/__tests__/tasks-list-completed.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-list-completed.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-list-completed.test.js +154 -0
- package/dist/tools/__tests__/tasks-list-for-container.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-list-for-container.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-list-for-container.test.js +232 -0
- package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-organize-multiple.test.js +245 -0
- package/dist/tools/__tests__/tasks-search.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-search.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-search.test.js +106 -0
- package/dist/tools/__tests__/tasks-update-one.test.d.ts +2 -0
- package/dist/tools/__tests__/tasks-update-one.test.d.ts.map +1 -0
- package/dist/tools/__tests__/tasks-update-one.test.js +251 -0
- package/dist/tools/delete-one.js +4 -7
- package/dist/tools/overview.js +8 -11
- package/dist/tools/projects-list.js +7 -10
- package/dist/tools/projects-manage.js +6 -9
- package/dist/tools/sections-manage.js +7 -10
- package/dist/tools/sections-search.js +4 -7
- package/dist/tools/tasks-add-multiple.d.ts +5 -0
- package/dist/tools/tasks-add-multiple.d.ts.map +1 -1
- package/dist/tools/tasks-add-multiple.js +37 -17
- package/dist/tools/tasks-complete-multiple.js +3 -6
- package/dist/tools/tasks-list-by-date.d.ts +1 -0
- package/dist/tools/tasks-list-by-date.d.ts.map +1 -1
- package/dist/tools/tasks-list-by-date.js +12 -15
- package/dist/tools/tasks-list-completed.d.ts +2 -1
- package/dist/tools/tasks-list-completed.d.ts.map +1 -1
- package/dist/tools/tasks-list-completed.js +13 -16
- package/dist/tools/tasks-list-for-container.d.ts +1 -0
- package/dist/tools/tasks-list-for-container.d.ts.map +1 -1
- package/dist/tools/tasks-list-for-container.js +8 -11
- package/dist/tools/tasks-organize-multiple.d.ts.map +1 -1
- package/dist/tools/tasks-organize-multiple.js +20 -14
- package/dist/tools/tasks-search.d.ts +1 -0
- package/dist/tools/tasks-search.d.ts.map +1 -1
- package/dist/tools/tasks-search.js +7 -10
- package/dist/tools/tasks-update-one.d.ts +4 -2
- package/dist/tools/tasks-update-one.d.ts.map +1 -1
- package/dist/tools/tasks-update-one.js +45 -15
- package/dist/tools/test-helpers.d.ts +80 -0
- package/dist/tools/test-helpers.d.ts.map +1 -0
- package/dist/tools/test-helpers.js +140 -0
- package/dist/utils/duration-parser.d.ts +36 -0
- package/dist/utils/duration-parser.d.ts.map +1 -0
- package/dist/utils/duration-parser.js +96 -0
- package/dist/utils/duration-parser.test.d.ts +2 -0
- package/dist/utils/duration-parser.test.d.ts.map +1 -0
- package/dist/utils/duration-parser.test.js +147 -0
- package/package.json +6 -2
- package/scripts/test-executable.cjs +69 -0
package/README.md
CHANGED
|
@@ -71,6 +71,13 @@ See [docs/mcp-server.md](docs/mcp-server.md) for full instructions on setting up
|
|
|
71
71
|
|
|
72
72
|
See [docs/dev-setup.md](docs/dev-setup.md) for full instructions on setting up this repository locally for development and contributing.
|
|
73
73
|
|
|
74
|
+
### Quick Start
|
|
75
|
+
|
|
76
|
+
After cloning and setting up the repository:
|
|
77
|
+
|
|
78
|
+
- `npm start` - Build and run the MCP inspector for testing
|
|
79
|
+
- `npm run dev` - Development mode with auto-rebuild and restart
|
|
80
|
+
|
|
74
81
|
## Releasing
|
|
75
82
|
|
|
76
83
|
This project uses [release-please](https://github.com/googleapis/release-please) to automate version management and package publishing.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { getMcpServer } from './mcp-server';
|
|
2
|
-
import { deleteOne } from './tools/delete-one';
|
|
3
|
-
import { projectsList } from './tools/projects-list';
|
|
4
|
-
import { projectsManage } from './tools/projects-manage';
|
|
5
|
-
import { sectionsManage } from './tools/sections-manage';
|
|
6
|
-
import { sectionsSearch } from './tools/sections-search';
|
|
7
|
-
import { overview } from './tools/overview';
|
|
8
|
-
import { tasksAddMultiple } from './tools/tasks-add-multiple';
|
|
9
|
-
import { tasksCompleteMultiple } from './tools/tasks-complete-multiple';
|
|
10
|
-
import { tasksListByDate } from './tools/tasks-list-by-date';
|
|
11
|
-
import { tasksListCompleted } from './tools/tasks-list-completed';
|
|
12
|
-
import { tasksListForContainer } from './tools/tasks-list-for-container';
|
|
13
|
-
import { tasksOrganizeMultiple } from './tools/tasks-organize-multiple';
|
|
14
|
-
import { tasksSearch } from './tools/tasks-search';
|
|
15
|
-
import { tasksUpdateOne } from './tools/tasks-update-one';
|
|
1
|
+
import { getMcpServer } from './mcp-server.js';
|
|
2
|
+
import { deleteOne } from './tools/delete-one.js';
|
|
3
|
+
import { projectsList } from './tools/projects-list.js';
|
|
4
|
+
import { projectsManage } from './tools/projects-manage.js';
|
|
5
|
+
import { sectionsManage } from './tools/sections-manage.js';
|
|
6
|
+
import { sectionsSearch } from './tools/sections-search.js';
|
|
7
|
+
import { overview } from './tools/overview.js';
|
|
8
|
+
import { tasksAddMultiple } from './tools/tasks-add-multiple.js';
|
|
9
|
+
import { tasksCompleteMultiple } from './tools/tasks-complete-multiple.js';
|
|
10
|
+
import { tasksListByDate } from './tools/tasks-list-by-date.js';
|
|
11
|
+
import { tasksListCompleted } from './tools/tasks-list-completed.js';
|
|
12
|
+
import { tasksListForContainer } from './tools/tasks-list-for-container.js';
|
|
13
|
+
import { tasksOrganizeMultiple } from './tools/tasks-organize-multiple.js';
|
|
14
|
+
import { tasksSearch } from './tools/tasks-search.js';
|
|
15
|
+
import { tasksUpdateOne } from './tools/tasks-update-one.js';
|
|
16
16
|
declare const tools: {
|
|
17
17
|
projectsList: {
|
|
18
18
|
name: string;
|
|
@@ -136,6 +136,7 @@ declare const tools: {
|
|
|
136
136
|
sectionId: string | null;
|
|
137
137
|
parentId: string | null;
|
|
138
138
|
labels: string[];
|
|
139
|
+
duration: string | null;
|
|
139
140
|
}[];
|
|
140
141
|
nextCursor: string | null;
|
|
141
142
|
}>;
|
|
@@ -161,9 +162,9 @@ declare const tools: {
|
|
|
161
162
|
until: string;
|
|
162
163
|
parentId?: string | undefined;
|
|
163
164
|
workspaceId?: string | undefined;
|
|
164
|
-
cursor?: string | undefined;
|
|
165
165
|
projectId?: string | undefined;
|
|
166
166
|
sectionId?: string | undefined;
|
|
167
|
+
cursor?: string | undefined;
|
|
167
168
|
}, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
|
|
168
169
|
tasks: {
|
|
169
170
|
id: string;
|
|
@@ -176,6 +177,7 @@ declare const tools: {
|
|
|
176
177
|
sectionId: string | null;
|
|
177
178
|
parentId: string | null;
|
|
178
179
|
labels: string[];
|
|
180
|
+
duration: string | null;
|
|
179
181
|
}[];
|
|
180
182
|
nextCursor: string | null;
|
|
181
183
|
}>;
|
|
@@ -206,6 +208,7 @@ declare const tools: {
|
|
|
206
208
|
sectionId: string | null;
|
|
207
209
|
parentId: string | null;
|
|
208
210
|
labels: string[];
|
|
211
|
+
duration: string | null;
|
|
209
212
|
}[];
|
|
210
213
|
nextCursor: string | null;
|
|
211
214
|
}>;
|
|
@@ -247,6 +250,7 @@ declare const tools: {
|
|
|
247
250
|
sectionId: string | null;
|
|
248
251
|
parentId: string | null;
|
|
249
252
|
labels: string[];
|
|
253
|
+
duration: string | null;
|
|
250
254
|
}[];
|
|
251
255
|
nextCursor: string | null;
|
|
252
256
|
}>;
|
|
@@ -263,16 +267,19 @@ declare const tools: {
|
|
|
263
267
|
description: import("zod").ZodOptional<import("zod").ZodString>;
|
|
264
268
|
priority: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
265
269
|
dueString: import("zod").ZodOptional<import("zod").ZodString>;
|
|
270
|
+
duration: import("zod").ZodOptional<import("zod").ZodString>;
|
|
266
271
|
}, "strip", import("zod").ZodTypeAny, {
|
|
267
272
|
content: string;
|
|
268
273
|
description?: string | undefined;
|
|
269
274
|
priority?: number | undefined;
|
|
270
275
|
dueString?: string | undefined;
|
|
276
|
+
duration?: string | undefined;
|
|
271
277
|
}, {
|
|
272
278
|
content: string;
|
|
273
279
|
description?: string | undefined;
|
|
274
280
|
priority?: number | undefined;
|
|
275
281
|
dueString?: string | undefined;
|
|
282
|
+
duration?: string | undefined;
|
|
276
283
|
}>, "many">;
|
|
277
284
|
};
|
|
278
285
|
execute(args: {
|
|
@@ -281,6 +288,7 @@ declare const tools: {
|
|
|
281
288
|
description?: string | undefined;
|
|
282
289
|
priority?: number | undefined;
|
|
283
290
|
dueString?: string | undefined;
|
|
291
|
+
duration?: string | undefined;
|
|
284
292
|
}[];
|
|
285
293
|
parentId?: string | undefined;
|
|
286
294
|
projectId?: string | undefined;
|
|
@@ -296,6 +304,7 @@ declare const tools: {
|
|
|
296
304
|
sectionId: string | null;
|
|
297
305
|
parentId: string | null;
|
|
298
306
|
labels: string[];
|
|
307
|
+
duration: string | null;
|
|
299
308
|
}[]>;
|
|
300
309
|
};
|
|
301
310
|
tasksUpdateOne: {
|
|
@@ -310,6 +319,7 @@ declare const tools: {
|
|
|
310
319
|
parentId: import("zod").ZodOptional<import("zod").ZodString>;
|
|
311
320
|
priority: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
312
321
|
dueString: import("zod").ZodOptional<import("zod").ZodString>;
|
|
322
|
+
duration: import("zod").ZodOptional<import("zod").ZodString>;
|
|
313
323
|
};
|
|
314
324
|
execute(args: {
|
|
315
325
|
id: string;
|
|
@@ -317,10 +327,11 @@ declare const tools: {
|
|
|
317
327
|
description?: string | undefined;
|
|
318
328
|
parentId?: string | undefined;
|
|
319
329
|
projectId?: string | undefined;
|
|
330
|
+
sectionId?: string | undefined;
|
|
320
331
|
priority?: number | undefined;
|
|
321
332
|
dueString?: string | undefined;
|
|
322
|
-
|
|
323
|
-
}, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<import("@doist/todoist-api-typescript").Task>;
|
|
333
|
+
duration?: string | undefined;
|
|
334
|
+
}, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<import("@doist/todoist-api-typescript").Task | undefined>;
|
|
324
335
|
};
|
|
325
336
|
tasksOrganizeMultiple: {
|
|
326
337
|
name: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAeV,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;AAE9B,OAAO,EACH,YAAY,EACZ,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,QAAQ,GACX,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,50 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const overview_1 = require("./tools/overview");
|
|
17
|
-
Object.defineProperty(exports, "overview", { enumerable: true, get: function () { return overview_1.overview; } });
|
|
18
|
-
const tasks_add_multiple_1 = require("./tools/tasks-add-multiple");
|
|
19
|
-
Object.defineProperty(exports, "tasksAddMultiple", { enumerable: true, get: function () { return tasks_add_multiple_1.tasksAddMultiple; } });
|
|
20
|
-
const tasks_complete_multiple_1 = require("./tools/tasks-complete-multiple");
|
|
21
|
-
Object.defineProperty(exports, "tasksCompleteMultiple", { enumerable: true, get: function () { return tasks_complete_multiple_1.tasksCompleteMultiple; } });
|
|
22
|
-
const tasks_list_by_date_1 = require("./tools/tasks-list-by-date");
|
|
23
|
-
Object.defineProperty(exports, "tasksListByDate", { enumerable: true, get: function () { return tasks_list_by_date_1.tasksListByDate; } });
|
|
24
|
-
const tasks_list_completed_1 = require("./tools/tasks-list-completed");
|
|
25
|
-
Object.defineProperty(exports, "tasksListCompleted", { enumerable: true, get: function () { return tasks_list_completed_1.tasksListCompleted; } });
|
|
26
|
-
const tasks_list_for_container_1 = require("./tools/tasks-list-for-container");
|
|
27
|
-
Object.defineProperty(exports, "tasksListForContainer", { enumerable: true, get: function () { return tasks_list_for_container_1.tasksListForContainer; } });
|
|
28
|
-
const tasks_organize_multiple_1 = require("./tools/tasks-organize-multiple");
|
|
29
|
-
Object.defineProperty(exports, "tasksOrganizeMultiple", { enumerable: true, get: function () { return tasks_organize_multiple_1.tasksOrganizeMultiple; } });
|
|
30
|
-
const tasks_search_1 = require("./tools/tasks-search");
|
|
31
|
-
Object.defineProperty(exports, "tasksSearch", { enumerable: true, get: function () { return tasks_search_1.tasksSearch; } });
|
|
32
|
-
const tasks_update_one_1 = require("./tools/tasks-update-one");
|
|
33
|
-
Object.defineProperty(exports, "tasksUpdateOne", { enumerable: true, get: function () { return tasks_update_one_1.tasksUpdateOne; } });
|
|
1
|
+
import { getMcpServer } from './mcp-server.js';
|
|
2
|
+
import { deleteOne } from './tools/delete-one.js';
|
|
3
|
+
import { projectsList } from './tools/projects-list.js';
|
|
4
|
+
import { projectsManage } from './tools/projects-manage.js';
|
|
5
|
+
import { sectionsManage } from './tools/sections-manage.js';
|
|
6
|
+
import { sectionsSearch } from './tools/sections-search.js';
|
|
7
|
+
import { overview } from './tools/overview.js';
|
|
8
|
+
import { tasksAddMultiple } from './tools/tasks-add-multiple.js';
|
|
9
|
+
import { tasksCompleteMultiple } from './tools/tasks-complete-multiple.js';
|
|
10
|
+
import { tasksListByDate } from './tools/tasks-list-by-date.js';
|
|
11
|
+
import { tasksListCompleted } from './tools/tasks-list-completed.js';
|
|
12
|
+
import { tasksListForContainer } from './tools/tasks-list-for-container.js';
|
|
13
|
+
import { tasksOrganizeMultiple } from './tools/tasks-organize-multiple.js';
|
|
14
|
+
import { tasksSearch } from './tools/tasks-search.js';
|
|
15
|
+
import { tasksUpdateOne } from './tools/tasks-update-one.js';
|
|
34
16
|
const tools = {
|
|
35
|
-
projectsList
|
|
36
|
-
projectsManage
|
|
37
|
-
deleteOne
|
|
38
|
-
sectionsSearch
|
|
39
|
-
sectionsManage
|
|
40
|
-
tasksListByDate
|
|
41
|
-
tasksListCompleted
|
|
42
|
-
tasksListForContainer
|
|
43
|
-
tasksCompleteMultiple
|
|
44
|
-
tasksSearch
|
|
45
|
-
tasksAddMultiple
|
|
46
|
-
tasksUpdateOne
|
|
47
|
-
tasksOrganizeMultiple
|
|
48
|
-
overview
|
|
17
|
+
projectsList,
|
|
18
|
+
projectsManage,
|
|
19
|
+
deleteOne,
|
|
20
|
+
sectionsSearch,
|
|
21
|
+
sectionsManage,
|
|
22
|
+
tasksListByDate,
|
|
23
|
+
tasksListCompleted,
|
|
24
|
+
tasksListForContainer,
|
|
25
|
+
tasksCompleteMultiple,
|
|
26
|
+
tasksSearch,
|
|
27
|
+
tasksAddMultiple,
|
|
28
|
+
tasksUpdateOne,
|
|
29
|
+
tasksOrganizeMultiple,
|
|
30
|
+
overview,
|
|
49
31
|
};
|
|
50
|
-
|
|
32
|
+
export { tools, getMcpServer };
|
|
33
|
+
export { projectsList, projectsManage, deleteOne, sectionsSearch, sectionsManage, tasksListByDate, tasksListForContainer, tasksListCompleted, tasksCompleteMultiple, tasksSearch, tasksAddMultiple, tasksUpdateOne, tasksOrganizeMultiple, overview, };
|
package/dist/main.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const stdio_1 = require("@modelcontextprotocol/sdk/server/stdio");
|
|
7
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
-
const mcp_server_1 = require("./mcp-server");
|
|
1
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
+
import dotenv from 'dotenv';
|
|
3
|
+
import { getMcpServer } from './mcp-server.js';
|
|
9
4
|
function main() {
|
|
10
5
|
const todoistApiKey = process.env.TODOIST_API_KEY;
|
|
11
6
|
if (!todoistApiKey) {
|
|
12
7
|
throw new Error('TODOIST_API_KEY is not set');
|
|
13
8
|
}
|
|
14
|
-
const server =
|
|
15
|
-
const transport = new
|
|
9
|
+
const server = getMcpServer({ todoistApiKey });
|
|
10
|
+
const transport = new StdioServerTransport();
|
|
16
11
|
server
|
|
17
12
|
.connect(transport)
|
|
18
13
|
.then(() => {
|
|
@@ -24,5 +19,5 @@ function main() {
|
|
|
24
19
|
process.exit(1);
|
|
25
20
|
});
|
|
26
21
|
}
|
|
27
|
-
|
|
22
|
+
dotenv.config();
|
|
28
23
|
main();
|
package/dist/mcp-helpers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TodoistApi } from '@doist/todoist-api-typescript';
|
|
2
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
|
|
2
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { z } from 'zod';
|
|
4
|
-
import type { TodoistTool } from './todoist-tool';
|
|
4
|
+
import type { TodoistTool } from './todoist-tool.js';
|
|
5
5
|
declare function errorContent(error: string): {
|
|
6
6
|
isError: boolean;
|
|
7
7
|
content: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-helpers.d.ts","sourceRoot":"","sources":["../src/mcp-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-helpers.d.ts","sourceRoot":"","sources":["../src/mcp-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,yCAAyC,CAAA;AACtF,OAAO,KAAK,EAAc,CAAC,EAAE,MAAM,KAAK,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAwBpD,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM;;;;;;EAKlC;AAED;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,EAC9C,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,UAAU,QAqBrB;AAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/mcp-helpers.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerTool = registerTool;
|
|
4
|
-
exports.errorContent = errorContent;
|
|
5
1
|
function textContent(text) {
|
|
6
2
|
return {
|
|
7
3
|
content: [{ type: 'text', text }],
|
|
@@ -51,3 +47,4 @@ function registerTool(tool, server, client) {
|
|
|
51
47
|
};
|
|
52
48
|
server.tool(tool.name, tool.description, tool.parameters, cb);
|
|
53
49
|
}
|
|
50
|
+
export { registerTool, errorContent };
|
package/dist/mcp-server.d.ts
CHANGED
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAwBnE;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,aA6B5F;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const tasks_organize_multiple_1 = require("./tools/tasks-organize-multiple");
|
|
19
|
-
const tasks_search_1 = require("./tools/tasks-search");
|
|
20
|
-
const tasks_update_one_1 = require("./tools/tasks-update-one");
|
|
1
|
+
import { TodoistApi } from '@doist/todoist-api-typescript';
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { registerTool } from './mcp-helpers.js';
|
|
4
|
+
import { deleteOne } from './tools/delete-one.js';
|
|
5
|
+
import { projectsList } from './tools/projects-list.js';
|
|
6
|
+
import { projectsManage } from './tools/projects-manage.js';
|
|
7
|
+
import { sectionsManage } from './tools/sections-manage.js';
|
|
8
|
+
import { sectionsSearch } from './tools/sections-search.js';
|
|
9
|
+
import { overview } from './tools/overview.js';
|
|
10
|
+
import { tasksAddMultiple } from './tools/tasks-add-multiple.js';
|
|
11
|
+
import { tasksCompleteMultiple } from './tools/tasks-complete-multiple.js';
|
|
12
|
+
import { tasksListByDate } from './tools/tasks-list-by-date.js';
|
|
13
|
+
import { tasksListCompleted } from './tools/tasks-list-completed.js';
|
|
14
|
+
import { tasksListForContainer } from './tools/tasks-list-for-container.js';
|
|
15
|
+
import { tasksOrganizeMultiple } from './tools/tasks-organize-multiple.js';
|
|
16
|
+
import { tasksSearch } from './tools/tasks-search.js';
|
|
17
|
+
import { tasksUpdateOne } from './tools/tasks-update-one.js';
|
|
21
18
|
const instructions = `
|
|
22
19
|
Tools to help you manage your todoist tasks.
|
|
23
20
|
`;
|
|
@@ -28,26 +25,27 @@ Tools to help you manage your todoist tasks.
|
|
|
28
25
|
* @returns the MCP server.
|
|
29
26
|
*/
|
|
30
27
|
function getMcpServer({ todoistApiKey, baseUrl }) {
|
|
31
|
-
const server = new
|
|
28
|
+
const server = new McpServer({ name: 'todoist-mcp-server', version: '0.1.0' }, {
|
|
32
29
|
capabilities: {
|
|
33
30
|
tools: { listChanged: true },
|
|
34
31
|
},
|
|
35
32
|
instructions,
|
|
36
33
|
});
|
|
37
|
-
const todoist = new
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
34
|
+
const todoist = new TodoistApi(todoistApiKey, baseUrl);
|
|
35
|
+
registerTool(tasksListCompleted, server, todoist);
|
|
36
|
+
registerTool(tasksListByDate, server, todoist);
|
|
37
|
+
registerTool(tasksSearch, server, todoist);
|
|
38
|
+
registerTool(projectsList, server, todoist);
|
|
39
|
+
registerTool(tasksAddMultiple, server, todoist);
|
|
40
|
+
registerTool(tasksUpdateOne, server, todoist);
|
|
41
|
+
registerTool(deleteOne, server, todoist);
|
|
42
|
+
registerTool(tasksCompleteMultiple, server, todoist);
|
|
43
|
+
registerTool(projectsManage, server, todoist);
|
|
44
|
+
registerTool(sectionsManage, server, todoist);
|
|
45
|
+
registerTool(tasksOrganizeMultiple, server, todoist);
|
|
46
|
+
registerTool(sectionsSearch, server, todoist);
|
|
47
|
+
registerTool(overview, server, todoist);
|
|
48
|
+
registerTool(tasksListForContainer, server, todoist);
|
|
52
49
|
return server;
|
|
53
50
|
}
|
|
51
|
+
export { getMcpServer };
|
package/dist/todoist-tool.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/dist/tool-helpers.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
import { type PersonalProject, type Task, type TodoistApi, type WorkspaceProject } from '@doist/todoist-api-typescript';
|
|
1
|
+
import { type MoveTaskArgs, type PersonalProject, type Task, type TodoistApi, type WorkspaceProject } from '@doist/todoist-api-typescript';
|
|
2
2
|
export type Project = PersonalProject | WorkspaceProject;
|
|
3
3
|
export declare function isPersonalProject(project: Project): project is PersonalProject;
|
|
4
4
|
export declare function isWorkspaceProject(project: Project): project is WorkspaceProject;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
|
|
7
|
+
* @param taskId - The task ID (used for error messages)
|
|
8
|
+
* @param projectId - Optional project ID to move to
|
|
9
|
+
* @param sectionId - Optional section ID to move to
|
|
10
|
+
* @param parentId - Optional parent ID to move to
|
|
11
|
+
* @returns MoveTaskArgs object with exactly one destination
|
|
12
|
+
* @throws Error if multiple move parameters are provided or none are provided
|
|
13
|
+
*/
|
|
14
|
+
export declare function createMoveTaskArgs(taskId: string, projectId?: string, sectionId?: string, parentId?: string): MoveTaskArgs;
|
|
5
15
|
/**
|
|
6
16
|
* Map a single Todoist task to a more structured format, for LLM consumption.
|
|
7
17
|
* @param task - The task to map.
|
|
@@ -18,6 +28,7 @@ declare function mapTask(task: Task): {
|
|
|
18
28
|
sectionId: string | null;
|
|
19
29
|
parentId: string | null;
|
|
20
30
|
labels: string[];
|
|
31
|
+
duration: string | null;
|
|
21
32
|
};
|
|
22
33
|
/**
|
|
23
34
|
* Map a single Todoist project to a more structured format, for LLM consumption.
|
|
@@ -51,6 +62,7 @@ declare function getTasksByFilter({ client, query, limit, cursor, }: {
|
|
|
51
62
|
sectionId: string | null;
|
|
52
63
|
parentId: string | null;
|
|
53
64
|
labels: string[];
|
|
65
|
+
duration: string | null;
|
|
54
66
|
}[];
|
|
55
67
|
nextCursor: string | null;
|
|
56
68
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EAExB,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EAExB,MAAM,+BAA+B,CAAA;AAItC,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,YAAY,CAsBd;AAED;;;;GAIG;AACH,iBAAS,OAAO,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;;EAc1B;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,OAAO,EAAE,OAAO;;;;;;;;;EAWnC;AAWD,iBAAe,gBAAgB,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,GACT,EAAE;IACC,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;;;;;;;;;;;;;;;GAyBA;AAED,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/tool-helpers.js
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isPersonalProject = isPersonalProject;
|
|
7
|
-
exports.isWorkspaceProject = isWorkspaceProject;
|
|
8
|
-
exports.getTasksByFilter = getTasksByFilter;
|
|
9
|
-
exports.mapTask = mapTask;
|
|
10
|
-
exports.mapProject = mapProject;
|
|
11
|
-
const todoist_api_typescript_1 = require("@doist/todoist-api-typescript");
|
|
12
|
-
const zod_1 = __importDefault(require("zod"));
|
|
13
|
-
function isPersonalProject(project) {
|
|
1
|
+
import { getSanitizedContent, } from '@doist/todoist-api-typescript';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import { formatDuration } from './utils/duration-parser.js';
|
|
4
|
+
export function isPersonalProject(project) {
|
|
14
5
|
return 'inboxProject' in project;
|
|
15
6
|
}
|
|
16
|
-
function isWorkspaceProject(project) {
|
|
7
|
+
export function isWorkspaceProject(project) {
|
|
17
8
|
return 'accessLevel' in project;
|
|
18
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
|
|
12
|
+
* @param taskId - The task ID (used for error messages)
|
|
13
|
+
* @param projectId - Optional project ID to move to
|
|
14
|
+
* @param sectionId - Optional section ID to move to
|
|
15
|
+
* @param parentId - Optional parent ID to move to
|
|
16
|
+
* @returns MoveTaskArgs object with exactly one destination
|
|
17
|
+
* @throws Error if multiple move parameters are provided or none are provided
|
|
18
|
+
*/
|
|
19
|
+
export function createMoveTaskArgs(taskId, projectId, sectionId, parentId) {
|
|
20
|
+
// Validate that only one move parameter is provided (RequireExactlyOne constraint)
|
|
21
|
+
const moveParams = [projectId, sectionId, parentId].filter(Boolean);
|
|
22
|
+
if (moveParams.length > 1) {
|
|
23
|
+
throw new Error(`Task ${taskId}: Only one of projectId, sectionId, or parentId can be specified at a time. The Todoist API requires exactly one destination for move operations.`);
|
|
24
|
+
}
|
|
25
|
+
if (moveParams.length === 0) {
|
|
26
|
+
throw new Error(`Task ${taskId}: At least one of projectId, sectionId, or parentId must be provided for move operations.`);
|
|
27
|
+
}
|
|
28
|
+
// Build moveArgs with the single defined value
|
|
29
|
+
if (projectId)
|
|
30
|
+
return { projectId };
|
|
31
|
+
if (sectionId)
|
|
32
|
+
return { sectionId };
|
|
33
|
+
if (parentId)
|
|
34
|
+
return { parentId };
|
|
35
|
+
// This should never be reached due to the validation above
|
|
36
|
+
throw new Error('Unexpected error: No valid move parameter found');
|
|
37
|
+
}
|
|
19
38
|
/**
|
|
20
39
|
* Map a single Todoist task to a more structured format, for LLM consumption.
|
|
21
40
|
* @param task - The task to map.
|
|
@@ -24,8 +43,8 @@ function isWorkspaceProject(project) {
|
|
|
24
43
|
function mapTask(task) {
|
|
25
44
|
return {
|
|
26
45
|
id: task.id,
|
|
27
|
-
content:
|
|
28
|
-
description:
|
|
46
|
+
content: getSanitizedContent(task.content),
|
|
47
|
+
description: getSanitizedContent(task.description),
|
|
29
48
|
dueDate: task.due?.date,
|
|
30
49
|
recurring: task.due?.isRecurring && task.due.string ? task.due.string : false,
|
|
31
50
|
priority: task.priority,
|
|
@@ -33,6 +52,7 @@ function mapTask(task) {
|
|
|
33
52
|
sectionId: task.sectionId,
|
|
34
53
|
parentId: task.parentId,
|
|
35
54
|
labels: task.labels,
|
|
55
|
+
duration: task.duration ? formatDuration(task.duration.amount) : null,
|
|
36
56
|
};
|
|
37
57
|
}
|
|
38
58
|
/**
|
|
@@ -52,12 +72,12 @@ function mapProject(project) {
|
|
|
52
72
|
viewStyle: project.viewStyle,
|
|
53
73
|
};
|
|
54
74
|
}
|
|
55
|
-
const ErrorSchema =
|
|
56
|
-
httpStatusCode:
|
|
57
|
-
responseData:
|
|
58
|
-
error:
|
|
59
|
-
errorCode:
|
|
60
|
-
errorTag:
|
|
75
|
+
const ErrorSchema = z.object({
|
|
76
|
+
httpStatusCode: z.number(),
|
|
77
|
+
responseData: z.object({
|
|
78
|
+
error: z.string(),
|
|
79
|
+
errorCode: z.number(),
|
|
80
|
+
errorTag: z.string(),
|
|
61
81
|
}),
|
|
62
82
|
});
|
|
63
83
|
async function getTasksByFilter({ client, query, limit, cursor, }) {
|
|
@@ -84,3 +104,4 @@ async function getTasksByFilter({ client, query, limit, cursor, }) {
|
|
|
84
104
|
throw new Error(`${responseData.error} (tag: ${responseData.errorTag}, code: ${responseData.errorCode})`);
|
|
85
105
|
}
|
|
86
106
|
}
|
|
107
|
+
export { getTasksByFilter, mapTask, mapProject };
|