@doist/todoist-ai 0.1.0 → 0.1.2
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 +1 -1
- package/dist/cjs/index.js +74 -0
- package/dist/cjs/main.js +28 -0
- package/dist/cjs/mcp-helpers.js +54 -0
- package/dist/cjs/mcp-server.js +68 -0
- package/dist/cjs/todoist-tool.js +2 -0
- package/dist/cjs/tools/account-overview.js +97 -0
- package/dist/cjs/tools/project-overview.js +110 -0
- package/dist/cjs/tools/projects-add-one.js +18 -0
- package/dist/cjs/tools/projects-delete-one.js +17 -0
- package/dist/cjs/tools/projects-list.js +33 -0
- package/dist/cjs/tools/projects-search.js +42 -0
- package/dist/cjs/tools/projects-update-one.js +19 -0
- package/dist/cjs/tools/sections-add-one.js +24 -0
- package/dist/cjs/tools/sections-delete-one.js +17 -0
- package/dist/cjs/tools/sections-search.js +33 -0
- package/dist/cjs/tools/sections-update-one.js +19 -0
- package/dist/cjs/tools/shared.js +78 -0
- package/dist/cjs/tools/subtasks-list-for-parent-task.js +40 -0
- package/dist/cjs/tools/tasks-add-multiple.js +50 -0
- package/dist/cjs/tools/tasks-by-date-range.js +50 -0
- package/dist/cjs/tools/tasks-by-project.js +40 -0
- package/dist/cjs/tools/tasks-complete-multiple.js +29 -0
- package/dist/cjs/tools/tasks-delete-one.js +17 -0
- package/dist/cjs/tools/tasks-list-for-section.js +40 -0
- package/dist/cjs/tools/tasks-list-overdue.js +32 -0
- package/dist/cjs/tools/tasks-organize-multiple.js +43 -0
- package/dist/cjs/tools/tasks-search.js +33 -0
- package/dist/cjs/tools/tasks-update-one.js +45 -0
- package/dist/esm/index.d.ts +477 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +49 -0
- package/dist/esm/main.d.ts.map +1 -0
- package/dist/esm/mcp-helpers.d.ts.map +1 -0
- package/dist/esm/mcp-server.d.ts.map +1 -0
- package/dist/esm/todoist-tool.d.ts.map +1 -0
- package/dist/esm/tools/account-overview.d.ts.map +1 -0
- package/dist/esm/tools/project-overview.d.ts.map +1 -0
- package/dist/esm/tools/projects-add-one.d.ts.map +1 -0
- package/dist/esm/tools/projects-delete-one.d.ts.map +1 -0
- package/dist/esm/tools/projects-list.d.ts.map +1 -0
- package/dist/esm/tools/projects-search.d.ts.map +1 -0
- package/dist/esm/tools/projects-update-one.d.ts.map +1 -0
- package/dist/esm/tools/sections-add-one.d.ts.map +1 -0
- package/dist/esm/tools/sections-delete-one.d.ts.map +1 -0
- package/dist/esm/tools/sections-search.d.ts.map +1 -0
- package/dist/esm/tools/sections-update-one.d.ts.map +1 -0
- package/dist/esm/tools/shared.d.ts.map +1 -0
- package/dist/esm/tools/subtasks-list-for-parent-task.d.ts.map +1 -0
- package/dist/esm/tools/tasks-add-multiple.d.ts.map +1 -0
- package/dist/esm/tools/tasks-by-date-range.d.ts.map +1 -0
- package/dist/esm/tools/tasks-by-project.d.ts.map +1 -0
- package/dist/esm/tools/tasks-complete-multiple.d.ts.map +1 -0
- package/dist/esm/tools/tasks-delete-one.d.ts.map +1 -0
- package/dist/esm/tools/tasks-list-for-section.d.ts.map +1 -0
- package/dist/esm/tools/tasks-list-overdue.d.ts.map +1 -0
- package/dist/esm/tools/tasks-organize-multiple.d.ts.map +1 -0
- package/dist/esm/tools/tasks-search.d.ts.map +1 -0
- package/dist/esm/tools/tasks-update-one.d.ts.map +1 -0
- package/dist/types/index.d.ts +476 -0
- package/dist/types/main.d.ts +1 -0
- package/dist/types/mcp-helpers.d.ts +12 -0
- package/dist/types/mcp-server.d.ts +10 -0
- package/dist/types/todoist-tool.d.ts +34 -0
- package/dist/types/tools/account-overview.d.ts +8 -0
- package/dist/types/tools/project-overview.d.ts +13 -0
- package/dist/types/tools/projects-add-one.d.ts +21 -0
- package/dist/types/tools/projects-delete-one.d.ts +14 -0
- package/dist/types/tools/projects-list.d.ts +17 -0
- package/dist/types/tools/projects-search.d.ts +28 -0
- package/dist/types/tools/projects-update-one.d.ts +14 -0
- package/dist/types/tools/sections-add-one.d.ts +14 -0
- package/dist/types/tools/sections-delete-one.d.ts +14 -0
- package/dist/types/tools/sections-search.d.ts +17 -0
- package/dist/types/tools/sections-update-one.d.ts +14 -0
- package/dist/types/tools/shared.d.ts +54 -0
- package/dist/types/tools/subtasks-list-for-parent-task.d.ts +30 -0
- package/dist/types/tools/tasks-add-multiple.d.ts +49 -0
- package/dist/types/tools/tasks-by-date-range.d.ts +32 -0
- package/dist/types/tools/tasks-by-project.d.ts +30 -0
- package/dist/types/tools/tasks-complete-multiple.d.ts +15 -0
- package/dist/types/tools/tasks-delete-one.d.ts +14 -0
- package/dist/types/tools/tasks-list-for-section.d.ts +30 -0
- package/dist/types/tools/tasks-list-overdue.d.ts +28 -0
- package/dist/types/tools/tasks-organize-multiple.d.ts +36 -0
- package/dist/types/tools/tasks-search.d.ts +30 -0
- package/dist/types/tools/tasks-update-one.d.ts +26 -0
- package/package.json +20 -7
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -1
- package/dist/main.d.ts.map +0 -1
- package/dist/mcp-helpers.d.ts.map +0 -1
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/todoist-tool.d.ts.map +0 -1
- package/dist/tools/account-overview.d.ts.map +0 -1
- package/dist/tools/index.d.ts +0 -23
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -22
- package/dist/tools/project-overview.d.ts.map +0 -1
- package/dist/tools/projects-add-one.d.ts.map +0 -1
- package/dist/tools/projects-delete-one.d.ts.map +0 -1
- package/dist/tools/projects-list.d.ts.map +0 -1
- package/dist/tools/projects-search.d.ts.map +0 -1
- package/dist/tools/projects-update-one.d.ts.map +0 -1
- package/dist/tools/sections-add-one.d.ts.map +0 -1
- package/dist/tools/sections-delete-one.d.ts.map +0 -1
- package/dist/tools/sections-search.d.ts.map +0 -1
- package/dist/tools/sections-update-one.d.ts.map +0 -1
- package/dist/tools/shared.d.ts.map +0 -1
- package/dist/tools/subtasks-list-for-parent-task.d.ts.map +0 -1
- package/dist/tools/tasks-add-multiple.d.ts.map +0 -1
- package/dist/tools/tasks-by-date-range.d.ts.map +0 -1
- package/dist/tools/tasks-by-project.d.ts.map +0 -1
- package/dist/tools/tasks-complete-multiple.d.ts.map +0 -1
- package/dist/tools/tasks-delete-one.d.ts.map +0 -1
- package/dist/tools/tasks-list-for-section.d.ts.map +0 -1
- package/dist/tools/tasks-list-overdue.d.ts.map +0 -1
- package/dist/tools/tasks-organize-multiple.d.ts.map +0 -1
- package/dist/tools/tasks-search.d.ts.map +0 -1
- package/dist/tools/tasks-update-one.d.ts.map +0 -1
- package/src/index.ts +0 -1
- package/src/main.ts +0 -26
- package/src/mcp-helpers.ts +0 -76
- package/src/mcp-server.ts +0 -79
- package/src/todoist-tool.ts +0 -42
- package/src/tools/account-overview.ts +0 -130
- package/src/tools/index.ts +0 -26
- package/src/tools/project-overview.ts +0 -130
- package/src/tools/projects-add-one.ts +0 -19
- package/src/tools/projects-delete-one.ts +0 -18
- package/src/tools/projects-list.ts +0 -36
- package/src/tools/projects-search.ts +0 -49
- package/src/tools/projects-update-one.ts +0 -20
- package/src/tools/sections-add-one.ts +0 -25
- package/src/tools/sections-delete-one.ts +0 -18
- package/src/tools/sections-search.ts +0 -39
- package/src/tools/sections-update-one.ts +0 -20
- package/src/tools/shared.ts +0 -94
- package/src/tools/subtasks-list-for-parent-task.ts +0 -43
- package/src/tools/tasks-add-multiple.ts +0 -53
- package/src/tools/tasks-by-date-range.ts +0 -58
- package/src/tools/tasks-by-project.ts +0 -43
- package/src/tools/tasks-complete-multiple.ts +0 -29
- package/src/tools/tasks-delete-one.ts +0 -18
- package/src/tools/tasks-list-for-section.ts +0 -43
- package/src/tools/tasks-list-overdue.ts +0 -35
- package/src/tools/tasks-organize-multiple.ts +0 -45
- package/src/tools/tasks-search.ts +0 -36
- package/src/tools/tasks-update-one.ts +0 -48
- /package/dist/{main.d.ts → esm/main.d.ts} +0 -0
- /package/dist/{main.js → esm/main.js} +0 -0
- /package/dist/{mcp-helpers.d.ts → esm/mcp-helpers.d.ts} +0 -0
- /package/dist/{mcp-helpers.js → esm/mcp-helpers.js} +0 -0
- /package/dist/{mcp-server.d.ts → esm/mcp-server.d.ts} +0 -0
- /package/dist/{mcp-server.js → esm/mcp-server.js} +0 -0
- /package/dist/{todoist-tool.d.ts → esm/todoist-tool.d.ts} +0 -0
- /package/dist/{todoist-tool.js → esm/todoist-tool.js} +0 -0
- /package/dist/{tools → esm/tools}/account-overview.d.ts +0 -0
- /package/dist/{tools → esm/tools}/account-overview.js +0 -0
- /package/dist/{tools → esm/tools}/project-overview.d.ts +0 -0
- /package/dist/{tools → esm/tools}/project-overview.js +0 -0
- /package/dist/{tools → esm/tools}/projects-add-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/projects-add-one.js +0 -0
- /package/dist/{tools → esm/tools}/projects-delete-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/projects-delete-one.js +0 -0
- /package/dist/{tools → esm/tools}/projects-list.d.ts +0 -0
- /package/dist/{tools → esm/tools}/projects-list.js +0 -0
- /package/dist/{tools → esm/tools}/projects-search.d.ts +0 -0
- /package/dist/{tools → esm/tools}/projects-search.js +0 -0
- /package/dist/{tools → esm/tools}/projects-update-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/projects-update-one.js +0 -0
- /package/dist/{tools → esm/tools}/sections-add-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/sections-add-one.js +0 -0
- /package/dist/{tools → esm/tools}/sections-delete-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/sections-delete-one.js +0 -0
- /package/dist/{tools → esm/tools}/sections-search.d.ts +0 -0
- /package/dist/{tools → esm/tools}/sections-search.js +0 -0
- /package/dist/{tools → esm/tools}/sections-update-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/sections-update-one.js +0 -0
- /package/dist/{tools → esm/tools}/shared.d.ts +0 -0
- /package/dist/{tools → esm/tools}/shared.js +0 -0
- /package/dist/{tools → esm/tools}/subtasks-list-for-parent-task.d.ts +0 -0
- /package/dist/{tools → esm/tools}/subtasks-list-for-parent-task.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-add-multiple.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-add-multiple.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-by-date-range.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-by-date-range.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-by-project.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-by-project.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-complete-multiple.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-complete-multiple.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-delete-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-delete-one.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-list-for-section.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-list-for-section.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-list-overdue.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-list-overdue.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-organize-multiple.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-organize-multiple.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-search.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-search.js +0 -0
- /package/dist/{tools → esm/tools}/tasks-update-one.d.ts +0 -0
- /package/dist/{tools → esm/tools}/tasks-update-one.js +0 -0
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ npm install @doist/todoist-ai
|
|
|
19
19
|
Here's an example using [Vercel's AI SDK](https://ai-sdk.dev/docs/ai-sdk-core/generating-text#streamtext).
|
|
20
20
|
|
|
21
21
|
```js
|
|
22
|
-
import { tasksListByDate, tasksAddMultiple } from "@doist/todoist-ai
|
|
22
|
+
import { tasksListByDate, tasksAddMultiple } from "@doist/todoist-ai";
|
|
23
23
|
import { streamText } from "ai";
|
|
24
24
|
|
|
25
25
|
const result = streamText({
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectOverview = exports.accountOverview = exports.subtasksListForParentTask = exports.tasksListForSection = exports.tasksOrganizeMultiple = exports.tasksUpdateOne = exports.tasksAddMultiple = exports.tasksSearch = exports.tasksListOverdue = exports.tasksListForProject = exports.tasksCompleteMultiple = exports.tasksDeleteOne = exports.tasksListByDate = exports.sectionsDeleteOne = exports.sectionsUpdateOne = exports.sectionsAddOne = exports.sectionsSearch = exports.projectsDeleteOne = exports.projectsUpdateOne = exports.projectsAddOne = exports.projectsSearch = exports.projectsList = exports.getMcpServer = exports.tools = void 0;
|
|
4
|
+
const mcp_server_js_1 = require("./mcp-server.js");
|
|
5
|
+
Object.defineProperty(exports, "getMcpServer", { enumerable: true, get: function () { return mcp_server_js_1.getMcpServer; } });
|
|
6
|
+
const projects_add_one_js_1 = require("./tools/projects-add-one.js");
|
|
7
|
+
Object.defineProperty(exports, "projectsAddOne", { enumerable: true, get: function () { return projects_add_one_js_1.projectsAddOne; } });
|
|
8
|
+
const projects_delete_one_js_1 = require("./tools/projects-delete-one.js");
|
|
9
|
+
Object.defineProperty(exports, "projectsDeleteOne", { enumerable: true, get: function () { return projects_delete_one_js_1.projectsDeleteOne; } });
|
|
10
|
+
const projects_list_js_1 = require("./tools/projects-list.js");
|
|
11
|
+
Object.defineProperty(exports, "projectsList", { enumerable: true, get: function () { return projects_list_js_1.projectsList; } });
|
|
12
|
+
const projects_search_js_1 = require("./tools/projects-search.js");
|
|
13
|
+
Object.defineProperty(exports, "projectsSearch", { enumerable: true, get: function () { return projects_search_js_1.projectsSearch; } });
|
|
14
|
+
const projects_update_one_js_1 = require("./tools/projects-update-one.js");
|
|
15
|
+
Object.defineProperty(exports, "projectsUpdateOne", { enumerable: true, get: function () { return projects_update_one_js_1.projectsUpdateOne; } });
|
|
16
|
+
const sections_add_one_js_1 = require("./tools/sections-add-one.js");
|
|
17
|
+
Object.defineProperty(exports, "sectionsAddOne", { enumerable: true, get: function () { return sections_add_one_js_1.sectionsAddOne; } });
|
|
18
|
+
const sections_delete_one_js_1 = require("./tools/sections-delete-one.js");
|
|
19
|
+
Object.defineProperty(exports, "sectionsDeleteOne", { enumerable: true, get: function () { return sections_delete_one_js_1.sectionsDeleteOne; } });
|
|
20
|
+
const sections_search_js_1 = require("./tools/sections-search.js");
|
|
21
|
+
Object.defineProperty(exports, "sectionsSearch", { enumerable: true, get: function () { return sections_search_js_1.sectionsSearch; } });
|
|
22
|
+
const sections_update_one_js_1 = require("./tools/sections-update-one.js");
|
|
23
|
+
Object.defineProperty(exports, "sectionsUpdateOne", { enumerable: true, get: function () { return sections_update_one_js_1.sectionsUpdateOne; } });
|
|
24
|
+
const tasks_add_multiple_js_1 = require("./tools/tasks-add-multiple.js");
|
|
25
|
+
Object.defineProperty(exports, "tasksAddMultiple", { enumerable: true, get: function () { return tasks_add_multiple_js_1.tasksAddMultiple; } });
|
|
26
|
+
const tasks_by_date_range_js_1 = require("./tools/tasks-by-date-range.js");
|
|
27
|
+
Object.defineProperty(exports, "tasksListByDate", { enumerable: true, get: function () { return tasks_by_date_range_js_1.tasksListByDate; } });
|
|
28
|
+
const tasks_by_project_js_1 = require("./tools/tasks-by-project.js");
|
|
29
|
+
Object.defineProperty(exports, "tasksListForProject", { enumerable: true, get: function () { return tasks_by_project_js_1.tasksListForProject; } });
|
|
30
|
+
const tasks_complete_multiple_js_1 = require("./tools/tasks-complete-multiple.js");
|
|
31
|
+
Object.defineProperty(exports, "tasksCompleteMultiple", { enumerable: true, get: function () { return tasks_complete_multiple_js_1.tasksCompleteMultiple; } });
|
|
32
|
+
const tasks_delete_one_js_1 = require("./tools/tasks-delete-one.js");
|
|
33
|
+
Object.defineProperty(exports, "tasksDeleteOne", { enumerable: true, get: function () { return tasks_delete_one_js_1.tasksDeleteOne; } });
|
|
34
|
+
const tasks_list_for_section_js_1 = require("./tools/tasks-list-for-section.js");
|
|
35
|
+
Object.defineProperty(exports, "tasksListForSection", { enumerable: true, get: function () { return tasks_list_for_section_js_1.tasksListForSection; } });
|
|
36
|
+
const tasks_list_overdue_js_1 = require("./tools/tasks-list-overdue.js");
|
|
37
|
+
Object.defineProperty(exports, "tasksListOverdue", { enumerable: true, get: function () { return tasks_list_overdue_js_1.tasksListOverdue; } });
|
|
38
|
+
const tasks_organize_multiple_js_1 = require("./tools/tasks-organize-multiple.js");
|
|
39
|
+
Object.defineProperty(exports, "tasksOrganizeMultiple", { enumerable: true, get: function () { return tasks_organize_multiple_js_1.tasksOrganizeMultiple; } });
|
|
40
|
+
const tasks_search_js_1 = require("./tools/tasks-search.js");
|
|
41
|
+
Object.defineProperty(exports, "tasksSearch", { enumerable: true, get: function () { return tasks_search_js_1.tasksSearch; } });
|
|
42
|
+
const tasks_update_one_js_1 = require("./tools/tasks-update-one.js");
|
|
43
|
+
Object.defineProperty(exports, "tasksUpdateOne", { enumerable: true, get: function () { return tasks_update_one_js_1.tasksUpdateOne; } });
|
|
44
|
+
const subtasks_list_for_parent_task_js_1 = require("./tools/subtasks-list-for-parent-task.js");
|
|
45
|
+
Object.defineProperty(exports, "subtasksListForParentTask", { enumerable: true, get: function () { return subtasks_list_for_parent_task_js_1.subtasksListForParentTask; } });
|
|
46
|
+
const account_overview_js_1 = require("./tools/account-overview.js");
|
|
47
|
+
Object.defineProperty(exports, "accountOverview", { enumerable: true, get: function () { return account_overview_js_1.accountOverview; } });
|
|
48
|
+
const project_overview_js_1 = require("./tools/project-overview.js");
|
|
49
|
+
Object.defineProperty(exports, "projectOverview", { enumerable: true, get: function () { return project_overview_js_1.projectOverview; } });
|
|
50
|
+
const tools = {
|
|
51
|
+
projectsList: projects_list_js_1.projectsList,
|
|
52
|
+
projectsSearch: projects_search_js_1.projectsSearch,
|
|
53
|
+
projectsAddOne: projects_add_one_js_1.projectsAddOne,
|
|
54
|
+
projectsUpdateOne: projects_update_one_js_1.projectsUpdateOne,
|
|
55
|
+
projectsDeleteOne: projects_delete_one_js_1.projectsDeleteOne,
|
|
56
|
+
sectionsSearch: sections_search_js_1.sectionsSearch,
|
|
57
|
+
sectionsAddOne: sections_add_one_js_1.sectionsAddOne,
|
|
58
|
+
sectionsUpdateOne: sections_update_one_js_1.sectionsUpdateOne,
|
|
59
|
+
sectionsDeleteOne: sections_delete_one_js_1.sectionsDeleteOne,
|
|
60
|
+
tasksListByDate: tasks_by_date_range_js_1.tasksListByDate,
|
|
61
|
+
tasksDeleteOne: tasks_delete_one_js_1.tasksDeleteOne,
|
|
62
|
+
tasksCompleteMultiple: tasks_complete_multiple_js_1.tasksCompleteMultiple,
|
|
63
|
+
tasksListForProject: tasks_by_project_js_1.tasksListForProject,
|
|
64
|
+
tasksListOverdue: tasks_list_overdue_js_1.tasksListOverdue,
|
|
65
|
+
tasksSearch: tasks_search_js_1.tasksSearch,
|
|
66
|
+
tasksAddMultiple: tasks_add_multiple_js_1.tasksAddMultiple,
|
|
67
|
+
tasksUpdateOne: tasks_update_one_js_1.tasksUpdateOne,
|
|
68
|
+
tasksOrganizeMultiple: tasks_organize_multiple_js_1.tasksOrganizeMultiple,
|
|
69
|
+
tasksListForSection: tasks_list_for_section_js_1.tasksListForSection,
|
|
70
|
+
subtasksListForParentTask: subtasks_list_for_parent_task_js_1.subtasksListForParentTask,
|
|
71
|
+
accountOverview: account_overview_js_1.accountOverview,
|
|
72
|
+
projectOverview: project_overview_js_1.projectOverview,
|
|
73
|
+
};
|
|
74
|
+
exports.tools = tools;
|
package/dist/cjs/main.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
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_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const mcp_server_js_1 = require("./mcp-server.js");
|
|
9
|
+
function main() {
|
|
10
|
+
const todoistApiKey = process.env.TODOIST_API_KEY;
|
|
11
|
+
if (!todoistApiKey) {
|
|
12
|
+
throw new Error("TODOIST_API_KEY is not set");
|
|
13
|
+
}
|
|
14
|
+
const server = (0, mcp_server_js_1.getMcpServer)({ todoistApiKey });
|
|
15
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
16
|
+
server
|
|
17
|
+
.connect(transport)
|
|
18
|
+
.then(() => {
|
|
19
|
+
// We use console.error because standard I/O is being used for the MCP server communication.
|
|
20
|
+
console.error("Server started");
|
|
21
|
+
})
|
|
22
|
+
.catch((error) => {
|
|
23
|
+
console.error("Error starting the Todoist MCP server:", error);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
dotenv_1.default.config();
|
|
28
|
+
main();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTool = registerTool;
|
|
4
|
+
function textContent(text) {
|
|
5
|
+
return {
|
|
6
|
+
content: [{ type: "text", text }],
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function jsonContent(data) {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{
|
|
13
|
+
type: "text",
|
|
14
|
+
mimeType: "application/json",
|
|
15
|
+
text: JSON.stringify(data, null, 2),
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function textOrJsonContent(data) {
|
|
21
|
+
return typeof data === "string" ? textContent(data) : jsonContent(data);
|
|
22
|
+
}
|
|
23
|
+
function errorContent(error) {
|
|
24
|
+
return {
|
|
25
|
+
...textContent(error),
|
|
26
|
+
isError: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Register a Todoist tool in an MCP server.
|
|
31
|
+
* @param tool - The tool to register.
|
|
32
|
+
* @param server - The server to register the tool on.
|
|
33
|
+
* @param client - The Todoist API client to use to execute the tool.
|
|
34
|
+
*/
|
|
35
|
+
function registerTool(tool, server, client) {
|
|
36
|
+
// @ts-ignore I give up
|
|
37
|
+
const cb = async (args, _context) => {
|
|
38
|
+
try {
|
|
39
|
+
const result = await tool.execute(args, client);
|
|
40
|
+
return textOrJsonContent(result);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(`Error executing tool ${tool.name}:`, {
|
|
44
|
+
args,
|
|
45
|
+
error,
|
|
46
|
+
});
|
|
47
|
+
const message = error instanceof Error
|
|
48
|
+
? error.message
|
|
49
|
+
: "An unknown error occurred";
|
|
50
|
+
return errorContent(message);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
server.tool(tool.name, tool.description, tool.parameters, cb);
|
|
54
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
6
|
+
const mcp_helpers_js_1 = require("./mcp-helpers.js");
|
|
7
|
+
const projects_add_one_js_1 = require("./tools/projects-add-one.js");
|
|
8
|
+
const projects_delete_one_js_1 = require("./tools/projects-delete-one.js");
|
|
9
|
+
const projects_list_js_1 = require("./tools/projects-list.js");
|
|
10
|
+
const projects_search_js_1 = require("./tools/projects-search.js");
|
|
11
|
+
const projects_update_one_js_1 = require("./tools/projects-update-one.js");
|
|
12
|
+
const sections_add_one_js_1 = require("./tools/sections-add-one.js");
|
|
13
|
+
const sections_delete_one_js_1 = require("./tools/sections-delete-one.js");
|
|
14
|
+
const sections_search_js_1 = require("./tools/sections-search.js");
|
|
15
|
+
const sections_update_one_js_1 = require("./tools/sections-update-one.js");
|
|
16
|
+
const subtasks_list_for_parent_task_js_1 = require("./tools/subtasks-list-for-parent-task.js");
|
|
17
|
+
const account_overview_js_1 = require("./tools/account-overview.js");
|
|
18
|
+
const project_overview_js_1 = require("./tools/project-overview.js");
|
|
19
|
+
const tasks_add_multiple_js_1 = require("./tools/tasks-add-multiple.js");
|
|
20
|
+
const tasks_by_date_range_js_1 = require("./tools/tasks-by-date-range.js");
|
|
21
|
+
const tasks_by_project_js_1 = require("./tools/tasks-by-project.js");
|
|
22
|
+
const tasks_complete_multiple_js_1 = require("./tools/tasks-complete-multiple.js");
|
|
23
|
+
const tasks_delete_one_js_1 = require("./tools/tasks-delete-one.js");
|
|
24
|
+
const tasks_list_for_section_js_1 = require("./tools/tasks-list-for-section.js");
|
|
25
|
+
const tasks_list_overdue_js_1 = require("./tools/tasks-list-overdue.js");
|
|
26
|
+
const tasks_organize_multiple_js_1 = require("./tools/tasks-organize-multiple.js");
|
|
27
|
+
const tasks_search_js_1 = require("./tools/tasks-search.js");
|
|
28
|
+
const tasks_update_one_js_1 = require("./tools/tasks-update-one.js");
|
|
29
|
+
const instructions = `
|
|
30
|
+
Tools to help you manage your todoist tasks.
|
|
31
|
+
`;
|
|
32
|
+
/**
|
|
33
|
+
* Create the MCP server.
|
|
34
|
+
* @param todoistApiKey - The API key for the todoist account.
|
|
35
|
+
* @returns the MCP server.
|
|
36
|
+
*/
|
|
37
|
+
function getMcpServer({ todoistApiKey }) {
|
|
38
|
+
const server = new mcp_js_1.McpServer({ name: "todoist-mcp-server", version: "0.1.0" }, {
|
|
39
|
+
capabilities: {
|
|
40
|
+
tools: { listChanged: true },
|
|
41
|
+
},
|
|
42
|
+
instructions,
|
|
43
|
+
});
|
|
44
|
+
const todoist = new todoist_api_typescript_1.TodoistApi(todoistApiKey);
|
|
45
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_by_date_range_js_1.tasksListByDate, server, todoist);
|
|
46
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_list_overdue_js_1.tasksListOverdue, server, todoist);
|
|
47
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_by_project_js_1.tasksListForProject, server, todoist);
|
|
48
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_search_js_1.tasksSearch, server, todoist);
|
|
49
|
+
(0, mcp_helpers_js_1.registerTool)(projects_list_js_1.projectsList, server, todoist);
|
|
50
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_add_multiple_js_1.tasksAddMultiple, server, todoist);
|
|
51
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_update_one_js_1.tasksUpdateOne, server, todoist);
|
|
52
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_delete_one_js_1.tasksDeleteOne, server, todoist);
|
|
53
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_complete_multiple_js_1.tasksCompleteMultiple, server, todoist);
|
|
54
|
+
(0, mcp_helpers_js_1.registerTool)(projects_add_one_js_1.projectsAddOne, server, todoist);
|
|
55
|
+
(0, mcp_helpers_js_1.registerTool)(projects_update_one_js_1.projectsUpdateOne, server, todoist);
|
|
56
|
+
(0, mcp_helpers_js_1.registerTool)(sections_add_one_js_1.sectionsAddOne, server, todoist);
|
|
57
|
+
(0, mcp_helpers_js_1.registerTool)(sections_update_one_js_1.sectionsUpdateOne, server, todoist);
|
|
58
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_organize_multiple_js_1.tasksOrganizeMultiple, server, todoist);
|
|
59
|
+
(0, mcp_helpers_js_1.registerTool)(subtasks_list_for_parent_task_js_1.subtasksListForParentTask, server, todoist);
|
|
60
|
+
(0, mcp_helpers_js_1.registerTool)(tasks_list_for_section_js_1.tasksListForSection, server, todoist);
|
|
61
|
+
(0, mcp_helpers_js_1.registerTool)(projects_delete_one_js_1.projectsDeleteOne, server, todoist);
|
|
62
|
+
(0, mcp_helpers_js_1.registerTool)(projects_search_js_1.projectsSearch, server, todoist);
|
|
63
|
+
(0, mcp_helpers_js_1.registerTool)(sections_delete_one_js_1.sectionsDeleteOne, server, todoist);
|
|
64
|
+
(0, mcp_helpers_js_1.registerTool)(sections_search_js_1.sectionsSearch, server, todoist);
|
|
65
|
+
(0, mcp_helpers_js_1.registerTool)(account_overview_js_1.accountOverview, server, todoist);
|
|
66
|
+
(0, mcp_helpers_js_1.registerTool)(project_overview_js_1.projectOverview, server, todoist);
|
|
67
|
+
return server;
|
|
68
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accountOverview = void 0;
|
|
4
|
+
const ArgsSchema = {};
|
|
5
|
+
function buildProjectTree(projects) {
|
|
6
|
+
// Sort projects by childOrder, then build a tree
|
|
7
|
+
const byId = {};
|
|
8
|
+
for (const p of projects) {
|
|
9
|
+
byId[p.id] = {
|
|
10
|
+
...p,
|
|
11
|
+
children: [],
|
|
12
|
+
childOrder: p.childOrder ?? 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const roots = [];
|
|
16
|
+
for (const p of projects) {
|
|
17
|
+
const current = byId[p.id];
|
|
18
|
+
if (!current)
|
|
19
|
+
continue;
|
|
20
|
+
if (p.parentId) {
|
|
21
|
+
const parent = byId[p.parentId];
|
|
22
|
+
if (parent) {
|
|
23
|
+
parent.children.push(current);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
roots.push(current);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
roots.push(current);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function sortTree(nodes) {
|
|
34
|
+
nodes.sort((a, b) => a.childOrder - b.childOrder);
|
|
35
|
+
for (const n of nodes) {
|
|
36
|
+
sortTree(n.children);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
sortTree(roots);
|
|
40
|
+
return roots;
|
|
41
|
+
}
|
|
42
|
+
async function getSectionsByProject(client, projectIds) {
|
|
43
|
+
const result = {};
|
|
44
|
+
await Promise.all(projectIds.map(async (projectId) => {
|
|
45
|
+
const { results } = await client.getSections({ projectId });
|
|
46
|
+
result[projectId] = results;
|
|
47
|
+
}));
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
function renderProjectMarkdown(project, sectionsByProject, indent = "") {
|
|
51
|
+
const lines = [];
|
|
52
|
+
lines.push(`${indent}- Project: ${project.name} (id=${project.id})`);
|
|
53
|
+
const sections = sectionsByProject[project.id] || [];
|
|
54
|
+
for (const section of sections) {
|
|
55
|
+
lines.push(`${indent} - Section: ${section.name} (id=${section.id})`);
|
|
56
|
+
}
|
|
57
|
+
for (const child of project.children) {
|
|
58
|
+
lines.push(...renderProjectMarkdown(child, sectionsByProject, `${indent} `));
|
|
59
|
+
}
|
|
60
|
+
return lines;
|
|
61
|
+
}
|
|
62
|
+
const accountOverview = {
|
|
63
|
+
name: "account-overview",
|
|
64
|
+
description: "Get a Markdown overview of all projects (with hierarchy and sections) and the inbox project. Useful in almost any context before engaging with Todoist further.",
|
|
65
|
+
parameters: ArgsSchema,
|
|
66
|
+
async execute(_args, client) {
|
|
67
|
+
const { results: projects } = await client.getProjects({});
|
|
68
|
+
const inbox = projects.find((p) => p.isInboxProject === true);
|
|
69
|
+
const nonInbox = projects.filter((p) => p.isInboxProject !== true);
|
|
70
|
+
const tree = buildProjectTree(nonInbox);
|
|
71
|
+
const allProjectIds = projects.map((p) => p.id);
|
|
72
|
+
const sectionsByProject = await getSectionsByProject(client, allProjectIds);
|
|
73
|
+
const lines = ["# Personal Projects", ""];
|
|
74
|
+
if (inbox) {
|
|
75
|
+
lines.push(`- Inbox Project: ${inbox.name} (id=${inbox.id})`);
|
|
76
|
+
for (const section of sectionsByProject[inbox.id] || []) {
|
|
77
|
+
lines.push(` - Section: ${section.name} (id=${section.id})`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (tree.length) {
|
|
81
|
+
for (const project of tree) {
|
|
82
|
+
lines.push(...renderProjectMarkdown(project, sectionsByProject));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
lines.push("_No projects found._");
|
|
87
|
+
}
|
|
88
|
+
lines.push("");
|
|
89
|
+
// Add explanation about nesting if there are nested projects
|
|
90
|
+
const hasNested = tree.some((p) => p.children.length > 0);
|
|
91
|
+
if (hasNested) {
|
|
92
|
+
lines.push("_Note: Indentation indicates that a project is a sub-project of the one above it. This allows for organizing projects hierarchically, with parent projects containing related sub-projects._", "");
|
|
93
|
+
}
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
exports.accountOverview = accountOverview;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectOverview = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.js");
|
|
6
|
+
const ArgsSchema = {
|
|
7
|
+
projectId: zod_1.z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1)
|
|
10
|
+
.describe("The ID of the project to get an overview for."),
|
|
11
|
+
};
|
|
12
|
+
function buildTaskTree(tasks) {
|
|
13
|
+
const byId = {};
|
|
14
|
+
for (const task of tasks) {
|
|
15
|
+
byId[task.id] = { ...task, children: [] };
|
|
16
|
+
}
|
|
17
|
+
const roots = [];
|
|
18
|
+
for (const task of tasks) {
|
|
19
|
+
const node = byId[task.id];
|
|
20
|
+
if (!node)
|
|
21
|
+
continue;
|
|
22
|
+
if (!task.parentId) {
|
|
23
|
+
roots.push(node);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const parent = byId[task.parentId];
|
|
27
|
+
if (parent) {
|
|
28
|
+
parent.children.push(node);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
roots.push(node);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return roots;
|
|
35
|
+
}
|
|
36
|
+
function renderTaskTreeMarkdown(tasks, indent = "") {
|
|
37
|
+
const lines = [];
|
|
38
|
+
for (const task of tasks) {
|
|
39
|
+
const idPart = `id=${task.id}`;
|
|
40
|
+
const duePart = task.dueDate ? `; due=${task.dueDate}` : "";
|
|
41
|
+
const contentPart = `; content=${task.content}`;
|
|
42
|
+
lines.push(`${indent}- ${idPart}${duePart}${contentPart}`);
|
|
43
|
+
if (task.children.length > 0) {
|
|
44
|
+
lines.push(...renderTaskTreeMarkdown(task.children, `${indent} `));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return lines;
|
|
48
|
+
}
|
|
49
|
+
async function getAllTasksForProject(client, projectId) {
|
|
50
|
+
let allTasks = [];
|
|
51
|
+
let cursor = undefined;
|
|
52
|
+
do {
|
|
53
|
+
const { results, nextCursor } = await client.getTasks({
|
|
54
|
+
projectId,
|
|
55
|
+
limit: 50,
|
|
56
|
+
cursor: cursor ?? undefined,
|
|
57
|
+
});
|
|
58
|
+
allTasks = allTasks.concat(results.map(shared_js_1.mapTask));
|
|
59
|
+
cursor = nextCursor ?? undefined;
|
|
60
|
+
} while (cursor);
|
|
61
|
+
return allTasks;
|
|
62
|
+
}
|
|
63
|
+
async function getProjectSections(client, projectId) {
|
|
64
|
+
const { results } = await client.getSections({ projectId });
|
|
65
|
+
return results;
|
|
66
|
+
}
|
|
67
|
+
const projectOverview = {
|
|
68
|
+
name: "project-overview",
|
|
69
|
+
description: "Get a Markdown overview of a single project, including its sections and all tasks. Tasks are grouped by section, with tasks not in any section listed first. Each task is listed as '- id=TASKID; due=YYYY-MM-DD; content=TASK CONTENT' (omit due if not present). Subtasks are nested as indented list items.",
|
|
70
|
+
parameters: ArgsSchema,
|
|
71
|
+
async execute(args, client) {
|
|
72
|
+
const { projectId } = args;
|
|
73
|
+
const project = await client.getProject(projectId);
|
|
74
|
+
const sections = await getProjectSections(client, projectId);
|
|
75
|
+
const allTasks = await getAllTasksForProject(client, projectId);
|
|
76
|
+
// Group tasks by sectionId
|
|
77
|
+
const tasksBySection = {};
|
|
78
|
+
for (const section of sections) {
|
|
79
|
+
tasksBySection[section.id] = [];
|
|
80
|
+
}
|
|
81
|
+
const tasksWithoutSection = [];
|
|
82
|
+
for (const task of allTasks) {
|
|
83
|
+
if (task.sectionId && tasksBySection[task.sectionId]) {
|
|
84
|
+
// biome-ignore lint/style/noNonNullAssertion: the "if" above ensures that it is defined
|
|
85
|
+
tasksBySection[task.sectionId].push(task);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
tasksWithoutSection.push(task);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const lines = [`# ${project.name}`];
|
|
92
|
+
if (tasksWithoutSection.length > 0) {
|
|
93
|
+
lines.push("");
|
|
94
|
+
const tree = buildTaskTree(tasksWithoutSection);
|
|
95
|
+
lines.push(...renderTaskTreeMarkdown(tree));
|
|
96
|
+
}
|
|
97
|
+
for (const section of sections) {
|
|
98
|
+
lines.push("");
|
|
99
|
+
lines.push(`## ${section.name}`);
|
|
100
|
+
const sectionTasks = tasksBySection[section.id];
|
|
101
|
+
if (!sectionTasks?.length) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const tree = buildTaskTree(sectionTasks);
|
|
105
|
+
lines.push(...renderTaskTreeMarkdown(tree));
|
|
106
|
+
}
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
exports.projectOverview = projectOverview;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectsAddOne = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.js");
|
|
6
|
+
const ArgsSchema = {
|
|
7
|
+
name: zod_1.z.string().min(1).describe("The name of the project to add."),
|
|
8
|
+
};
|
|
9
|
+
const projectsAddOne = {
|
|
10
|
+
name: "projects-add-one",
|
|
11
|
+
description: "Add a new project.",
|
|
12
|
+
parameters: ArgsSchema,
|
|
13
|
+
async execute(args, client) {
|
|
14
|
+
const project = await client.addProject({ name: args.name });
|
|
15
|
+
return (0, shared_js_1.mapProject)(project);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
exports.projectsAddOne = projectsAddOne;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectsDeleteOne = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
id: zod_1.z.string().min(1).describe("The ID of the project to delete."),
|
|
7
|
+
};
|
|
8
|
+
const projectsDeleteOne = {
|
|
9
|
+
name: "projects-delete-one",
|
|
10
|
+
description: "Delete a project by its ID.",
|
|
11
|
+
parameters: ArgsSchema,
|
|
12
|
+
async execute(args, client) {
|
|
13
|
+
await client.deleteProject(args.id);
|
|
14
|
+
return { success: true };
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
exports.projectsDeleteOne = projectsDeleteOne;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectsList = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
limit: zod_1.z
|
|
7
|
+
.number()
|
|
8
|
+
.int()
|
|
9
|
+
.min(1)
|
|
10
|
+
.max(100)
|
|
11
|
+
.default(50)
|
|
12
|
+
.describe("The maximum number of projects to return."),
|
|
13
|
+
cursor: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("The cursor to get the next page of projects (cursor is obtained from the previous call to this tool, with the same parameters)."),
|
|
17
|
+
};
|
|
18
|
+
const projectsList = {
|
|
19
|
+
name: "projects-list",
|
|
20
|
+
description: "List all projects for the user.",
|
|
21
|
+
parameters: ArgsSchema,
|
|
22
|
+
async execute(args, client) {
|
|
23
|
+
const { results, nextCursor } = await client.getProjects({
|
|
24
|
+
limit: args.limit,
|
|
25
|
+
cursor: args.cursor ?? null,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
projects: results,
|
|
29
|
+
nextCursor,
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
exports.projectsList = projectsList;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectsSearch = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const shared_js_1 = require("./shared.js");
|
|
6
|
+
const ArgsSchema = {
|
|
7
|
+
search: zod_1.z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe("Search for a project by name (partial and case insensitive match). If omitted, all projects are returned."),
|
|
11
|
+
limit: zod_1.z
|
|
12
|
+
.number()
|
|
13
|
+
.int()
|
|
14
|
+
.min(1)
|
|
15
|
+
.max(100)
|
|
16
|
+
.default(50)
|
|
17
|
+
.describe("The maximum number of projects to return."),
|
|
18
|
+
cursor: zod_1.z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("The cursor to get the next page of projects (cursor is obtained from the previous call to this tool, with the same parameters)."),
|
|
22
|
+
};
|
|
23
|
+
const projectsSearch = {
|
|
24
|
+
name: "projects-search",
|
|
25
|
+
description: "Search for projects by name or other criteria.",
|
|
26
|
+
parameters: ArgsSchema,
|
|
27
|
+
async execute(args, client) {
|
|
28
|
+
const { results, nextCursor } = await client.getProjects({
|
|
29
|
+
limit: args.limit,
|
|
30
|
+
cursor: args.cursor ?? null,
|
|
31
|
+
});
|
|
32
|
+
const searchLower = args.search ? args.search.toLowerCase() : undefined;
|
|
33
|
+
const filtered = searchLower
|
|
34
|
+
? results.filter((project) => project.name.toLowerCase().includes(searchLower))
|
|
35
|
+
: results;
|
|
36
|
+
return {
|
|
37
|
+
projects: filtered.map(shared_js_1.mapProject),
|
|
38
|
+
nextCursor,
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
exports.projectsSearch = projectsSearch;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.projectsUpdateOne = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
id: zod_1.z.string().min(1).describe("The ID of the project to update."),
|
|
7
|
+
name: zod_1.z.string().min(1).describe("The new name for the project."),
|
|
8
|
+
};
|
|
9
|
+
const projectsUpdateOne = {
|
|
10
|
+
name: "projects-update-one",
|
|
11
|
+
description: "Update a project's name by its ID.",
|
|
12
|
+
parameters: ArgsSchema,
|
|
13
|
+
async execute(args, client) {
|
|
14
|
+
const { id, name } = args;
|
|
15
|
+
const project = await client.updateProject(id, { name });
|
|
16
|
+
return project;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
exports.projectsUpdateOne = projectsUpdateOne;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sectionsAddOne = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
name: zod_1.z.string().min(1).describe("The name of the section to add."),
|
|
7
|
+
projectId: zod_1.z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1)
|
|
10
|
+
.describe("The ID of the project to add the section to."),
|
|
11
|
+
};
|
|
12
|
+
const sectionsAddOne = {
|
|
13
|
+
name: "sections-add-one",
|
|
14
|
+
description: "Add a new section to a project.",
|
|
15
|
+
parameters: ArgsSchema,
|
|
16
|
+
async execute(args, client) {
|
|
17
|
+
const section = await client.addSection({
|
|
18
|
+
name: args.name,
|
|
19
|
+
projectId: args.projectId,
|
|
20
|
+
});
|
|
21
|
+
return section;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
exports.sectionsAddOne = sectionsAddOne;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sectionsDeleteOne = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
id: zod_1.z.string().min(1).describe("The ID of the section to delete."),
|
|
7
|
+
};
|
|
8
|
+
const sectionsDeleteOne = {
|
|
9
|
+
name: "sections-delete-one",
|
|
10
|
+
description: "Delete a section by its ID.",
|
|
11
|
+
parameters: ArgsSchema,
|
|
12
|
+
async execute(args, client) {
|
|
13
|
+
await client.deleteSection(args.id);
|
|
14
|
+
return { success: true };
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
exports.sectionsDeleteOne = sectionsDeleteOne;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sectionsSearch = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ArgsSchema = {
|
|
6
|
+
projectId: zod_1.z
|
|
7
|
+
.string()
|
|
8
|
+
.min(1)
|
|
9
|
+
.describe("The ID of the project to search sections in."),
|
|
10
|
+
search: zod_1.z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Search for a section by name (partial and case insensitive match). If omitted, all sections in the project are returned."),
|
|
14
|
+
};
|
|
15
|
+
const sectionsSearch = {
|
|
16
|
+
name: "sections-search",
|
|
17
|
+
description: "Search for sections by name or other criteria in a project.",
|
|
18
|
+
parameters: ArgsSchema,
|
|
19
|
+
async execute(args, client) {
|
|
20
|
+
const { results } = await client.getSections({
|
|
21
|
+
projectId: args.projectId,
|
|
22
|
+
});
|
|
23
|
+
const searchLower = args.search ? args.search.toLowerCase() : undefined;
|
|
24
|
+
const filtered = searchLower
|
|
25
|
+
? results.filter((section) => section.name.toLowerCase().includes(searchLower))
|
|
26
|
+
: results;
|
|
27
|
+
return filtered.map((section) => ({
|
|
28
|
+
id: section.id,
|
|
29
|
+
name: section.name,
|
|
30
|
+
}));
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
exports.sectionsSearch = sectionsSearch;
|