@jhl8041/dooray-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.serena/project.yml +84 -0
  3. package/CLAUDE.md +119 -0
  4. package/README.md +82 -0
  5. package/dist/api/client.d.ts +70 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +186 -0
  8. package/dist/api/client.js.map +1 -0
  9. package/dist/api/common.d.ts +14 -0
  10. package/dist/api/common.d.ts.map +1 -0
  11. package/dist/api/common.js +25 -0
  12. package/dist/api/common.js.map +1 -0
  13. package/dist/api/projects.d.ts +83 -0
  14. package/dist/api/projects.d.ts.map +1 -0
  15. package/dist/api/projects.js +300 -0
  16. package/dist/api/projects.js.map +1 -0
  17. package/dist/api/wiki.d.ts +38 -0
  18. package/dist/api/wiki.d.ts.map +1 -0
  19. package/dist/api/wiki.js +95 -0
  20. package/dist/api/wiki.js.map +1 -0
  21. package/dist/index.d.ts +7 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +227 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/tools/common/get-my-member-info.d.ts +29 -0
  26. package/dist/tools/common/get-my-member-info.d.ts.map +1 -0
  27. package/dist/tools/common/get-my-member-info.js +95 -0
  28. package/dist/tools/common/get-my-member-info.js.map +1 -0
  29. package/dist/tools/projects/create-task-comment.d.ts +92 -0
  30. package/dist/tools/projects/create-task-comment.d.ts.map +1 -0
  31. package/dist/tools/projects/create-task-comment.js +171 -0
  32. package/dist/tools/projects/create-task-comment.js.map +1 -0
  33. package/dist/tools/projects/create-task.d.ts +191 -0
  34. package/dist/tools/projects/create-task.d.ts.map +1 -0
  35. package/dist/tools/projects/create-task.js +217 -0
  36. package/dist/tools/projects/create-task.js.map +1 -0
  37. package/dist/tools/projects/get-milestone-list.d.ts +49 -0
  38. package/dist/tools/projects/get-milestone-list.d.ts.map +1 -0
  39. package/dist/tools/projects/get-milestone-list.js +112 -0
  40. package/dist/tools/projects/get-milestone-list.js.map +1 -0
  41. package/dist/tools/projects/get-project-list.d.ts +50 -0
  42. package/dist/tools/projects/get-project-list.d.ts.map +1 -0
  43. package/dist/tools/projects/get-project-list.js +113 -0
  44. package/dist/tools/projects/get-project-list.js.map +1 -0
  45. package/dist/tools/projects/get-project-member-group-list.d.ts +55 -0
  46. package/dist/tools/projects/get-project-member-group-list.d.ts.map +1 -0
  47. package/dist/tools/projects/get-project-member-group-list.js +127 -0
  48. package/dist/tools/projects/get-project-member-group-list.js.map +1 -0
  49. package/dist/tools/projects/get-project-member-list.d.ts +66 -0
  50. package/dist/tools/projects/get-project-member-list.d.ts.map +1 -0
  51. package/dist/tools/projects/get-project-member-list.js +159 -0
  52. package/dist/tools/projects/get-project-member-list.js.map +1 -0
  53. package/dist/tools/projects/get-project-template-list.d.ts +55 -0
  54. package/dist/tools/projects/get-project-template-list.d.ts.map +1 -0
  55. package/dist/tools/projects/get-project-template-list.js +127 -0
  56. package/dist/tools/projects/get-project-template-list.js.map +1 -0
  57. package/dist/tools/projects/get-project-template.d.ts +48 -0
  58. package/dist/tools/projects/get-project-template.d.ts.map +1 -0
  59. package/dist/tools/projects/get-project-template.js +132 -0
  60. package/dist/tools/projects/get-project-template.js.map +1 -0
  61. package/dist/tools/projects/get-project-workflow-list.d.ts +41 -0
  62. package/dist/tools/projects/get-project-workflow-list.d.ts.map +1 -0
  63. package/dist/tools/projects/get-project-workflow-list.js +107 -0
  64. package/dist/tools/projects/get-project-workflow-list.js.map +1 -0
  65. package/dist/tools/projects/get-project.d.ts +41 -0
  66. package/dist/tools/projects/get-project.d.ts.map +1 -0
  67. package/dist/tools/projects/get-project.js +110 -0
  68. package/dist/tools/projects/get-project.js.map +1 -0
  69. package/dist/tools/projects/get-tag-list.d.ts +55 -0
  70. package/dist/tools/projects/get-tag-list.d.ts.map +1 -0
  71. package/dist/tools/projects/get-tag-list.js +145 -0
  72. package/dist/tools/projects/get-tag-list.js.map +1 -0
  73. package/dist/tools/projects/get-task-comment-list.d.ts +63 -0
  74. package/dist/tools/projects/get-task-comment-list.d.ts.map +1 -0
  75. package/dist/tools/projects/get-task-comment-list.js +136 -0
  76. package/dist/tools/projects/get-task-comment-list.js.map +1 -0
  77. package/dist/tools/projects/get-task-list.d.ts +184 -0
  78. package/dist/tools/projects/get-task-list.d.ts.map +1 -0
  79. package/dist/tools/projects/get-task-list.js +257 -0
  80. package/dist/tools/projects/get-task-list.js.map +1 -0
  81. package/dist/tools/projects/get-task.d.ts +48 -0
  82. package/dist/tools/projects/get-task.d.ts.map +1 -0
  83. package/dist/tools/projects/get-task.js +130 -0
  84. package/dist/tools/projects/get-task.js.map +1 -0
  85. package/dist/tools/projects/update-task-comment.d.ts +92 -0
  86. package/dist/tools/projects/update-task-comment.d.ts.map +1 -0
  87. package/dist/tools/projects/update-task-comment.js +176 -0
  88. package/dist/tools/projects/update-task-comment.js.map +1 -0
  89. package/dist/tools/projects/update-task.d.ts +196 -0
  90. package/dist/tools/projects/update-task.d.ts.map +1 -0
  91. package/dist/tools/projects/update-task.js +227 -0
  92. package/dist/tools/projects/update-task.js.map +1 -0
  93. package/dist/tools/wiki/create-wiki-page.d.ts +89 -0
  94. package/dist/tools/wiki/create-wiki-page.d.ts.map +1 -0
  95. package/dist/tools/wiki/create-wiki-page.js +142 -0
  96. package/dist/tools/wiki/create-wiki-page.js.map +1 -0
  97. package/dist/tools/wiki/get-wiki-list.d.ts +58 -0
  98. package/dist/tools/wiki/get-wiki-list.d.ts.map +1 -0
  99. package/dist/tools/wiki/get-wiki-list.js +118 -0
  100. package/dist/tools/wiki/get-wiki-list.js.map +1 -0
  101. package/dist/tools/wiki/get-wiki-page-list.d.ts +65 -0
  102. package/dist/tools/wiki/get-wiki-page-list.d.ts.map +1 -0
  103. package/dist/tools/wiki/get-wiki-page-list.js +125 -0
  104. package/dist/tools/wiki/get-wiki-page-list.js.map +1 -0
  105. package/dist/tools/wiki/get-wiki-page.d.ts +48 -0
  106. package/dist/tools/wiki/get-wiki-page.d.ts.map +1 -0
  107. package/dist/tools/wiki/get-wiki-page.js +100 -0
  108. package/dist/tools/wiki/get-wiki-page.js.map +1 -0
  109. package/dist/tools/wiki/update-wiki-page.d.ts +89 -0
  110. package/dist/tools/wiki/update-wiki-page.d.ts.map +1 -0
  111. package/dist/tools/wiki/update-wiki-page.js +140 -0
  112. package/dist/tools/wiki/update-wiki-page.js.map +1 -0
  113. package/dist/types/config.d.ts +18 -0
  114. package/dist/types/config.d.ts.map +1 -0
  115. package/dist/types/config.js +6 -0
  116. package/dist/types/config.js.map +1 -0
  117. package/dist/types/dooray-api.d.ts +387 -0
  118. package/dist/types/dooray-api.d.ts.map +1 -0
  119. package/dist/types/dooray-api.js +7 -0
  120. package/dist/types/dooray-api.js.map +1 -0
  121. package/dist/utils/errors.d.ts +28 -0
  122. package/dist/utils/errors.d.ts.map +1 -0
  123. package/dist/utils/errors.js +60 -0
  124. package/dist/utils/errors.js.map +1 -0
  125. package/dist/utils/logger.d.ts +22 -0
  126. package/dist/utils/logger.d.ts.map +1 -0
  127. package/dist/utils/logger.js +50 -0
  128. package/dist/utils/logger.js.map +1 -0
  129. package/dist/utils/member-transform.d.ts +20 -0
  130. package/dist/utils/member-transform.d.ts.map +1 -0
  131. package/dist/utils/member-transform.js +48 -0
  132. package/dist/utils/member-transform.js.map +1 -0
  133. package/dist/utils/response-filters.d.ts +121 -0
  134. package/dist/utils/response-filters.d.ts.map +1 -0
  135. package/dist/utils/response-filters.js +166 -0
  136. package/dist/utils/response-filters.js.map +1 -0
  137. package/dooray-mcp.iml +8 -0
  138. package/package.json +54 -0
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Get Task List Tool
4
+ * Get list of tasks with filters
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.getTaskListTool = exports.getTaskListSchema = void 0;
41
+ exports.getTaskListHandler = getTaskListHandler;
42
+ const zod_1 = require("zod");
43
+ const projectsApi = __importStar(require("../../api/projects.js"));
44
+ const errors_js_1 = require("../../utils/errors.js");
45
+ const response_filters_js_1 = require("../../utils/response-filters.js");
46
+ exports.getTaskListSchema = zod_1.z.object({
47
+ projectId: zod_1.z.string().describe('Project ID (required)'),
48
+ // Member filters
49
+ fromEmailAddress: zod_1.z.string().optional().describe('Filter by creator email address'),
50
+ fromMemberIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by creator member IDs (organizationMemberId)'),
51
+ toMemberIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by assignee member IDs (organizationMemberId)'),
52
+ ccMemberIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by CC member IDs (organizationMemberId)'),
53
+ // Task filters
54
+ tagIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by tag IDs'),
55
+ parentPostId: zod_1.z.string().optional().describe('Filter by parent post ID (get subtasks)'),
56
+ postNumber: zod_1.z.number().optional().describe('Filter by specific task number'),
57
+ postWorkflowClasses: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by workflow classes: backlog, registered, working, closed'),
58
+ postWorkflowIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by workflow IDs defined in the project'),
59
+ milestoneIds: zod_1.z.array(zod_1.z.string()).optional().describe('Filter by milestone IDs'),
60
+ subjects: zod_1.z.string().optional().describe('Filter by task subject (title)'),
61
+ // Date filters (supports: today, thisweek, prev-Nd, next-Nd, or ISO8601 range like "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00")
62
+ createdAt: zod_1.z.string().optional().describe('Filter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
63
+ updatedAt: zod_1.z.string().optional().describe('Filter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
64
+ dueAt: zod_1.z.string().optional().describe('Filter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
65
+ // Sorting
66
+ order: zod_1.z.string().optional().default('-postUpdatedAt').describe('Sort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending, e.g., -createdAt). Default: -postUpdatedAt (most recently updated first)'),
67
+ // Pagination
68
+ page: zod_1.z.number().min(0).optional().describe('Page number (default: 0)'),
69
+ size: zod_1.z.number().min(1).max(100).optional().describe('Items per page (default: 20, max: 100)'),
70
+ });
71
+ async function getTaskListHandler(args) {
72
+ try {
73
+ const result = await projectsApi.getTasks({
74
+ projectId: args.projectId,
75
+ fromEmailAddress: args.fromEmailAddress,
76
+ fromMemberIds: args.fromMemberIds,
77
+ toMemberIds: args.toMemberIds,
78
+ ccMemberIds: args.ccMemberIds,
79
+ tagIds: args.tagIds,
80
+ parentPostId: args.parentPostId,
81
+ postNumber: args.postNumber,
82
+ postWorkflowClasses: args.postWorkflowClasses,
83
+ postWorkflowIds: args.postWorkflowIds,
84
+ milestoneIds: args.milestoneIds,
85
+ subjects: args.subjects,
86
+ createdAt: args.createdAt,
87
+ updatedAt: args.updatedAt,
88
+ dueAt: args.dueAt,
89
+ order: args.order,
90
+ page: args.page,
91
+ size: args.size,
92
+ });
93
+ // Filter to compact response to reduce token usage
94
+ const compactResult = (0, response_filters_js_1.filterPaginatedResponse)(result, response_filters_js_1.filterTaskForList);
95
+ return {
96
+ content: [
97
+ {
98
+ type: 'text',
99
+ text: JSON.stringify(compactResult, null, 2),
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ catch (error) {
105
+ return {
106
+ content: [
107
+ {
108
+ type: 'text',
109
+ text: `Error: ${(0, errors_js_1.formatError)(error)}`,
110
+ },
111
+ ],
112
+ isError: true,
113
+ };
114
+ }
115
+ }
116
+ exports.getTaskListTool = {
117
+ name: 'get-task-list',
118
+ description: `Get list of tasks in a Dooray project with powerful filtering and sorting.
119
+
120
+ **IMPORTANT**: projectId is REQUIRED. This tool fetches tasks from a specific project.
121
+
122
+ **Note**: Returns compact response with essential fields only. For complete task details, use get-task.
123
+
124
+ **URL Pattern Recognition**:
125
+ When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID" or "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter. When a URL is provided, use get-project for project info instead of get-project-list.
126
+
127
+ **Member ID Filters** (use organizationMemberId from get-my-member-info):
128
+ - toMemberIds: Tasks assigned to specific members
129
+ - ccMemberIds: Tasks where members are in CC
130
+ - fromMemberIds: Tasks created by specific members
131
+
132
+ **Workflow Filters**:
133
+ - postWorkflowClasses: ["backlog", "registered", "working", "closed"]
134
+ - postWorkflowIds: Project-specific workflow IDs
135
+
136
+ **Date Filters** (flexible patterns):
137
+ - "today" - Today's tasks
138
+ - "thisweek" - This week's tasks
139
+ - "prev-7d" - Last 7 days
140
+ - "next-7d" - Next 7 days
141
+ - ISO8601 range: "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00"
142
+
143
+ **Examples**:
144
+ 1. All tasks in project:
145
+ {"projectId": "123456"}
146
+
147
+ 2. Tasks assigned to me:
148
+ {"projectId": "123456", "toMemberIds": ["my-org-member-id"]}
149
+
150
+ 3. Tasks in "working" status:
151
+ {"projectId": "123456", "postWorkflowClasses": ["working"]}
152
+
153
+ 4. Tasks due today:
154
+ {"projectId": "123456", "dueAt": "today"}
155
+
156
+ 5. Recent tasks (sorted by update time):
157
+ {"projectId": "123456", "updatedAt": "prev-7d", "order": "-postUpdatedAt"}
158
+
159
+ 6. Tasks with specific milestone and tags:
160
+ {"projectId": "123456", "milestoneIds": ["milestone123"], "tagIds": ["tag456"]}
161
+
162
+ **Sorting**:
163
+ - Default: Tasks are sorted by most recently updated first (-postUpdatedAt)
164
+ - Custom: Use order parameter with: postDueAt, postUpdatedAt, createdAt
165
+ - Prefix with - for descending (e.g., "-createdAt")
166
+
167
+ Returns paginated task list with id, number, subject, status, priority, dueDate, assignees, tags, and milestone.`,
168
+ inputSchema: {
169
+ type: 'object',
170
+ properties: {
171
+ projectId: {
172
+ type: 'string',
173
+ description: 'Project ID (REQUIRED)',
174
+ },
175
+ fromEmailAddress: {
176
+ type: 'string',
177
+ description: 'Filter by creator email address',
178
+ },
179
+ fromMemberIds: {
180
+ type: 'array',
181
+ items: { type: 'string' },
182
+ description: 'Filter by creator member IDs',
183
+ },
184
+ toMemberIds: {
185
+ type: 'array',
186
+ items: { type: 'string' },
187
+ description: 'Filter by assignee member IDs (organizationMemberId)',
188
+ },
189
+ ccMemberIds: {
190
+ type: 'array',
191
+ items: { type: 'string' },
192
+ description: 'Filter by CC member IDs',
193
+ },
194
+ tagIds: {
195
+ type: 'array',
196
+ items: { type: 'string' },
197
+ description: 'Filter by tag IDs',
198
+ },
199
+ parentPostId: {
200
+ type: 'string',
201
+ description: 'Filter by parent post ID (get subtasks)',
202
+ },
203
+ postNumber: {
204
+ type: 'number',
205
+ description: 'Filter by specific task number',
206
+ },
207
+ postWorkflowClasses: {
208
+ type: 'array',
209
+ items: { type: 'string' },
210
+ description: 'Filter by workflow classes: backlog, registered, working, closed',
211
+ },
212
+ postWorkflowIds: {
213
+ type: 'array',
214
+ items: { type: 'string' },
215
+ description: 'Filter by workflow IDs',
216
+ },
217
+ milestoneIds: {
218
+ type: 'array',
219
+ items: { type: 'string' },
220
+ description: 'Filter by milestone IDs',
221
+ },
222
+ subjects: {
223
+ type: 'string',
224
+ description: 'Filter by task subject',
225
+ },
226
+ createdAt: {
227
+ type: 'string',
228
+ description: 'Filter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
229
+ },
230
+ updatedAt: {
231
+ type: 'string',
232
+ description: 'Filter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
233
+ },
234
+ dueAt: {
235
+ type: 'string',
236
+ description: 'Filter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
237
+ },
238
+ order: {
239
+ type: 'string',
240
+ description: 'Sort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending)',
241
+ },
242
+ page: {
243
+ type: 'number',
244
+ description: 'Page number (default: 0)',
245
+ minimum: 0,
246
+ },
247
+ size: {
248
+ type: 'number',
249
+ description: 'Items per page (default: 20, max: 100)',
250
+ minimum: 1,
251
+ maximum: 100,
252
+ },
253
+ },
254
+ required: ['projectId'],
255
+ },
256
+ };
257
+ //# sourceMappingURL=get-task-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task-list.js","sourceRoot":"","sources":["../../../src/tools/projects/get-task-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Get Task Tool
3
+ * Get detailed information about a specific task
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const getTaskSchema: z.ZodObject<{
7
+ taskId: z.ZodString;
8
+ projectId: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ taskId: string;
11
+ projectId?: string | undefined;
12
+ }, {
13
+ taskId: string;
14
+ projectId?: string | undefined;
15
+ }>;
16
+ export type GetTaskInput = z.infer<typeof getTaskSchema>;
17
+ export declare function getTaskHandler(args: GetTaskInput): Promise<{
18
+ content: {
19
+ type: string;
20
+ text: string;
21
+ }[];
22
+ isError?: undefined;
23
+ } | {
24
+ content: {
25
+ type: string;
26
+ text: string;
27
+ }[];
28
+ isError: boolean;
29
+ }>;
30
+ export declare const getTaskTool: {
31
+ name: string;
32
+ description: string;
33
+ inputSchema: {
34
+ type: string;
35
+ properties: {
36
+ taskId: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ projectId: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ };
45
+ required: string[];
46
+ };
47
+ };
48
+ //# sourceMappingURL=get-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/get-task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY;;;;;;;;;;;;GAuBtD;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAwDvB,CAAC"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ /**
3
+ * Get Task Tool
4
+ * Get detailed information about a specific task
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.getTaskTool = exports.getTaskSchema = void 0;
41
+ exports.getTaskHandler = getTaskHandler;
42
+ const zod_1 = require("zod");
43
+ const projectsApi = __importStar(require("../../api/projects.js"));
44
+ const errors_js_1 = require("../../utils/errors.js");
45
+ exports.getTaskSchema = zod_1.z.object({
46
+ taskId: zod_1.z.string().describe('Task ID (unique identifier)'),
47
+ projectId: zod_1.z.string().optional().describe('Project ID (optional)'),
48
+ });
49
+ async function getTaskHandler(args) {
50
+ try {
51
+ const result = await projectsApi.getTaskDetails(args.taskId, args.projectId);
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: JSON.stringify(result, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ catch (error) {
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: `Error: ${(0, errors_js_1.formatError)(error)}`,
67
+ },
68
+ ],
69
+ isError: true,
70
+ };
71
+ }
72
+ }
73
+ exports.getTaskTool = {
74
+ name: 'get-task',
75
+ description: `Get detailed information about a specific task.
76
+
77
+ This tool retrieves complete details of a task including its full body content, attachments, workflow status, assignees, and all metadata.
78
+
79
+ **URL Pattern Recognition - Two formats supported**:
80
+
81
+ 1. **Project-scoped URL**: "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID"
82
+ - Extract the first numeric ID after "/task/" as projectId (optional)
83
+ - Extract the second numeric ID as taskId (required)
84
+ - Example: "https://nhnent.dooray.com/task/1769381697328002548/4206132384174602537"
85
+ → {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
86
+
87
+ 2. **Task-only URL**: "https://nhnent.dooray.com/project/tasks/TASK_ID"
88
+ - Extract the numeric ID after "/tasks/" as taskId
89
+ - Example: "https://nhnent.dooray.com/project/tasks/4206132384174602537"
90
+ → {"taskId": "4206132384174602537"}
91
+
92
+ **IMPORTANT**:
93
+ - **taskId is REQUIRED**, projectId is OPTIONAL
94
+ - The taskId is the unique identifier (ID) from the URL, NOT the sequential task number shown in the UI
95
+ - You can fetch task details with just the taskId without knowing the projectId
96
+ - When a specific task URL is provided, use this tool directly instead of calling get-project-list first
97
+ - To find taskId from task descriptions, use get-task-list to search and get task IDs
98
+
99
+ Examples:
100
+ - From URL pattern 1: {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
101
+ - From URL pattern 2: {"taskId": "4206132384174602537"}
102
+ - Just taskId: {"taskId": "789012345"}
103
+ - With both IDs: {"taskId": "789012345", "projectId": "123456"}
104
+
105
+ **Returns complete task information including:**
106
+ - **Basic info**: id, number, subject, taskNumber (PROJECT-CODE/NUMBER format)
107
+ - **Project**: project object with id and code
108
+ - **Status**: workflowClass (registered/working/closed), workflow (id and name), closed flag, priority
109
+ - **Dates**: createdAt, updatedAt, dueDate, dueDateFlag
110
+ - **Content**: body with mimeType (text/x-markdown or text/html) and content
111
+ - **Hierarchy**: parent task information (id, number, subject) if this is a subtask
112
+ - **People**: users object with from (creator), to (assignees), cc (watchers)
113
+ - **Organization**: milestone (id, name), tags array (id, name)
114
+ - **Files**: files array with attachments (id, name, size)`,
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ taskId: {
119
+ type: 'string',
120
+ description: 'Task ID (unique identifier, REQUIRED)',
121
+ },
122
+ projectId: {
123
+ type: 'string',
124
+ description: 'Project ID (optional, can be omitted)',
125
+ },
126
+ },
127
+ required: ['taskId'],
128
+ },
129
+ };
130
+ //# sourceMappingURL=get-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../../src/tools/projects/get-task.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaH,wCAuBC;AAlCD,6BAAwB;AACxB,mEAAqD;AACrD,qDAAoD;AAEvC,QAAA,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACnE,CAAC,CAAC;AAII,KAAK,UAAU,cAAc,CAAC,IAAkB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE;iBACrC;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAEY,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAuC4C;IACzD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Update Task Comment Tool
3
+ * Update an existing comment on a task
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const updateTaskCommentSchema: z.ZodObject<{
7
+ projectId: z.ZodString;
8
+ taskId: z.ZodString;
9
+ commentId: z.ZodString;
10
+ body: z.ZodOptional<z.ZodObject<{
11
+ content: z.ZodString;
12
+ mimeType: z.ZodEnum<["text/x-markdown", "text/html"]>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ mimeType: "text/x-markdown" | "text/html";
15
+ content: string;
16
+ }, {
17
+ mimeType: "text/x-markdown" | "text/html";
18
+ content: string;
19
+ }>>;
20
+ attachFileIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ projectId: string;
23
+ taskId: string;
24
+ commentId: string;
25
+ body?: {
26
+ mimeType: "text/x-markdown" | "text/html";
27
+ content: string;
28
+ } | undefined;
29
+ attachFileIds?: string[] | undefined;
30
+ }, {
31
+ projectId: string;
32
+ taskId: string;
33
+ commentId: string;
34
+ body?: {
35
+ mimeType: "text/x-markdown" | "text/html";
36
+ content: string;
37
+ } | undefined;
38
+ attachFileIds?: string[] | undefined;
39
+ }>;
40
+ export type UpdateTaskCommentInput = z.infer<typeof updateTaskCommentSchema>;
41
+ export declare function updateTaskCommentHandler(args: UpdateTaskCommentInput): Promise<string | {
42
+ content: {
43
+ type: string;
44
+ text: string;
45
+ }[];
46
+ }>;
47
+ export declare const updateTaskCommentTool: {
48
+ name: string;
49
+ description: string;
50
+ inputSchema: {
51
+ type: string;
52
+ properties: {
53
+ projectId: {
54
+ type: string;
55
+ description: string;
56
+ };
57
+ taskId: {
58
+ type: string;
59
+ description: string;
60
+ };
61
+ commentId: {
62
+ type: string;
63
+ description: string;
64
+ };
65
+ body: {
66
+ type: string;
67
+ properties: {
68
+ content: {
69
+ type: string;
70
+ description: string;
71
+ };
72
+ mimeType: {
73
+ type: string;
74
+ enum: string[];
75
+ description: string;
76
+ };
77
+ };
78
+ required: string[];
79
+ description: string;
80
+ };
81
+ attachFileIds: {
82
+ type: string;
83
+ items: {
84
+ type: string;
85
+ };
86
+ description: string;
87
+ };
88
+ };
89
+ required: string[];
90
+ };
91
+ };
92
+ //# sourceMappingURL=update-task-comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-task-comment.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/update-task-comment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMlC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE7E,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB;;;;;GAqB1E;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiGjC,CAAC"}