@doist/todoist-ai 4.4.0 → 4.5.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 (80) hide show
  1. package/dist/index.d.ts +160 -35
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +24 -16
  4. package/dist/mcp-helpers.d.ts.map +1 -1
  5. package/dist/mcp-helpers.js +1 -1
  6. package/dist/mcp-server.d.ts.map +1 -1
  7. package/dist/mcp-server.js +78 -17
  8. package/dist/tool-helpers.d.ts +4 -0
  9. package/dist/tool-helpers.d.ts.map +1 -1
  10. package/dist/tool-helpers.js +2 -0
  11. package/dist/tools/__tests__/add-projects.test.js +1 -1
  12. package/dist/tools/__tests__/add-sections.test.js +1 -1
  13. package/dist/tools/__tests__/add-tasks.test.js +52 -13
  14. package/dist/tools/__tests__/assignment-integration.test.d.ts +2 -0
  15. package/dist/tools/__tests__/assignment-integration.test.d.ts.map +1 -0
  16. package/dist/tools/__tests__/assignment-integration.test.js +415 -0
  17. package/dist/tools/__tests__/find-projects.test.js +1 -1
  18. package/dist/tools/__tests__/find-sections.test.js +1 -1
  19. package/dist/tools/__tests__/find-tasks-by-date.test.js +1 -1
  20. package/dist/tools/__tests__/find-tasks.test.js +3 -3
  21. package/dist/tools/__tests__/get-overview.test.js +1 -1
  22. package/dist/tools/__tests__/update-tasks.test.js +6 -6
  23. package/dist/tools/__tests__/user-info.test.js +1 -1
  24. package/dist/tools/add-comments.d.ts +3 -3
  25. package/dist/tools/add-comments.d.ts.map +1 -1
  26. package/dist/tools/add-comments.js +1 -1
  27. package/dist/tools/add-projects.d.ts.map +1 -1
  28. package/dist/tools/add-projects.js +1 -1
  29. package/dist/tools/add-sections.d.ts.map +1 -1
  30. package/dist/tools/add-sections.js +1 -1
  31. package/dist/tools/add-tasks.d.ts +13 -7
  32. package/dist/tools/add-tasks.d.ts.map +1 -1
  33. package/dist/tools/add-tasks.js +49 -3
  34. package/dist/tools/find-comments.d.ts +2 -2
  35. package/dist/tools/find-completed-tasks.d.ts +4 -2
  36. package/dist/tools/find-completed-tasks.d.ts.map +1 -1
  37. package/dist/tools/find-completed-tasks.js +2 -2
  38. package/dist/tools/find-project-collaborators.d.ts +64 -0
  39. package/dist/tools/find-project-collaborators.d.ts.map +1 -0
  40. package/dist/tools/find-project-collaborators.js +151 -0
  41. package/dist/tools/find-tasks-by-date.d.ts +2 -0
  42. package/dist/tools/find-tasks-by-date.d.ts.map +1 -1
  43. package/dist/tools/find-tasks-by-date.js +2 -2
  44. package/dist/tools/find-tasks.d.ts +7 -2
  45. package/dist/tools/find-tasks.d.ts.map +1 -1
  46. package/dist/tools/find-tasks.js +128 -33
  47. package/dist/tools/get-overview.d.ts +2 -2
  48. package/dist/tools/get-overview.d.ts.map +1 -1
  49. package/dist/tools/get-overview.js +1 -1
  50. package/dist/tools/manage-assignments.d.ts +52 -0
  51. package/dist/tools/manage-assignments.d.ts.map +1 -0
  52. package/dist/tools/manage-assignments.js +337 -0
  53. package/dist/tools/update-comments.d.ts.map +1 -1
  54. package/dist/tools/update-comments.js +1 -1
  55. package/dist/tools/update-sections.d.ts.map +1 -1
  56. package/dist/tools/update-sections.js +1 -1
  57. package/dist/tools/update-tasks.d.ts +13 -7
  58. package/dist/tools/update-tasks.d.ts.map +1 -1
  59. package/dist/tools/update-tasks.js +32 -9
  60. package/dist/utils/assignment-validator.d.ts +69 -0
  61. package/dist/utils/assignment-validator.d.ts.map +1 -0
  62. package/dist/utils/assignment-validator.js +253 -0
  63. package/dist/utils/duration-parser.d.ts +2 -2
  64. package/dist/utils/duration-parser.d.ts.map +1 -1
  65. package/dist/utils/priorities.d.ts +8 -0
  66. package/dist/utils/priorities.d.ts.map +1 -0
  67. package/dist/utils/priorities.js +15 -0
  68. package/dist/utils/response-builders.d.ts +2 -2
  69. package/dist/utils/response-builders.d.ts.map +1 -1
  70. package/dist/utils/response-builders.js +8 -1
  71. package/dist/utils/test-helpers.d.ts +2 -0
  72. package/dist/utils/test-helpers.d.ts.map +1 -1
  73. package/dist/utils/test-helpers.js +2 -0
  74. package/dist/utils/tool-names.d.ts +2 -0
  75. package/dist/utils/tool-names.d.ts.map +1 -1
  76. package/dist/utils/tool-names.js +3 -0
  77. package/dist/utils/user-resolver.d.ts +39 -0
  78. package/dist/utils/user-resolver.d.ts.map +1 -0
  79. package/dist/utils/user-resolver.js +179 -0
  80. package/package.json +5 -5
package/dist/index.d.ts CHANGED
@@ -1,21 +1,23 @@
1
1
  import { getMcpServer } from './mcp-server.js';
2
+ import { addComments } from './tools/add-comments.js';
3
+ import { addProjects } from './tools/add-projects.js';
4
+ import { addSections } from './tools/add-sections.js';
2
5
  import { addTasks } from './tools/add-tasks.js';
3
6
  import { completeTasks } from './tools/complete-tasks.js';
7
+ import { deleteObject } from './tools/delete-object.js';
8
+ import { findComments } from './tools/find-comments.js';
4
9
  import { findCompletedTasks } from './tools/find-completed-tasks.js';
5
- import { findTasksByDate } from './tools/find-tasks-by-date.js';
6
- import { findTasks } from './tools/find-tasks.js';
7
- import { updateTasks } from './tools/update-tasks.js';
8
- import { addProjects } from './tools/add-projects.js';
10
+ import { findProjectCollaborators } from './tools/find-project-collaborators.js';
9
11
  import { findProjects } from './tools/find-projects.js';
10
- import { updateProjects } from './tools/update-projects.js';
11
- import { addSections } from './tools/add-sections.js';
12
12
  import { findSections } from './tools/find-sections.js';
13
- import { updateSections } from './tools/update-sections.js';
14
- import { addComments } from './tools/add-comments.js';
15
- import { findComments } from './tools/find-comments.js';
16
- import { updateComments } from './tools/update-comments.js';
17
- import { deleteObject } from './tools/delete-object.js';
13
+ import { findTasks } from './tools/find-tasks.js';
14
+ import { findTasksByDate } from './tools/find-tasks-by-date.js';
18
15
  import { getOverview } from './tools/get-overview.js';
16
+ import { manageAssignments } from './tools/manage-assignments.js';
17
+ import { updateComments } from './tools/update-comments.js';
18
+ import { updateProjects } from './tools/update-projects.js';
19
+ import { updateSections } from './tools/update-sections.js';
20
+ import { updateTasks } from './tools/update-tasks.js';
19
21
  import { userInfo } from './tools/user-info.js';
20
22
  declare const tools: {
21
23
  addTasks: {
@@ -25,42 +27,46 @@ declare const tools: {
25
27
  tasks: import("zod").ZodArray<import("zod").ZodObject<{
26
28
  content: import("zod").ZodString;
27
29
  description: import("zod").ZodOptional<import("zod").ZodString>;
28
- priority: import("zod").ZodOptional<import("zod").ZodNumber>;
30
+ priority: import("zod").ZodOptional<import("zod").ZodEnum<["p1", "p2", "p3", "p4"]>>;
29
31
  dueString: import("zod").ZodOptional<import("zod").ZodString>;
30
32
  duration: import("zod").ZodOptional<import("zod").ZodString>;
31
33
  projectId: import("zod").ZodOptional<import("zod").ZodString>;
32
34
  sectionId: import("zod").ZodOptional<import("zod").ZodString>;
33
35
  parentId: import("zod").ZodOptional<import("zod").ZodString>;
36
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodString>;
34
37
  }, "strip", import("zod").ZodTypeAny, {
35
38
  content: string;
36
39
  description?: string | undefined;
37
- parentId?: string | undefined;
38
40
  projectId?: string | undefined;
41
+ parentId?: string | undefined;
39
42
  sectionId?: string | undefined;
40
43
  duration?: string | undefined;
41
- priority?: number | undefined;
44
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
42
45
  dueString?: string | undefined;
46
+ responsibleUser?: string | undefined;
43
47
  }, {
44
48
  content: string;
45
49
  description?: string | undefined;
46
- parentId?: string | undefined;
47
50
  projectId?: string | undefined;
51
+ parentId?: string | undefined;
48
52
  sectionId?: string | undefined;
49
53
  duration?: string | undefined;
50
- priority?: number | undefined;
54
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
51
55
  dueString?: string | undefined;
56
+ responsibleUser?: string | undefined;
52
57
  }>, "many">;
53
58
  };
54
59
  execute({ tasks }: {
55
60
  tasks: {
56
61
  content: string;
57
62
  description?: string | undefined;
58
- parentId?: string | undefined;
59
63
  projectId?: string | undefined;
64
+ parentId?: string | undefined;
60
65
  sectionId?: string | undefined;
61
66
  duration?: string | undefined;
62
- priority?: number | undefined;
67
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
63
68
  dueString?: string | undefined;
69
+ responsibleUser?: string | undefined;
64
70
  }[];
65
71
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
66
72
  content: {
@@ -80,6 +86,8 @@ declare const tools: {
80
86
  parentId: string | null;
81
87
  labels: string[];
82
88
  duration: string | null;
89
+ responsibleUid: string | null;
90
+ assignedByUid: string | null;
83
91
  }[];
84
92
  totalCount: number;
85
93
  };
@@ -145,30 +153,33 @@ declare const tools: {
145
153
  sectionId: import("zod").ZodOptional<import("zod").ZodString>;
146
154
  parentId: import("zod").ZodOptional<import("zod").ZodString>;
147
155
  order: import("zod").ZodOptional<import("zod").ZodNumber>;
148
- priority: import("zod").ZodOptional<import("zod").ZodNumber>;
156
+ priority: import("zod").ZodOptional<import("zod").ZodEnum<["p1", "p2", "p3", "p4"]>>;
149
157
  dueString: import("zod").ZodOptional<import("zod").ZodString>;
150
158
  duration: import("zod").ZodOptional<import("zod").ZodString>;
159
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
151
160
  }, "strip", import("zod").ZodTypeAny, {
152
161
  id: string;
153
162
  content?: string | undefined;
154
163
  description?: string | undefined;
155
- parentId?: string | undefined;
156
164
  projectId?: string | undefined;
165
+ parentId?: string | undefined;
157
166
  sectionId?: string | undefined;
158
167
  duration?: string | undefined;
159
- priority?: number | undefined;
168
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
160
169
  dueString?: string | undefined;
170
+ responsibleUser?: string | null | undefined;
161
171
  order?: number | undefined;
162
172
  }, {
163
173
  id: string;
164
174
  content?: string | undefined;
165
175
  description?: string | undefined;
166
- parentId?: string | undefined;
167
176
  projectId?: string | undefined;
177
+ parentId?: string | undefined;
168
178
  sectionId?: string | undefined;
169
179
  duration?: string | undefined;
170
- priority?: number | undefined;
180
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
171
181
  dueString?: string | undefined;
182
+ responsibleUser?: string | null | undefined;
172
183
  order?: number | undefined;
173
184
  }>, "many">;
174
185
  };
@@ -177,12 +188,13 @@ declare const tools: {
177
188
  id: string;
178
189
  content?: string | undefined;
179
190
  description?: string | undefined;
180
- parentId?: string | undefined;
181
191
  projectId?: string | undefined;
192
+ parentId?: string | undefined;
182
193
  sectionId?: string | undefined;
183
194
  duration?: string | undefined;
184
- priority?: number | undefined;
195
+ priority?: "p1" | "p2" | "p3" | "p4" | undefined;
185
196
  dueString?: string | undefined;
197
+ responsibleUser?: string | null | undefined;
186
198
  order?: number | undefined;
187
199
  }[];
188
200
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
@@ -203,6 +215,8 @@ declare const tools: {
203
215
  parentId: string | null;
204
216
  labels: string[];
205
217
  duration: string | null;
218
+ responsibleUid: string | null;
219
+ assignedByUid: string | null;
206
220
  }[];
207
221
  totalCount: number;
208
222
  updatedTaskIds: string[];
@@ -234,16 +248,18 @@ declare const tools: {
234
248
  projectId: import("zod").ZodOptional<import("zod").ZodString>;
235
249
  sectionId: import("zod").ZodOptional<import("zod").ZodString>;
236
250
  parentId: import("zod").ZodOptional<import("zod").ZodString>;
251
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodString>;
237
252
  limit: import("zod").ZodDefault<import("zod").ZodNumber>;
238
253
  cursor: import("zod").ZodOptional<import("zod").ZodString>;
239
254
  };
240
255
  execute(args: {
241
256
  limit: number;
242
- parentId?: string | undefined;
243
257
  projectId?: string | undefined;
258
+ parentId?: string | undefined;
244
259
  sectionId?: string | undefined;
245
260
  labels?: string[] | undefined;
246
261
  cursor?: string | undefined;
262
+ responsibleUser?: string | undefined;
247
263
  labelsOperator?: "and" | "or" | undefined;
248
264
  searchText?: string | undefined;
249
265
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
@@ -264,17 +280,20 @@ declare const tools: {
264
280
  parentId: string | null;
265
281
  labels: string[];
266
282
  duration: string | null;
283
+ responsibleUid: string | null;
284
+ assignedByUid: string | null;
267
285
  }[];
268
286
  nextCursor: string | null;
269
287
  totalCount: number;
270
288
  hasMore: boolean;
271
289
  appliedFilters: {
272
290
  limit: number;
273
- parentId?: string | undefined;
274
291
  projectId?: string | undefined;
292
+ parentId?: string | undefined;
275
293
  sectionId?: string | undefined;
276
294
  labels?: string[] | undefined;
277
295
  cursor?: string | undefined;
296
+ responsibleUser?: string | undefined;
278
297
  labelsOperator?: "and" | "or" | undefined;
279
298
  searchText?: string | undefined;
280
299
  };
@@ -328,6 +347,8 @@ declare const tools: {
328
347
  parentId: string | null;
329
348
  labels: string[];
330
349
  duration: string | null;
350
+ responsibleUid: string | null;
351
+ assignedByUid: string | null;
331
352
  }[];
332
353
  nextCursor: string | null;
333
354
  totalCount: number;
@@ -375,9 +396,9 @@ declare const tools: {
375
396
  getBy: "due" | "completion";
376
397
  since: string;
377
398
  until: string;
399
+ projectId?: string | undefined;
378
400
  parentId?: string | undefined;
379
401
  workspaceId?: string | undefined;
380
- projectId?: string | undefined;
381
402
  sectionId?: string | undefined;
382
403
  labels?: string[] | undefined;
383
404
  cursor?: string | undefined;
@@ -400,6 +421,8 @@ declare const tools: {
400
421
  parentId: string | null;
401
422
  labels: string[];
402
423
  duration: string | null;
424
+ responsibleUid: string | null;
425
+ assignedByUid: string | null;
403
426
  }[];
404
427
  nextCursor: string | null;
405
428
  totalCount: number;
@@ -409,9 +432,9 @@ declare const tools: {
409
432
  getBy: "due" | "completion";
410
433
  since: string;
411
434
  until: string;
435
+ projectId?: string | undefined;
412
436
  parentId?: string | undefined;
413
437
  workspaceId?: string | undefined;
414
- projectId?: string | undefined;
415
438
  sectionId?: string | undefined;
416
439
  labels?: string[] | undefined;
417
440
  cursor?: string | undefined;
@@ -832,19 +855,19 @@ declare const tools: {
832
855
  content: import("zod").ZodString;
833
856
  }, "strip", import("zod").ZodTypeAny, {
834
857
  content: string;
835
- projectId?: string | undefined;
836
858
  taskId?: string | undefined;
859
+ projectId?: string | undefined;
837
860
  }, {
838
861
  content: string;
839
- projectId?: string | undefined;
840
862
  taskId?: string | undefined;
863
+ projectId?: string | undefined;
841
864
  }>, "many">;
842
865
  };
843
866
  execute(args: {
844
867
  comments: {
845
868
  content: string;
846
- projectId?: string | undefined;
847
869
  taskId?: string | undefined;
870
+ projectId?: string | undefined;
848
871
  }[];
849
872
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
850
873
  content: {
@@ -974,10 +997,10 @@ declare const tools: {
974
997
  limit: import("zod").ZodOptional<import("zod").ZodNumber>;
975
998
  };
976
999
  execute(args: {
977
- projectId?: string | undefined;
978
1000
  limit?: number | undefined;
979
- cursor?: string | undefined;
980
1001
  taskId?: string | undefined;
1002
+ projectId?: string | undefined;
1003
+ cursor?: string | undefined;
981
1004
  commentId?: string | undefined;
982
1005
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
983
1006
  content: {
@@ -1114,7 +1137,109 @@ declare const tools: {
1114
1137
  structuredContent?: undefined;
1115
1138
  }>;
1116
1139
  };
1140
+ findProjectCollaborators: {
1141
+ name: "find-project-collaborators";
1142
+ description: string;
1143
+ parameters: {
1144
+ projectId: import("zod").ZodString;
1145
+ searchTerm: import("zod").ZodOptional<import("zod").ZodString>;
1146
+ };
1147
+ execute(args: {
1148
+ projectId: string;
1149
+ searchTerm?: string | undefined;
1150
+ }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
1151
+ content: {
1152
+ type: "text";
1153
+ text: string;
1154
+ }[];
1155
+ structuredContent: {
1156
+ collaborators: never[];
1157
+ projectInfo: {
1158
+ id: string;
1159
+ name: string;
1160
+ isShared: boolean;
1161
+ };
1162
+ totalCount: number;
1163
+ appliedFilters: {
1164
+ projectId: string;
1165
+ searchTerm?: string | undefined;
1166
+ };
1167
+ };
1168
+ } | {
1169
+ content: ({
1170
+ type: "text";
1171
+ text: string;
1172
+ mimeType?: undefined;
1173
+ } | {
1174
+ type: "text";
1175
+ mimeType: string;
1176
+ text: string;
1177
+ })[];
1178
+ structuredContent?: undefined;
1179
+ } | {
1180
+ content: {
1181
+ type: "text";
1182
+ text: string;
1183
+ }[];
1184
+ structuredContent: {
1185
+ collaborators: import("./utils/user-resolver.js").ProjectCollaborator[];
1186
+ projectInfo: {
1187
+ id: string;
1188
+ name: string;
1189
+ isShared: boolean;
1190
+ };
1191
+ totalCount: number;
1192
+ totalAvailable: number;
1193
+ appliedFilters: {
1194
+ projectId: string;
1195
+ searchTerm?: string | undefined;
1196
+ };
1197
+ };
1198
+ }>;
1199
+ };
1200
+ manageAssignments: {
1201
+ name: "manage-assignments";
1202
+ description: string;
1203
+ parameters: {
1204
+ operation: import("zod").ZodEnum<["assign", "unassign", "reassign"]>;
1205
+ taskIds: import("zod").ZodArray<import("zod").ZodString, "many">;
1206
+ responsibleUser: import("zod").ZodOptional<import("zod").ZodString>;
1207
+ fromAssigneeUser: import("zod").ZodOptional<import("zod").ZodString>;
1208
+ dryRun: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
1209
+ };
1210
+ execute(args: {
1211
+ operation: "assign" | "unassign" | "reassign";
1212
+ taskIds: string[];
1213
+ dryRun: boolean;
1214
+ responsibleUser?: string | undefined;
1215
+ fromAssigneeUser?: string | undefined;
1216
+ }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
1217
+ content: {
1218
+ type: "text";
1219
+ text: string;
1220
+ }[];
1221
+ structuredContent: {
1222
+ operation: "assign" | "unassign" | "reassign";
1223
+ results: import("./tools/manage-assignments.js").OperationResult[];
1224
+ totalRequested: number;
1225
+ successful: number;
1226
+ failed: number;
1227
+ dryRun: boolean;
1228
+ };
1229
+ } | {
1230
+ content: ({
1231
+ type: "text";
1232
+ text: string;
1233
+ mimeType?: undefined;
1234
+ } | {
1235
+ type: "text";
1236
+ mimeType: string;
1237
+ text: string;
1238
+ })[];
1239
+ structuredContent?: undefined;
1240
+ }>;
1241
+ };
1117
1242
  };
1118
1243
  export { tools, getMcpServer };
1119
- export { addTasks, completeTasks, updateTasks, findTasks, findTasksByDate, findCompletedTasks, addProjects, updateProjects, findProjects, addSections, updateSections, findSections, addComments, updateComments, findComments, getOverview, deleteObject, userInfo, };
1244
+ export { addTasks, completeTasks, updateTasks, findTasks, findTasksByDate, findCompletedTasks, addProjects, updateProjects, findProjects, addSections, updateSections, findSections, addComments, updateComments, findComments, getOverview, deleteObject, userInfo, findProjectCollaborators, manageAssignments, };
1120
1245
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,26 +1,29 @@
1
1
  import { getMcpServer } from './mcp-server.js';
2
- // Task management tools
3
- import { addTasks } from './tools/add-tasks.js';
4
- import { completeTasks } from './tools/complete-tasks.js';
5
- import { findCompletedTasks } from './tools/find-completed-tasks.js';
6
- import { findTasksByDate } from './tools/find-tasks-by-date.js';
7
- import { findTasks } from './tools/find-tasks.js';
8
- import { updateTasks } from './tools/update-tasks.js';
2
+ // Comment management tools
3
+ import { addComments } from './tools/add-comments.js';
9
4
  // Project management tools
10
5
  import { addProjects } from './tools/add-projects.js';
11
- import { findProjects } from './tools/find-projects.js';
12
- import { updateProjects } from './tools/update-projects.js';
13
6
  // Section management tools
14
7
  import { addSections } from './tools/add-sections.js';
15
- import { findSections } from './tools/find-sections.js';
16
- import { updateSections } from './tools/update-sections.js';
17
- // Comment management tools
18
- import { addComments } from './tools/add-comments.js';
19
- import { findComments } from './tools/find-comments.js';
20
- import { updateComments } from './tools/update-comments.js';
8
+ // Task management tools
9
+ import { addTasks } from './tools/add-tasks.js';
10
+ import { completeTasks } from './tools/complete-tasks.js';
21
11
  // General tools
22
12
  import { deleteObject } from './tools/delete-object.js';
13
+ import { findComments } from './tools/find-comments.js';
14
+ import { findCompletedTasks } from './tools/find-completed-tasks.js';
15
+ // Assignment and collaboration tools
16
+ import { findProjectCollaborators } from './tools/find-project-collaborators.js';
17
+ import { findProjects } from './tools/find-projects.js';
18
+ import { findSections } from './tools/find-sections.js';
19
+ import { findTasks } from './tools/find-tasks.js';
20
+ import { findTasksByDate } from './tools/find-tasks-by-date.js';
23
21
  import { getOverview } from './tools/get-overview.js';
22
+ import { manageAssignments } from './tools/manage-assignments.js';
23
+ import { updateComments } from './tools/update-comments.js';
24
+ import { updateProjects } from './tools/update-projects.js';
25
+ import { updateSections } from './tools/update-sections.js';
26
+ import { updateTasks } from './tools/update-tasks.js';
24
27
  import { userInfo } from './tools/user-info.js';
25
28
  const tools = {
26
29
  // Task management tools
@@ -46,6 +49,9 @@ const tools = {
46
49
  getOverview,
47
50
  deleteObject,
48
51
  userInfo,
52
+ // Assignment and collaboration tools
53
+ findProjectCollaborators,
54
+ manageAssignments,
49
55
  };
50
56
  export { tools, getMcpServer };
51
57
  export {
@@ -58,4 +64,6 @@ addSections, updateSections, findSections,
58
64
  // Comment management tools
59
65
  addComments, updateComments, findComments,
60
66
  // General tools
61
- getOverview, deleteObject, userInfo, };
67
+ getOverview, deleteObject, userInfo,
68
+ // Assignment and collaboration tools
69
+ findProjectCollaborators, manageAssignments, };
@@ -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,yCAAyC,CAAA;AACtF,OAAO,KAAK,EAAc,CAAC,EAAE,MAAM,KAAK,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAkBpD;;;;;;;GAOG;AACH,iBAAS,aAAa,CAAC,iBAAiB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACtE,WAAW,EACX,iBAAiB,GACpB,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,iBAAiB,CAAA;CAAE;;;;;;;;;;;;;;;;;EAe/D;AASD;;;;;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,aAAa,EAAE,CAAA"}
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;AAkBpD;;;;;;;GAOG;AACH,iBAAS,aAAa,CAAC,iBAAiB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACtE,WAAW,EACX,iBAAiB,GACpB,EAAE;IACC,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,iBAAiB,CAAA;CACvC;;;;;;;;;;;;;;;;;EAeA;AASD;;;;;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,aAAa,EAAE,CAAA"}
@@ -48,7 +48,7 @@ function getErrorOutput(error) {
48
48
  * @param client - The Todoist API client to use to execute the tool.
49
49
  */
50
50
  function registerTool(tool, server, client) {
51
- // @ts-ignore I give up
51
+ // @ts-expect-error I give up
52
52
  const cb = async (args, _context) => {
53
53
  try {
54
54
  const result = await tool.execute(args, client);
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAmCnE;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,aA0C5F;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAwFnE;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,aA8C5F;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -1,31 +1,89 @@
1
1
  import { TodoistApi } from '@doist/todoist-api-typescript';
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { registerTool } from './mcp-helpers.js';
4
- // Task management tools
4
+ import { addComments } from './tools/add-comments.js';
5
+ import { addProjects } from './tools/add-projects.js';
6
+ import { addSections } from './tools/add-sections.js';
5
7
  import { addTasks } from './tools/add-tasks.js';
6
8
  import { completeTasks } from './tools/complete-tasks.js';
9
+ import { deleteObject } from './tools/delete-object.js';
10
+ import { findComments } from './tools/find-comments.js';
7
11
  import { findCompletedTasks } from './tools/find-completed-tasks.js';
8
- import { findTasksByDate } from './tools/find-tasks-by-date.js';
9
- import { findTasks } from './tools/find-tasks.js';
10
- import { updateTasks } from './tools/update-tasks.js';
11
- // Project management tools
12
- import { addProjects } from './tools/add-projects.js';
12
+ import { findProjectCollaborators } from './tools/find-project-collaborators.js';
13
13
  import { findProjects } from './tools/find-projects.js';
14
- import { updateProjects } from './tools/update-projects.js';
15
- // Section management tools
16
- import { addSections } from './tools/add-sections.js';
17
14
  import { findSections } from './tools/find-sections.js';
18
- import { updateSections } from './tools/update-sections.js';
19
- // Comment management tools
20
- import { addComments } from './tools/add-comments.js';
21
- import { findComments } from './tools/find-comments.js';
22
- import { updateComments } from './tools/update-comments.js';
23
- // General tools
24
- import { deleteObject } from './tools/delete-object.js';
15
+ import { findTasks } from './tools/find-tasks.js';
16
+ import { findTasksByDate } from './tools/find-tasks-by-date.js';
25
17
  import { getOverview } from './tools/get-overview.js';
18
+ import { manageAssignments } from './tools/manage-assignments.js';
19
+ import { updateComments } from './tools/update-comments.js';
20
+ import { updateProjects } from './tools/update-projects.js';
21
+ import { updateSections } from './tools/update-sections.js';
22
+ import { updateTasks } from './tools/update-tasks.js';
26
23
  import { userInfo } from './tools/user-info.js';
27
24
  const instructions = `
28
- Tools to help you manage your todoist tasks.
25
+ ## Todoist Task and Project Management Tools
26
+
27
+ You have access to comprehensive Todoist management tools for personal productivity and team collaboration. Use these tools to help users manage tasks, projects, sections, comments, and assignments effectively.
28
+
29
+ ### Core Capabilities:
30
+ - Create, update, complete, and search tasks with rich metadata (priorities, due dates, durations, assignments)
31
+ - Manage projects and sections with flexible organization
32
+ - Handle comments and collaboration features
33
+ - Bulk assignment operations for team workflows
34
+ - Get overviews and insights about workload and progress
35
+
36
+ ### Tool Usage Guidelines:
37
+
38
+ **Task Management:**
39
+ - **add-tasks**: Create tasks with content, description, priority (p1=highest, p2=high, p3=medium, p4=lowest/default), dueString (natural language like "tomorrow", "next Friday", "2024-12-25"), duration (formats like "2h", "90m", "2h30m"), and assignments to project collaborators
40
+ - **update-tasks**: Modify existing tasks - get task IDs from search results first, only include fields that need changes
41
+ - **complete-tasks**: Mark tasks as done using task IDs
42
+ - **find-tasks**: Search by text, project/section/parent container, responsible user, or labels. Requires at least one search parameter
43
+ - **find-tasks-by-date**: Get tasks by date range (startDate: YYYY-MM-DD, 'today', or 'overdue') or specific day counts
44
+ - **find-completed-tasks**: View completed tasks by completion date or original due date
45
+
46
+ **Project & Organization:**
47
+ - **add-projects/update-projects/find-projects**: Manage project lifecycle with names, favorites, and view styles (list/board/calendar)
48
+ - **add-sections/update-sections/find-sections**: Organize tasks within projects using sections
49
+ - **get-overview**: Get comprehensive Markdown overview of entire account or specific project with task hierarchies
50
+
51
+ **Collaboration & Comments:**
52
+ - **add-comments/update-comments/find-comments**: Manage task and project discussions
53
+ - **find-project-collaborators**: Find team members by name or email for assignments
54
+ - **manage-assignments**: Bulk assign/unassign/reassign up to 50 tasks with atomic operations and dry-run validation
55
+
56
+ **General Operations:**
57
+ - **delete-object**: Remove projects, sections, tasks, or comments by type and ID
58
+ - **user-info**: Get user details including timezone, goals, and plan information
59
+
60
+ ### Best Practices:
61
+
62
+ 1. **Task Creation**: Write clear, actionable task titles. Use natural language for due dates ("tomorrow", "next Monday"). Set appropriate priorities and include detailed descriptions when needed.
63
+
64
+ 2. **Search Strategy**: Use specific search queries combining multiple filters for precise results. When searching for tasks, start with broader queries and narrow down as needed.
65
+
66
+ 3. **Assignments**: Always validate project collaborators exist before assigning tasks. Use find-project-collaborators to verify user access.
67
+
68
+ 4. **Bulk Operations**: When working with multiple items, prefer bulk tools (complete-tasks, manage-assignments) over individual operations for better performance.
69
+
70
+ 5. **Date Handling**: All dates respect user timezone settings. Use 'today' and 'overdue' keywords for dynamic date filtering.
71
+
72
+ 6. **Labels**: Use label filtering with AND/OR operators for advanced task organization. Most search tools support labels parameter.
73
+
74
+ 7. **Pagination**: Large result sets use cursor-based pagination. Use limit parameter to control result size (default varies by tool).
75
+
76
+ 8. **Error Handling**: All tools provide detailed error messages and next-step suggestions. Pay attention to validation feedback for corrective actions.
77
+
78
+ ### Common Workflows:
79
+
80
+ - **Daily Planning**: Use find-tasks-by-date with 'today' and get-overview for project status
81
+ - **Team Assignment**: find-project-collaborators → add-tasks with responsibleUser → manage-assignments for bulk changes
82
+ - **Task Search**: find-tasks with multiple filters → update-tasks or complete-tasks based on results
83
+ - **Project Organization**: add-projects → add-sections → add-tasks with projectId and sectionId
84
+ - **Progress Reviews**: find-completed-tasks with date ranges → get-overview for project summaries
85
+
86
+ Always provide clear, actionable task titles and descriptions. Use the overview tools to give users context about their workload and project status.
29
87
  `;
30
88
  /**
31
89
  * Create the MCP server.
@@ -64,6 +122,9 @@ function getMcpServer({ todoistApiKey, baseUrl }) {
64
122
  registerTool(getOverview, server, todoist);
65
123
  registerTool(deleteObject, server, todoist);
66
124
  registerTool(userInfo, server, todoist);
125
+ // Assignment and collaboration tools
126
+ registerTool(findProjectCollaborators, server, todoist);
127
+ registerTool(manageAssignments, server, todoist);
67
128
  return server;
68
129
  }
69
130
  export { getMcpServer };
@@ -29,6 +29,8 @@ declare function mapTask(task: Task): {
29
29
  parentId: string | null;
30
30
  labels: string[];
31
31
  duration: string | null;
32
+ responsibleUid: string | null;
33
+ assignedByUid: string | null;
32
34
  };
33
35
  /**
34
36
  * Map a single Todoist project to a more structured format, for LLM consumption.
@@ -63,6 +65,8 @@ declare function getTasksByFilter({ client, query, limit, cursor, }: {
63
65
  parentId: string | null;
64
66
  labels: string[];
65
67
  duration: string | null;
68
+ responsibleUid: string | null;
69
+ assignedByUid: string | null;
66
70
  }[];
67
71
  nextCursor: string | null;
68
72
  }>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../src/tool-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EACxB,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;;;;;;;;;;;;;;EAgB1B;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"}
@@ -53,6 +53,8 @@ function mapTask(task) {
53
53
  parentId: task.parentId,
54
54
  labels: task.labels,
55
55
  duration: task.duration ? formatDuration(task.duration.amount) : null,
56
+ responsibleUid: task.responsibleUid,
57
+ assignedByUid: task.assignedByUid,
56
58
  };
57
59
  }
58
60
  /**
@@ -1,5 +1,5 @@
1
1
  import { jest } from '@jest/globals';
2
- import { TEST_IDS, createMockProject, extractStructuredContent, extractTextContent, } from '../../utils/test-helpers.js';
2
+ import { createMockProject, extractStructuredContent, extractTextContent, TEST_IDS, } from '../../utils/test-helpers.js';
3
3
  import { ToolNames } from '../../utils/tool-names.js';
4
4
  import { addProjects } from '../add-projects.js';
5
5
  // Mock the Todoist API