@doist/todoist-ai 2.0.0 → 2.0.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 (81) hide show
  1. package/README.md +7 -0
  2. package/dist/index.d.ts +18 -18
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +31 -48
  5. package/dist/main.js +6 -11
  6. package/dist/mcp-helpers.d.ts +2 -2
  7. package/dist/mcp-helpers.d.ts.map +1 -1
  8. package/dist/mcp-helpers.js +1 -4
  9. package/dist/mcp-server.d.ts +1 -1
  10. package/dist/mcp-server.d.ts.map +1 -1
  11. package/dist/mcp-server.js +34 -36
  12. package/dist/todoist-tool.js +1 -2
  13. package/dist/tool-helpers.d.ts +11 -1
  14. package/dist/tool-helpers.d.ts.map +1 -1
  15. package/dist/tool-helpers.js +41 -22
  16. package/dist/tool-helpers.test.js +35 -14
  17. package/dist/tools/__tests__/delete-one.test.d.ts +2 -0
  18. package/dist/tools/__tests__/delete-one.test.d.ts.map +1 -0
  19. package/dist/tools/__tests__/delete-one.test.js +90 -0
  20. package/dist/tools/__tests__/overview.test.d.ts +2 -0
  21. package/dist/tools/__tests__/overview.test.d.ts.map +1 -0
  22. package/dist/tools/__tests__/overview.test.js +163 -0
  23. package/dist/tools/__tests__/projects-list.test.d.ts +2 -0
  24. package/dist/tools/__tests__/projects-list.test.d.ts.map +1 -0
  25. package/dist/tools/__tests__/projects-list.test.js +140 -0
  26. package/dist/tools/__tests__/projects-manage.test.d.ts +2 -0
  27. package/dist/tools/__tests__/projects-manage.test.d.ts.map +1 -0
  28. package/dist/tools/__tests__/projects-manage.test.js +106 -0
  29. package/dist/tools/__tests__/sections-manage.test.d.ts +2 -0
  30. package/dist/tools/__tests__/sections-manage.test.d.ts.map +1 -0
  31. package/dist/tools/__tests__/sections-manage.test.js +138 -0
  32. package/dist/tools/__tests__/sections-search.test.d.ts +2 -0
  33. package/dist/tools/__tests__/sections-search.test.d.ts.map +1 -0
  34. package/dist/tools/__tests__/sections-search.test.js +235 -0
  35. package/dist/tools/__tests__/tasks-add-multiple.test.d.ts +2 -0
  36. package/dist/tools/__tests__/tasks-add-multiple.test.d.ts.map +1 -0
  37. package/dist/tools/__tests__/tasks-add-multiple.test.js +160 -0
  38. package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts +2 -0
  39. package/dist/tools/__tests__/tasks-complete-multiple.test.d.ts.map +1 -0
  40. package/dist/tools/__tests__/tasks-complete-multiple.test.js +146 -0
  41. package/dist/tools/__tests__/tasks-list-by-date.test.d.ts +2 -0
  42. package/dist/tools/__tests__/tasks-list-by-date.test.d.ts.map +1 -0
  43. package/dist/tools/__tests__/tasks-list-by-date.test.js +192 -0
  44. package/dist/tools/__tests__/tasks-list-completed.test.d.ts +2 -0
  45. package/dist/tools/__tests__/tasks-list-completed.test.d.ts.map +1 -0
  46. package/dist/tools/__tests__/tasks-list-completed.test.js +154 -0
  47. package/dist/tools/__tests__/tasks-list-for-container.test.d.ts +2 -0
  48. package/dist/tools/__tests__/tasks-list-for-container.test.d.ts.map +1 -0
  49. package/dist/tools/__tests__/tasks-list-for-container.test.js +232 -0
  50. package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts +2 -0
  51. package/dist/tools/__tests__/tasks-organize-multiple.test.d.ts.map +1 -0
  52. package/dist/tools/__tests__/tasks-organize-multiple.test.js +245 -0
  53. package/dist/tools/__tests__/tasks-search.test.d.ts +2 -0
  54. package/dist/tools/__tests__/tasks-search.test.d.ts.map +1 -0
  55. package/dist/tools/__tests__/tasks-search.test.js +106 -0
  56. package/dist/tools/__tests__/tasks-update-one.test.d.ts +2 -0
  57. package/dist/tools/__tests__/tasks-update-one.test.d.ts.map +1 -0
  58. package/dist/tools/__tests__/tasks-update-one.test.js +161 -0
  59. package/dist/tools/delete-one.js +4 -7
  60. package/dist/tools/overview.js +8 -11
  61. package/dist/tools/projects-list.js +7 -10
  62. package/dist/tools/projects-manage.js +6 -9
  63. package/dist/tools/sections-manage.js +7 -10
  64. package/dist/tools/sections-search.js +4 -7
  65. package/dist/tools/tasks-add-multiple.js +13 -16
  66. package/dist/tools/tasks-complete-multiple.js +3 -6
  67. package/dist/tools/tasks-list-by-date.js +12 -15
  68. package/dist/tools/tasks-list-completed.d.ts +1 -1
  69. package/dist/tools/tasks-list-completed.js +13 -16
  70. package/dist/tools/tasks-list-for-container.js +8 -11
  71. package/dist/tools/tasks-organize-multiple.d.ts.map +1 -1
  72. package/dist/tools/tasks-organize-multiple.js +20 -14
  73. package/dist/tools/tasks-search.js +7 -10
  74. package/dist/tools/tasks-update-one.d.ts +2 -2
  75. package/dist/tools/tasks-update-one.d.ts.map +1 -1
  76. package/dist/tools/tasks-update-one.js +22 -15
  77. package/dist/tools/test-helpers.d.ts +79 -0
  78. package/dist/tools/test-helpers.d.ts.map +1 -0
  79. package/dist/tools/test-helpers.js +139 -0
  80. package/package.json +6 -2
  81. 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;
@@ -161,9 +161,9 @@ declare const tools: {
161
161
  until: string;
162
162
  parentId?: string | undefined;
163
163
  workspaceId?: string | undefined;
164
- cursor?: string | undefined;
165
164
  projectId?: string | undefined;
166
165
  sectionId?: string | undefined;
166
+ cursor?: string | undefined;
167
167
  }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<{
168
168
  tasks: {
169
169
  id: string;
@@ -317,10 +317,10 @@ declare const tools: {
317
317
  description?: string | undefined;
318
318
  parentId?: string | undefined;
319
319
  projectId?: string | undefined;
320
+ sectionId?: string | undefined;
320
321
  priority?: number | undefined;
321
322
  dueString?: string | undefined;
322
- sectionId?: string | undefined;
323
- }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<import("@doist/todoist-api-typescript").Task>;
323
+ }, client: import("@doist/todoist-api-typescript").TodoistApi): Promise<import("@doist/todoist-api-typescript").Task | undefined>;
324
324
  };
325
325
  tasksOrganizeMultiple: {
326
326
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,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"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.overview = exports.tasksOrganizeMultiple = exports.tasksUpdateOne = exports.tasksAddMultiple = exports.tasksSearch = exports.tasksCompleteMultiple = exports.tasksListCompleted = exports.tasksListForContainer = exports.tasksListByDate = exports.sectionsManage = exports.sectionsSearch = exports.deleteOne = exports.projectsManage = exports.projectsList = exports.getMcpServer = exports.tools = void 0;
4
- const mcp_server_1 = require("./mcp-server");
5
- Object.defineProperty(exports, "getMcpServer", { enumerable: true, get: function () { return mcp_server_1.getMcpServer; } });
6
- const delete_one_1 = require("./tools/delete-one");
7
- Object.defineProperty(exports, "deleteOne", { enumerable: true, get: function () { return delete_one_1.deleteOne; } });
8
- const projects_list_1 = require("./tools/projects-list");
9
- Object.defineProperty(exports, "projectsList", { enumerable: true, get: function () { return projects_list_1.projectsList; } });
10
- const projects_manage_1 = require("./tools/projects-manage");
11
- Object.defineProperty(exports, "projectsManage", { enumerable: true, get: function () { return projects_manage_1.projectsManage; } });
12
- const sections_manage_1 = require("./tools/sections-manage");
13
- Object.defineProperty(exports, "sectionsManage", { enumerable: true, get: function () { return sections_manage_1.sectionsManage; } });
14
- const sections_search_1 = require("./tools/sections-search");
15
- Object.defineProperty(exports, "sectionsSearch", { enumerable: true, get: function () { return sections_search_1.sectionsSearch; } });
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: projects_list_1.projectsList,
36
- projectsManage: projects_manage_1.projectsManage,
37
- deleteOne: delete_one_1.deleteOne,
38
- sectionsSearch: sections_search_1.sectionsSearch,
39
- sectionsManage: sections_manage_1.sectionsManage,
40
- tasksListByDate: tasks_list_by_date_1.tasksListByDate,
41
- tasksListCompleted: tasks_list_completed_1.tasksListCompleted,
42
- tasksListForContainer: tasks_list_for_container_1.tasksListForContainer,
43
- tasksCompleteMultiple: tasks_complete_multiple_1.tasksCompleteMultiple,
44
- tasksSearch: tasks_search_1.tasksSearch,
45
- tasksAddMultiple: tasks_add_multiple_1.tasksAddMultiple,
46
- tasksUpdateOne: tasks_update_one_1.tasksUpdateOne,
47
- tasksOrganizeMultiple: tasks_organize_multiple_1.tasksOrganizeMultiple,
48
- overview: overview_1.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
- exports.tools = tools;
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
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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 = (0, mcp_server_1.getMcpServer)({ todoistApiKey });
15
- const transport = new stdio_1.StdioServerTransport();
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
- dotenv_1.default.config();
22
+ dotenv.config();
28
23
  main();
@@ -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,sCAAsC,CAAA;AACnF,OAAO,KAAK,EAAc,CAAC,EAAE,MAAM,KAAK,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAwBjD,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"}
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"}
@@ -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 };
@@ -1,4 +1,4 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  /**
3
3
  * Create the MCP server.
4
4
  * @param todoistApiKey - The API key for the todoist account.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAwBhE;;;;;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"}
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"}
@@ -1,23 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMcpServer = getMcpServer;
4
- const todoist_api_typescript_1 = require("@doist/todoist-api-typescript");
5
- const mcp_1 = require("@modelcontextprotocol/sdk/server/mcp");
6
- const mcp_helpers_1 = require("./mcp-helpers");
7
- const delete_one_1 = require("./tools/delete-one");
8
- const projects_list_1 = require("./tools/projects-list");
9
- const projects_manage_1 = require("./tools/projects-manage");
10
- const sections_manage_1 = require("./tools/sections-manage");
11
- const sections_search_1 = require("./tools/sections-search");
12
- const overview_1 = require("./tools/overview");
13
- const tasks_add_multiple_1 = require("./tools/tasks-add-multiple");
14
- const tasks_complete_multiple_1 = require("./tools/tasks-complete-multiple");
15
- const tasks_list_by_date_1 = require("./tools/tasks-list-by-date");
16
- const tasks_list_completed_1 = require("./tools/tasks-list-completed");
17
- const tasks_list_for_container_1 = require("./tools/tasks-list-for-container");
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 mcp_1.McpServer({ name: 'todoist-mcp-server', version: '0.1.0' }, {
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 todoist_api_typescript_1.TodoistApi(todoistApiKey, baseUrl);
38
- (0, mcp_helpers_1.registerTool)(tasks_list_completed_1.tasksListCompleted, server, todoist);
39
- (0, mcp_helpers_1.registerTool)(tasks_list_by_date_1.tasksListByDate, server, todoist);
40
- (0, mcp_helpers_1.registerTool)(tasks_search_1.tasksSearch, server, todoist);
41
- (0, mcp_helpers_1.registerTool)(projects_list_1.projectsList, server, todoist);
42
- (0, mcp_helpers_1.registerTool)(tasks_add_multiple_1.tasksAddMultiple, server, todoist);
43
- (0, mcp_helpers_1.registerTool)(tasks_update_one_1.tasksUpdateOne, server, todoist);
44
- (0, mcp_helpers_1.registerTool)(delete_one_1.deleteOne, server, todoist);
45
- (0, mcp_helpers_1.registerTool)(tasks_complete_multiple_1.tasksCompleteMultiple, server, todoist);
46
- (0, mcp_helpers_1.registerTool)(projects_manage_1.projectsManage, server, todoist);
47
- (0, mcp_helpers_1.registerTool)(sections_manage_1.sectionsManage, server, todoist);
48
- (0, mcp_helpers_1.registerTool)(tasks_organize_multiple_1.tasksOrganizeMultiple, server, todoist);
49
- (0, mcp_helpers_1.registerTool)(sections_search_1.sectionsSearch, server, todoist);
50
- (0, mcp_helpers_1.registerTool)(overview_1.overview, server, todoist);
51
- (0, mcp_helpers_1.registerTool)(tasks_list_for_container_1.tasksListForContainer, server, todoist);
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 };
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -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.
@@ -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;AAGtC,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;;;;GAIG;AACH,iBAAS,OAAO,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;EAa1B;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,EACH,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EAExB,MAAM,+BAA+B,CAAA;AAGtC,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;;;;;;;;;;;EAa1B;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,21 +1,39 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
+ export function isPersonalProject(project) {
14
4
  return 'inboxProject' in project;
15
5
  }
16
- function isWorkspaceProject(project) {
6
+ export function isWorkspaceProject(project) {
17
7
  return 'accessLevel' in project;
18
8
  }
9
+ /**
10
+ * Creates a MoveTaskArgs object from move parameters, validating that exactly one is provided.
11
+ * @param taskId - The task ID (used for error messages)
12
+ * @param projectId - Optional project ID to move to
13
+ * @param sectionId - Optional section ID to move to
14
+ * @param parentId - Optional parent ID to move to
15
+ * @returns MoveTaskArgs object with exactly one destination
16
+ * @throws Error if multiple move parameters are provided or none are provided
17
+ */
18
+ export function createMoveTaskArgs(taskId, projectId, sectionId, parentId) {
19
+ // Validate that only one move parameter is provided (RequireExactlyOne constraint)
20
+ const moveParams = [projectId, sectionId, parentId].filter(Boolean);
21
+ if (moveParams.length > 1) {
22
+ 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.`);
23
+ }
24
+ if (moveParams.length === 0) {
25
+ throw new Error(`Task ${taskId}: At least one of projectId, sectionId, or parentId must be provided for move operations.`);
26
+ }
27
+ // Build moveArgs with the single defined value
28
+ if (projectId)
29
+ return { projectId };
30
+ if (sectionId)
31
+ return { sectionId };
32
+ if (parentId)
33
+ return { parentId };
34
+ // This should never be reached due to the validation above
35
+ throw new Error('Unexpected error: No valid move parameter found');
36
+ }
19
37
  /**
20
38
  * Map a single Todoist task to a more structured format, for LLM consumption.
21
39
  * @param task - The task to map.
@@ -24,8 +42,8 @@ function isWorkspaceProject(project) {
24
42
  function mapTask(task) {
25
43
  return {
26
44
  id: task.id,
27
- content: (0, todoist_api_typescript_1.getSanitizedContent)(task.content),
28
- description: (0, todoist_api_typescript_1.getSanitizedContent)(task.description),
45
+ content: getSanitizedContent(task.content),
46
+ description: getSanitizedContent(task.description),
29
47
  dueDate: task.due?.date,
30
48
  recurring: task.due?.isRecurring && task.due.string ? task.due.string : false,
31
49
  priority: task.priority,
@@ -52,12 +70,12 @@ function mapProject(project) {
52
70
  viewStyle: project.viewStyle,
53
71
  };
54
72
  }
55
- const ErrorSchema = zod_1.default.object({
56
- httpStatusCode: zod_1.default.number(),
57
- responseData: zod_1.default.object({
58
- error: zod_1.default.string(),
59
- errorCode: zod_1.default.number(),
60
- errorTag: zod_1.default.string(),
73
+ const ErrorSchema = z.object({
74
+ httpStatusCode: z.number(),
75
+ responseData: z.object({
76
+ error: z.string(),
77
+ errorCode: z.number(),
78
+ errorTag: z.string(),
61
79
  }),
62
80
  });
63
81
  async function getTasksByFilter({ client, query, limit, cursor, }) {
@@ -84,3 +102,4 @@ async function getTasksByFilter({ client, query, limit, cursor, }) {
84
102
  throw new Error(`${responseData.error} (tag: ${responseData.errorTag}, code: ${responseData.errorCode})`);
85
103
  }
86
104
  }
105
+ export { getTasksByFilter, mapTask, mapProject };
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tool_helpers_1 = require("./tool-helpers");
1
+ import { createMoveTaskArgs, isPersonalProject, isWorkspaceProject, mapProject, mapTask, } from './tool-helpers.js';
4
2
  describe('shared utilities', () => {
5
3
  describe('mapTask', () => {
6
4
  it('should map a basic task correctly', () => {
@@ -21,8 +19,7 @@ describe('shared utilities', () => {
21
19
  timezone: 'UTC',
22
20
  },
23
21
  };
24
- const result = (0, tool_helpers_1.mapTask)(mockTask);
25
- expect(result).toEqual({
22
+ expect(mapTask(mockTask)).toEqual({
26
23
  id: '123',
27
24
  content: 'Test task',
28
25
  description: 'Test description',
@@ -53,7 +50,7 @@ describe('shared utilities', () => {
53
50
  timezone: 'UTC',
54
51
  },
55
52
  };
56
- const result = (0, tool_helpers_1.mapTask)(mockTask);
53
+ const result = mapTask(mockTask);
57
54
  expect(result.recurring).toBe('every day');
58
55
  });
59
56
  });
@@ -69,8 +66,7 @@ describe('shared utilities', () => {
69
66
  inboxProject: false,
70
67
  viewStyle: 'list',
71
68
  };
72
- const result = (0, tool_helpers_1.mapProject)(mockPersonalProject);
73
- expect(result).toEqual({
69
+ expect(mapProject(mockPersonalProject)).toEqual({
74
70
  id: 'proj-1',
75
71
  name: 'Personal Project',
76
72
  color: 'blue',
@@ -90,8 +86,7 @@ describe('shared utilities', () => {
90
86
  isShared: true,
91
87
  viewStyle: 'board',
92
88
  };
93
- const result = (0, tool_helpers_1.mapProject)(mockWorkspaceProject);
94
- expect(result).toEqual({
89
+ expect(mapProject(mockWorkspaceProject)).toEqual({
95
90
  id: 'proj-2',
96
91
  name: 'Workspace Project',
97
92
  color: 'red',
@@ -115,8 +110,8 @@ describe('shared utilities', () => {
115
110
  inboxProject: true,
116
111
  viewStyle: 'list',
117
112
  };
118
- expect((0, tool_helpers_1.isPersonalProject)(personalProject)).toBe(true);
119
- expect((0, tool_helpers_1.isWorkspaceProject)(personalProject)).toBe(false);
113
+ expect(isPersonalProject(personalProject)).toBe(true);
114
+ expect(isWorkspaceProject(personalProject)).toBe(false);
120
115
  });
121
116
  it('should correctly identify workspace projects', () => {
122
117
  const workspaceProject = {
@@ -128,8 +123,34 @@ describe('shared utilities', () => {
128
123
  viewStyle: 'board',
129
124
  accessLevel: 'admin',
130
125
  };
131
- expect((0, tool_helpers_1.isWorkspaceProject)(workspaceProject)).toBe(true);
132
- expect((0, tool_helpers_1.isPersonalProject)(workspaceProject)).toBe(false);
126
+ expect(isWorkspaceProject(workspaceProject)).toBe(true);
127
+ expect(isPersonalProject(workspaceProject)).toBe(false);
128
+ });
129
+ });
130
+ describe('createMoveTaskArgs', () => {
131
+ it('should create MoveTaskArgs for projectId', () => {
132
+ const result = createMoveTaskArgs('task-1', 'project-123');
133
+ expect(result).toEqual({ projectId: 'project-123' });
134
+ });
135
+ it('should create MoveTaskArgs for sectionId', () => {
136
+ const result = createMoveTaskArgs('task-1', undefined, 'section-456');
137
+ expect(result).toEqual({ sectionId: 'section-456' });
138
+ });
139
+ it('should create MoveTaskArgs for parentId', () => {
140
+ const result = createMoveTaskArgs('task-1', undefined, undefined, 'parent-789');
141
+ expect(result).toEqual({ parentId: 'parent-789' });
142
+ });
143
+ it('should throw error when multiple move parameters are provided', () => {
144
+ expect(() => createMoveTaskArgs('task-1', 'project-123', 'section-456')).toThrow('Task task-1: Only one of projectId, sectionId, or parentId can be specified at a time');
145
+ });
146
+ it('should throw error when all three move parameters are provided', () => {
147
+ expect(() => createMoveTaskArgs('task-1', 'project-123', 'section-456', 'parent-789')).toThrow('Task task-1: Only one of projectId, sectionId, or parentId can be specified at a time');
148
+ });
149
+ it('should throw error when no move parameters are provided', () => {
150
+ expect(() => createMoveTaskArgs('task-1')).toThrow('Task task-1: At least one of projectId, sectionId, or parentId must be provided');
151
+ });
152
+ it('should throw error when empty strings are provided', () => {
153
+ expect(() => createMoveTaskArgs('task-1', '', '', '')).toThrow('Task task-1: At least one of projectId, sectionId, or parentId must be provided');
133
154
  });
134
155
  });
135
156
  });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delete-one.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-one.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/delete-one.test.ts"],"names":[],"mappings":""}