@geonheeye/dooray-mcp 0.1.13

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 (287) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/api/client.d.ts +85 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +272 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/common.d.ts +14 -0
  8. package/dist/api/common.d.ts.map +1 -0
  9. package/dist/api/common.js +25 -0
  10. package/dist/api/common.js.map +1 -0
  11. package/dist/api/drive.d.ts +22 -0
  12. package/dist/api/drive.d.ts.map +1 -0
  13. package/dist/api/drive.js +86 -0
  14. package/dist/api/drive.js.map +1 -0
  15. package/dist/api/messenger.d.ts +56 -0
  16. package/dist/api/messenger.d.ts.map +1 -0
  17. package/dist/api/messenger.js +49 -0
  18. package/dist/api/messenger.js.map +1 -0
  19. package/dist/api/projects.d.ts +147 -0
  20. package/dist/api/projects.d.ts.map +1 -0
  21. package/dist/api/projects.js +485 -0
  22. package/dist/api/projects.js.map +1 -0
  23. package/dist/api/wiki.d.ts +38 -0
  24. package/dist/api/wiki.d.ts.map +1 -0
  25. package/dist/api/wiki.js +139 -0
  26. package/dist/api/wiki.js.map +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +736 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/tools/common/get-my-member-info.d.ts +29 -0
  32. package/dist/tools/common/get-my-member-info.d.ts.map +1 -0
  33. package/dist/tools/common/get-my-member-info.js +95 -0
  34. package/dist/tools/common/get-my-member-info.js.map +1 -0
  35. package/dist/tools/drive/copy-drive-file.d.ts +62 -0
  36. package/dist/tools/drive/copy-drive-file.d.ts.map +1 -0
  37. package/dist/tools/drive/copy-drive-file.js +91 -0
  38. package/dist/tools/drive/copy-drive-file.js.map +1 -0
  39. package/dist/tools/drive/create-drive-folder.d.ts +55 -0
  40. package/dist/tools/drive/create-drive-folder.d.ts.map +1 -0
  41. package/dist/tools/drive/create-drive-folder.js +91 -0
  42. package/dist/tools/drive/create-drive-folder.js.map +1 -0
  43. package/dist/tools/drive/delete-drive-file.d.ts +48 -0
  44. package/dist/tools/drive/delete-drive-file.d.ts.map +1 -0
  45. package/dist/tools/drive/delete-drive-file.js +87 -0
  46. package/dist/tools/drive/delete-drive-file.js.map +1 -0
  47. package/dist/tools/drive/download-drive-file.d.ts +55 -0
  48. package/dist/tools/drive/download-drive-file.d.ts.map +1 -0
  49. package/dist/tools/drive/download-drive-file.js +160 -0
  50. package/dist/tools/drive/download-drive-file.js.map +1 -0
  51. package/dist/tools/drive/get-drive-file-list.d.ts +77 -0
  52. package/dist/tools/drive/get-drive-file-list.d.ts.map +1 -0
  53. package/dist/tools/drive/get-drive-file-list.js +89 -0
  54. package/dist/tools/drive/get-drive-file-list.js.map +1 -0
  55. package/dist/tools/drive/get-drive-file-meta.d.ts +41 -0
  56. package/dist/tools/drive/get-drive-file-meta.d.ts.map +1 -0
  57. package/dist/tools/drive/get-drive-file-meta.js +74 -0
  58. package/dist/tools/drive/get-drive-file-meta.js.map +1 -0
  59. package/dist/tools/drive/get-drive-list.d.ts +63 -0
  60. package/dist/tools/drive/get-drive-list.d.ts.map +1 -0
  61. package/dist/tools/drive/get-drive-list.js +84 -0
  62. package/dist/tools/drive/get-drive-list.js.map +1 -0
  63. package/dist/tools/drive/move-drive-file.d.ts +55 -0
  64. package/dist/tools/drive/move-drive-file.d.ts.map +1 -0
  65. package/dist/tools/drive/move-drive-file.js +92 -0
  66. package/dist/tools/drive/move-drive-file.js.map +1 -0
  67. package/dist/tools/drive/rename-drive-file.d.ts +55 -0
  68. package/dist/tools/drive/rename-drive-file.d.ts.map +1 -0
  69. package/dist/tools/drive/rename-drive-file.js +88 -0
  70. package/dist/tools/drive/rename-drive-file.js.map +1 -0
  71. package/dist/tools/drive/update-drive-file.d.ts +55 -0
  72. package/dist/tools/drive/update-drive-file.d.ts.map +1 -0
  73. package/dist/tools/drive/update-drive-file.js +119 -0
  74. package/dist/tools/drive/update-drive-file.js.map +1 -0
  75. package/dist/tools/drive/upload-drive-file.d.ts +55 -0
  76. package/dist/tools/drive/upload-drive-file.d.ts.map +1 -0
  77. package/dist/tools/drive/upload-drive-file.js +118 -0
  78. package/dist/tools/drive/upload-drive-file.js.map +1 -0
  79. package/dist/tools/messenger/get-channel-messages.d.ts +55 -0
  80. package/dist/tools/messenger/get-channel-messages.d.ts.map +1 -0
  81. package/dist/tools/messenger/get-channel-messages.js +115 -0
  82. package/dist/tools/messenger/get-channel-messages.js.map +1 -0
  83. package/dist/tools/messenger/get-channels.d.ts +30 -0
  84. package/dist/tools/messenger/get-channels.d.ts.map +1 -0
  85. package/dist/tools/messenger/get-channels.js +87 -0
  86. package/dist/tools/messenger/get-channels.js.map +1 -0
  87. package/dist/tools/messenger/send-channel-message.d.ts +48 -0
  88. package/dist/tools/messenger/send-channel-message.d.ts.map +1 -0
  89. package/dist/tools/messenger/send-channel-message.js +108 -0
  90. package/dist/tools/messenger/send-channel-message.js.map +1 -0
  91. package/dist/tools/messenger/send-direct-message.d.ts +48 -0
  92. package/dist/tools/messenger/send-direct-message.d.ts.map +1 -0
  93. package/dist/tools/messenger/send-direct-message.js +112 -0
  94. package/dist/tools/messenger/send-direct-message.js.map +1 -0
  95. package/dist/tools/projects/create-project-template.d.ts +305 -0
  96. package/dist/tools/projects/create-project-template.d.ts.map +1 -0
  97. package/dist/tools/projects/create-project-template.js +262 -0
  98. package/dist/tools/projects/create-project-template.js.map +1 -0
  99. package/dist/tools/projects/create-tag.d.ts +55 -0
  100. package/dist/tools/projects/create-tag.d.ts.map +1 -0
  101. package/dist/tools/projects/create-tag.js +134 -0
  102. package/dist/tools/projects/create-tag.js.map +1 -0
  103. package/dist/tools/projects/create-task-comment.d.ts +92 -0
  104. package/dist/tools/projects/create-task-comment.d.ts.map +1 -0
  105. package/dist/tools/projects/create-task-comment.js +171 -0
  106. package/dist/tools/projects/create-task-comment.js.map +1 -0
  107. package/dist/tools/projects/create-task.d.ts +198 -0
  108. package/dist/tools/projects/create-task.d.ts.map +1 -0
  109. package/dist/tools/projects/create-task.js +230 -0
  110. package/dist/tools/projects/create-task.js.map +1 -0
  111. package/dist/tools/projects/delete-attachment.d.ts +55 -0
  112. package/dist/tools/projects/delete-attachment.d.ts.map +1 -0
  113. package/dist/tools/projects/delete-attachment.js +115 -0
  114. package/dist/tools/projects/delete-attachment.js.map +1 -0
  115. package/dist/tools/projects/delete-project-template.d.ts +48 -0
  116. package/dist/tools/projects/delete-project-template.d.ts.map +1 -0
  117. package/dist/tools/projects/delete-project-template.js +108 -0
  118. package/dist/tools/projects/delete-project-template.js.map +1 -0
  119. package/dist/tools/projects/download-attachment.d.ts +62 -0
  120. package/dist/tools/projects/download-attachment.d.ts.map +1 -0
  121. package/dist/tools/projects/download-attachment.js +195 -0
  122. package/dist/tools/projects/download-attachment.js.map +1 -0
  123. package/dist/tools/projects/get-attachment-list.d.ts +48 -0
  124. package/dist/tools/projects/get-attachment-list.d.ts.map +1 -0
  125. package/dist/tools/projects/get-attachment-list.js +118 -0
  126. package/dist/tools/projects/get-attachment-list.js.map +1 -0
  127. package/dist/tools/projects/get-attachment-metadata.d.ts +55 -0
  128. package/dist/tools/projects/get-attachment-metadata.d.ts.map +1 -0
  129. package/dist/tools/projects/get-attachment-metadata.js +120 -0
  130. package/dist/tools/projects/get-attachment-metadata.js.map +1 -0
  131. package/dist/tools/projects/get-milestone-list.d.ts +49 -0
  132. package/dist/tools/projects/get-milestone-list.d.ts.map +1 -0
  133. package/dist/tools/projects/get-milestone-list.js +112 -0
  134. package/dist/tools/projects/get-milestone-list.js.map +1 -0
  135. package/dist/tools/projects/get-project-list.d.ts +50 -0
  136. package/dist/tools/projects/get-project-list.d.ts.map +1 -0
  137. package/dist/tools/projects/get-project-list.js +113 -0
  138. package/dist/tools/projects/get-project-list.js.map +1 -0
  139. package/dist/tools/projects/get-project-member-group-list.d.ts +55 -0
  140. package/dist/tools/projects/get-project-member-group-list.d.ts.map +1 -0
  141. package/dist/tools/projects/get-project-member-group-list.js +127 -0
  142. package/dist/tools/projects/get-project-member-group-list.js.map +1 -0
  143. package/dist/tools/projects/get-project-member-list.d.ts +66 -0
  144. package/dist/tools/projects/get-project-member-list.d.ts.map +1 -0
  145. package/dist/tools/projects/get-project-member-list.js +159 -0
  146. package/dist/tools/projects/get-project-member-list.js.map +1 -0
  147. package/dist/tools/projects/get-project-template-list.d.ts +55 -0
  148. package/dist/tools/projects/get-project-template-list.d.ts.map +1 -0
  149. package/dist/tools/projects/get-project-template-list.js +127 -0
  150. package/dist/tools/projects/get-project-template-list.js.map +1 -0
  151. package/dist/tools/projects/get-project-template.d.ts +48 -0
  152. package/dist/tools/projects/get-project-template.d.ts.map +1 -0
  153. package/dist/tools/projects/get-project-template.js +132 -0
  154. package/dist/tools/projects/get-project-template.js.map +1 -0
  155. package/dist/tools/projects/get-project-workflow-list.d.ts +41 -0
  156. package/dist/tools/projects/get-project-workflow-list.d.ts.map +1 -0
  157. package/dist/tools/projects/get-project-workflow-list.js +107 -0
  158. package/dist/tools/projects/get-project-workflow-list.js.map +1 -0
  159. package/dist/tools/projects/get-project.d.ts +41 -0
  160. package/dist/tools/projects/get-project.d.ts.map +1 -0
  161. package/dist/tools/projects/get-project.js +110 -0
  162. package/dist/tools/projects/get-project.js.map +1 -0
  163. package/dist/tools/projects/get-tag-list.d.ts +55 -0
  164. package/dist/tools/projects/get-tag-list.d.ts.map +1 -0
  165. package/dist/tools/projects/get-tag-list.js +145 -0
  166. package/dist/tools/projects/get-tag-list.js.map +1 -0
  167. package/dist/tools/projects/get-tag.d.ts +48 -0
  168. package/dist/tools/projects/get-tag.d.ts.map +1 -0
  169. package/dist/tools/projects/get-tag.js +124 -0
  170. package/dist/tools/projects/get-tag.js.map +1 -0
  171. package/dist/tools/projects/get-task-comment-list.d.ts +63 -0
  172. package/dist/tools/projects/get-task-comment-list.d.ts.map +1 -0
  173. package/dist/tools/projects/get-task-comment-list.js +136 -0
  174. package/dist/tools/projects/get-task-comment-list.js.map +1 -0
  175. package/dist/tools/projects/get-task-list.d.ts +184 -0
  176. package/dist/tools/projects/get-task-list.d.ts.map +1 -0
  177. package/dist/tools/projects/get-task-list.js +257 -0
  178. package/dist/tools/projects/get-task-list.js.map +1 -0
  179. package/dist/tools/projects/get-task.d.ts +48 -0
  180. package/dist/tools/projects/get-task.d.ts.map +1 -0
  181. package/dist/tools/projects/get-task.js +130 -0
  182. package/dist/tools/projects/get-task.js.map +1 -0
  183. package/dist/tools/projects/update-project-template.d.ts +312 -0
  184. package/dist/tools/projects/update-project-template.d.ts.map +1 -0
  185. package/dist/tools/projects/update-project-template.js +266 -0
  186. package/dist/tools/projects/update-project-template.js.map +1 -0
  187. package/dist/tools/projects/update-tag-group.d.ts +62 -0
  188. package/dist/tools/projects/update-tag-group.d.ts.map +1 -0
  189. package/dist/tools/projects/update-tag-group.js +162 -0
  190. package/dist/tools/projects/update-tag-group.js.map +1 -0
  191. package/dist/tools/projects/update-task-comment.d.ts +92 -0
  192. package/dist/tools/projects/update-task-comment.d.ts.map +1 -0
  193. package/dist/tools/projects/update-task-comment.js +176 -0
  194. package/dist/tools/projects/update-task-comment.js.map +1 -0
  195. package/dist/tools/projects/update-task.d.ts +203 -0
  196. package/dist/tools/projects/update-task.d.ts.map +1 -0
  197. package/dist/tools/projects/update-task.js +261 -0
  198. package/dist/tools/projects/update-task.js.map +1 -0
  199. package/dist/tools/projects/upload-attachment.d.ts +55 -0
  200. package/dist/tools/projects/upload-attachment.d.ts.map +1 -0
  201. package/dist/tools/projects/upload-attachment.js +143 -0
  202. package/dist/tools/projects/upload-attachment.js.map +1 -0
  203. package/dist/tools/wiki/create-wiki-comment.d.ts +55 -0
  204. package/dist/tools/wiki/create-wiki-comment.d.ts.map +1 -0
  205. package/dist/tools/wiki/create-wiki-comment.js +72 -0
  206. package/dist/tools/wiki/create-wiki-comment.js.map +1 -0
  207. package/dist/tools/wiki/create-wiki-page.d.ts +127 -0
  208. package/dist/tools/wiki/create-wiki-page.d.ts.map +1 -0
  209. package/dist/tools/wiki/create-wiki-page.js +116 -0
  210. package/dist/tools/wiki/create-wiki-page.js.map +1 -0
  211. package/dist/tools/wiki/delete-wiki-comment.d.ts +55 -0
  212. package/dist/tools/wiki/delete-wiki-comment.d.ts.map +1 -0
  213. package/dist/tools/wiki/delete-wiki-comment.js +72 -0
  214. package/dist/tools/wiki/delete-wiki-comment.js.map +1 -0
  215. package/dist/tools/wiki/delete-wiki-page-file.d.ts +55 -0
  216. package/dist/tools/wiki/delete-wiki-page-file.d.ts.map +1 -0
  217. package/dist/tools/wiki/delete-wiki-page-file.js +115 -0
  218. package/dist/tools/wiki/delete-wiki-page-file.js.map +1 -0
  219. package/dist/tools/wiki/download-wiki-attach-file.d.ts +55 -0
  220. package/dist/tools/wiki/download-wiki-attach-file.d.ts.map +1 -0
  221. package/dist/tools/wiki/download-wiki-attach-file.js +176 -0
  222. package/dist/tools/wiki/download-wiki-attach-file.js.map +1 -0
  223. package/dist/tools/wiki/download-wiki-page-file.d.ts +62 -0
  224. package/dist/tools/wiki/download-wiki-page-file.d.ts.map +1 -0
  225. package/dist/tools/wiki/download-wiki-page-file.js +189 -0
  226. package/dist/tools/wiki/download-wiki-page-file.js.map +1 -0
  227. package/dist/tools/wiki/get-wiki-comment-list.d.ts +62 -0
  228. package/dist/tools/wiki/get-wiki-comment-list.d.ts.map +1 -0
  229. package/dist/tools/wiki/get-wiki-comment-list.js +74 -0
  230. package/dist/tools/wiki/get-wiki-comment-list.js.map +1 -0
  231. package/dist/tools/wiki/get-wiki-comment.d.ts +55 -0
  232. package/dist/tools/wiki/get-wiki-comment.d.ts.map +1 -0
  233. package/dist/tools/wiki/get-wiki-comment.js +72 -0
  234. package/dist/tools/wiki/get-wiki-comment.js.map +1 -0
  235. package/dist/tools/wiki/get-wiki-list.d.ts +47 -0
  236. package/dist/tools/wiki/get-wiki-list.d.ts.map +1 -0
  237. package/dist/tools/wiki/get-wiki-list.js +76 -0
  238. package/dist/tools/wiki/get-wiki-list.js.map +1 -0
  239. package/dist/tools/wiki/get-wiki-page-list.d.ts +48 -0
  240. package/dist/tools/wiki/get-wiki-page-list.d.ts.map +1 -0
  241. package/dist/tools/wiki/get-wiki-page-list.js +70 -0
  242. package/dist/tools/wiki/get-wiki-page-list.js.map +1 -0
  243. package/dist/tools/wiki/get-wiki-page.d.ts +48 -0
  244. package/dist/tools/wiki/get-wiki-page.d.ts.map +1 -0
  245. package/dist/tools/wiki/get-wiki-page.js +78 -0
  246. package/dist/tools/wiki/get-wiki-page.js.map +1 -0
  247. package/dist/tools/wiki/update-wiki-comment.d.ts +62 -0
  248. package/dist/tools/wiki/update-wiki-comment.d.ts.map +1 -0
  249. package/dist/tools/wiki/update-wiki-comment.js +74 -0
  250. package/dist/tools/wiki/update-wiki-comment.js.map +1 -0
  251. package/dist/tools/wiki/update-wiki-page.d.ts +117 -0
  252. package/dist/tools/wiki/update-wiki-page.d.ts.map +1 -0
  253. package/dist/tools/wiki/update-wiki-page.js +111 -0
  254. package/dist/tools/wiki/update-wiki-page.js.map +1 -0
  255. package/dist/tools/wiki/upload-wiki-file.d.ts +49 -0
  256. package/dist/tools/wiki/upload-wiki-file.d.ts.map +1 -0
  257. package/dist/tools/wiki/upload-wiki-file.js +145 -0
  258. package/dist/tools/wiki/upload-wiki-file.js.map +1 -0
  259. package/dist/tools/wiki/upload-wiki-page-file.d.ts +55 -0
  260. package/dist/tools/wiki/upload-wiki-page-file.d.ts.map +1 -0
  261. package/dist/tools/wiki/upload-wiki-page-file.js +147 -0
  262. package/dist/tools/wiki/upload-wiki-page-file.js.map +1 -0
  263. package/dist/types/config.d.ts +18 -0
  264. package/dist/types/config.d.ts.map +1 -0
  265. package/dist/types/config.js +6 -0
  266. package/dist/types/config.js.map +1 -0
  267. package/dist/types/dooray-api.d.ts +717 -0
  268. package/dist/types/dooray-api.d.ts.map +1 -0
  269. package/dist/types/dooray-api.js +7 -0
  270. package/dist/types/dooray-api.js.map +1 -0
  271. package/dist/utils/errors.d.ts +28 -0
  272. package/dist/utils/errors.d.ts.map +1 -0
  273. package/dist/utils/errors.js +60 -0
  274. package/dist/utils/errors.js.map +1 -0
  275. package/dist/utils/logger.d.ts +22 -0
  276. package/dist/utils/logger.d.ts.map +1 -0
  277. package/dist/utils/logger.js +50 -0
  278. package/dist/utils/logger.js.map +1 -0
  279. package/dist/utils/member-transform.d.ts +20 -0
  280. package/dist/utils/member-transform.d.ts.map +1 -0
  281. package/dist/utils/member-transform.js +48 -0
  282. package/dist/utils/member-transform.js.map +1 -0
  283. package/dist/utils/response-filters.d.ts +105 -0
  284. package/dist/utils/response-filters.d.ts.map +1 -0
  285. package/dist/utils/response-filters.js +152 -0
  286. package/dist/utils/response-filters.js.map +1 -0
  287. package/package.json +54 -0
package/dist/index.js ADDED
@@ -0,0 +1,736 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Dooray MCP Server
5
+ * Main entry point for the Model Context Protocol server
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
42
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
43
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
44
+ const dotenv = __importStar(require("dotenv"));
45
+ const client_js_1 = require("./api/client.js");
46
+ const logger_js_1 = require("./utils/logger.js");
47
+ // Import all tools
48
+ const get_my_member_info_js_1 = require("./tools/common/get-my-member-info.js");
49
+ const get_project_list_js_1 = require("./tools/projects/get-project-list.js");
50
+ const get_project_js_1 = require("./tools/projects/get-project.js");
51
+ const get_task_list_js_1 = require("./tools/projects/get-task-list.js");
52
+ const get_task_js_1 = require("./tools/projects/get-task.js");
53
+ const create_task_js_1 = require("./tools/projects/create-task.js");
54
+ const update_task_js_1 = require("./tools/projects/update-task.js");
55
+ const create_task_comment_js_1 = require("./tools/projects/create-task-comment.js");
56
+ const get_task_comment_list_js_1 = require("./tools/projects/get-task-comment-list.js");
57
+ const update_task_comment_js_1 = require("./tools/projects/update-task-comment.js");
58
+ const get_milestone_list_js_1 = require("./tools/projects/get-milestone-list.js");
59
+ const get_tag_list_js_1 = require("./tools/projects/get-tag-list.js");
60
+ const get_tag_js_1 = require("./tools/projects/get-tag.js");
61
+ const create_tag_js_1 = require("./tools/projects/create-tag.js");
62
+ const update_tag_group_js_1 = require("./tools/projects/update-tag-group.js");
63
+ const get_project_template_list_js_1 = require("./tools/projects/get-project-template-list.js");
64
+ const get_project_template_js_1 = require("./tools/projects/get-project-template.js");
65
+ const create_project_template_js_1 = require("./tools/projects/create-project-template.js");
66
+ const update_project_template_js_1 = require("./tools/projects/update-project-template.js");
67
+ const delete_project_template_js_1 = require("./tools/projects/delete-project-template.js");
68
+ const get_project_member_list_js_1 = require("./tools/projects/get-project-member-list.js");
69
+ const get_project_member_group_list_js_1 = require("./tools/projects/get-project-member-group-list.js");
70
+ const get_project_workflow_list_js_1 = require("./tools/projects/get-project-workflow-list.js");
71
+ const upload_attachment_js_1 = require("./tools/projects/upload-attachment.js");
72
+ const get_attachment_list_js_1 = require("./tools/projects/get-attachment-list.js");
73
+ const get_attachment_metadata_js_1 = require("./tools/projects/get-attachment-metadata.js");
74
+ const download_attachment_js_1 = require("./tools/projects/download-attachment.js");
75
+ const delete_attachment_js_1 = require("./tools/projects/delete-attachment.js");
76
+ // Drive tools
77
+ const get_drive_list_js_1 = require("./tools/drive/get-drive-list.js");
78
+ const get_drive_file_list_js_1 = require("./tools/drive/get-drive-file-list.js");
79
+ const get_drive_file_meta_js_1 = require("./tools/drive/get-drive-file-meta.js");
80
+ const create_drive_folder_js_1 = require("./tools/drive/create-drive-folder.js");
81
+ const rename_drive_file_js_1 = require("./tools/drive/rename-drive-file.js");
82
+ const move_drive_file_js_1 = require("./tools/drive/move-drive-file.js");
83
+ const copy_drive_file_js_1 = require("./tools/drive/copy-drive-file.js");
84
+ const delete_drive_file_js_1 = require("./tools/drive/delete-drive-file.js");
85
+ const upload_drive_file_js_1 = require("./tools/drive/upload-drive-file.js");
86
+ const download_drive_file_js_1 = require("./tools/drive/download-drive-file.js");
87
+ const update_drive_file_js_1 = require("./tools/drive/update-drive-file.js");
88
+ // Wiki tools
89
+ const get_wiki_list_js_1 = require("./tools/wiki/get-wiki-list.js");
90
+ const get_wiki_page_list_js_1 = require("./tools/wiki/get-wiki-page-list.js");
91
+ const get_wiki_page_js_1 = require("./tools/wiki/get-wiki-page.js");
92
+ const create_wiki_page_js_1 = require("./tools/wiki/create-wiki-page.js");
93
+ const update_wiki_page_js_1 = require("./tools/wiki/update-wiki-page.js");
94
+ const get_wiki_comment_list_js_1 = require("./tools/wiki/get-wiki-comment-list.js");
95
+ const get_wiki_comment_js_1 = require("./tools/wiki/get-wiki-comment.js");
96
+ const create_wiki_comment_js_1 = require("./tools/wiki/create-wiki-comment.js");
97
+ const update_wiki_comment_js_1 = require("./tools/wiki/update-wiki-comment.js");
98
+ const delete_wiki_comment_js_1 = require("./tools/wiki/delete-wiki-comment.js");
99
+ // Wiki file tools
100
+ const upload_wiki_page_file_js_1 = require("./tools/wiki/upload-wiki-page-file.js");
101
+ const download_wiki_page_file_js_1 = require("./tools/wiki/download-wiki-page-file.js");
102
+ const delete_wiki_page_file_js_1 = require("./tools/wiki/delete-wiki-page-file.js");
103
+ const upload_wiki_file_js_1 = require("./tools/wiki/upload-wiki-file.js");
104
+ const download_wiki_attach_file_js_1 = require("./tools/wiki/download-wiki-attach-file.js");
105
+ // Messenger tools
106
+ const get_channels_js_1 = require("./tools/messenger/get-channels.js");
107
+ const send_channel_message_js_1 = require("./tools/messenger/send-channel-message.js");
108
+ const send_direct_message_js_1 = require("./tools/messenger/send-direct-message.js");
109
+ const get_channel_messages_js_1 = require("./tools/messenger/get-channel-messages.js");
110
+ // Load environment variables
111
+ dotenv.config();
112
+ /**
113
+ * Tool registry mapping tool names to their handlers and schemas
114
+ */
115
+ const toolRegistry = {
116
+ // Common tools
117
+ 'get-my-member-info': { handler: get_my_member_info_js_1.getMyMemberInfoHandler, schema: get_my_member_info_js_1.getMyMemberInfoSchema },
118
+ // Projects tools
119
+ 'get-project-list': { handler: get_project_list_js_1.getProjectListHandler, schema: get_project_list_js_1.getProjectListSchema },
120
+ 'get-project': { handler: get_project_js_1.getProjectHandler, schema: get_project_js_1.getProjectSchema },
121
+ 'get-task-list': { handler: get_task_list_js_1.getTaskListHandler, schema: get_task_list_js_1.getTaskListSchema },
122
+ 'get-task': { handler: get_task_js_1.getTaskHandler, schema: get_task_js_1.getTaskSchema },
123
+ 'create-task': { handler: create_task_js_1.createTaskHandler, schema: create_task_js_1.createTaskSchema },
124
+ 'update-task': { handler: update_task_js_1.updateTaskHandler, schema: update_task_js_1.updateTaskSchema },
125
+ 'create-task-comment': { handler: create_task_comment_js_1.createTaskCommentHandler, schema: create_task_comment_js_1.createTaskCommentSchema },
126
+ 'get-task-comment-list': { handler: get_task_comment_list_js_1.getTaskCommentListHandler, schema: get_task_comment_list_js_1.getTaskCommentListSchema },
127
+ 'update-task-comment': { handler: update_task_comment_js_1.updateTaskCommentHandler, schema: update_task_comment_js_1.updateTaskCommentSchema },
128
+ 'get-milestone-list': { handler: get_milestone_list_js_1.getMilestoneListHandler, schema: get_milestone_list_js_1.getMilestoneListSchema },
129
+ 'get-tag-list': { handler: get_tag_list_js_1.getTagListHandler, schema: get_tag_list_js_1.getTagListSchema },
130
+ 'get-tag': { handler: get_tag_js_1.getTagHandler, schema: get_tag_js_1.getTagSchema },
131
+ 'create-tag': { handler: create_tag_js_1.createTagHandler, schema: create_tag_js_1.createTagSchema },
132
+ 'update-tag-group': { handler: update_tag_group_js_1.updateTagGroupHandler, schema: update_tag_group_js_1.updateTagGroupSchema },
133
+ 'get-project-template-list': { handler: get_project_template_list_js_1.getProjectTemplateListHandler, schema: get_project_template_list_js_1.getProjectTemplateListSchema },
134
+ 'get-project-template': { handler: get_project_template_js_1.getProjectTemplateHandler, schema: get_project_template_js_1.getProjectTemplateSchema },
135
+ 'create-project-template': { handler: create_project_template_js_1.createProjectTemplateHandler, schema: create_project_template_js_1.createProjectTemplateSchema },
136
+ 'update-project-template': { handler: update_project_template_js_1.updateProjectTemplateHandler, schema: update_project_template_js_1.updateProjectTemplateSchema },
137
+ 'delete-project-template': { handler: delete_project_template_js_1.deleteProjectTemplateHandler, schema: delete_project_template_js_1.deleteProjectTemplateSchema },
138
+ 'get-project-member-list': { handler: get_project_member_list_js_1.getProjectMemberListHandler, schema: get_project_member_list_js_1.getProjectMemberListSchema },
139
+ 'get-project-member-group-list': { handler: get_project_member_group_list_js_1.getProjectMemberGroupListHandler, schema: get_project_member_group_list_js_1.getProjectMemberGroupListSchema },
140
+ 'get-project-workflow-list': { handler: get_project_workflow_list_js_1.getProjectWorkflowListHandler, schema: get_project_workflow_list_js_1.getProjectWorkflowListSchema },
141
+ 'upload-attachment': { handler: upload_attachment_js_1.uploadAttachmentHandler, schema: upload_attachment_js_1.uploadAttachmentSchema },
142
+ 'get-attachment-list': { handler: get_attachment_list_js_1.getAttachmentListHandler, schema: get_attachment_list_js_1.getAttachmentListSchema },
143
+ 'get-attachment-metadata': { handler: get_attachment_metadata_js_1.getAttachmentMetadataHandler, schema: get_attachment_metadata_js_1.getAttachmentMetadataSchema },
144
+ 'download-attachment': { handler: download_attachment_js_1.downloadAttachmentHandler, schema: download_attachment_js_1.downloadAttachmentSchema },
145
+ 'delete-attachment': { handler: delete_attachment_js_1.deleteAttachmentHandler, schema: delete_attachment_js_1.deleteAttachmentSchema },
146
+ // Drive tools
147
+ 'get-drive-list': { handler: get_drive_list_js_1.getDriveListHandler, schema: get_drive_list_js_1.getDriveListSchema },
148
+ 'get-drive-file-list': { handler: get_drive_file_list_js_1.getDriveFileListHandler, schema: get_drive_file_list_js_1.getDriveFileListSchema },
149
+ 'get-drive-file-meta': { handler: get_drive_file_meta_js_1.getDriveFileMetaHandler, schema: get_drive_file_meta_js_1.getDriveFileMetaSchema },
150
+ 'create-drive-folder': { handler: create_drive_folder_js_1.createDriveFolderHandler, schema: create_drive_folder_js_1.createDriveFolderSchema },
151
+ 'rename-drive-file': { handler: rename_drive_file_js_1.renameDriveFileHandler, schema: rename_drive_file_js_1.renameDriveFileSchema },
152
+ 'move-drive-file': { handler: move_drive_file_js_1.moveDriveFileHandler, schema: move_drive_file_js_1.moveDriveFileSchema },
153
+ 'copy-drive-file': { handler: copy_drive_file_js_1.copyDriveFileHandler, schema: copy_drive_file_js_1.copyDriveFileSchema },
154
+ 'delete-drive-file': { handler: delete_drive_file_js_1.deleteDriveFileHandler, schema: delete_drive_file_js_1.deleteDriveFileSchema },
155
+ 'upload-drive-file': { handler: upload_drive_file_js_1.uploadDriveFileHandler, schema: upload_drive_file_js_1.uploadDriveFileSchema },
156
+ 'download-drive-file': { handler: download_drive_file_js_1.downloadDriveFileHandler, schema: download_drive_file_js_1.downloadDriveFileSchema },
157
+ 'update-drive-file': { handler: update_drive_file_js_1.updateDriveFileHandler, schema: update_drive_file_js_1.updateDriveFileSchema },
158
+ // Wiki tools
159
+ 'get-wiki-list': { handler: get_wiki_list_js_1.getWikiListHandler, schema: get_wiki_list_js_1.getWikiListSchema },
160
+ 'get-wiki-page-list': { handler: get_wiki_page_list_js_1.getWikiPageListHandler, schema: get_wiki_page_list_js_1.getWikiPageListSchema },
161
+ 'get-wiki-page': { handler: get_wiki_page_js_1.getWikiPageHandler, schema: get_wiki_page_js_1.getWikiPageSchema },
162
+ 'create-wiki-page': { handler: create_wiki_page_js_1.createWikiPageHandler, schema: create_wiki_page_js_1.createWikiPageSchema },
163
+ 'update-wiki-page': { handler: update_wiki_page_js_1.updateWikiPageHandler, schema: update_wiki_page_js_1.updateWikiPageSchema },
164
+ 'get-wiki-page-comment-list': { handler: get_wiki_comment_list_js_1.getWikiPageCommentListHandler, schema: get_wiki_comment_list_js_1.getWikiPageCommentListSchema },
165
+ 'get-wiki-page-comment': { handler: get_wiki_comment_js_1.getWikiPageCommentHandler, schema: get_wiki_comment_js_1.getWikiPageCommentSchema },
166
+ 'create-wiki-page-comment': { handler: create_wiki_comment_js_1.createWikiPageCommentHandler, schema: create_wiki_comment_js_1.createWikiPageCommentSchema },
167
+ 'update-wiki-page-comment': { handler: update_wiki_comment_js_1.updateWikiPageCommentHandler, schema: update_wiki_comment_js_1.updateWikiPageCommentSchema },
168
+ 'delete-wiki-page-comment': { handler: delete_wiki_comment_js_1.deleteWikiPageCommentHandler, schema: delete_wiki_comment_js_1.deleteWikiPageCommentSchema },
169
+ // Wiki file tools
170
+ 'upload-wiki-page-file': { handler: upload_wiki_page_file_js_1.uploadWikiPageFileHandler, schema: upload_wiki_page_file_js_1.uploadWikiPageFileSchema },
171
+ 'download-wiki-page-file': { handler: download_wiki_page_file_js_1.downloadWikiPageFileHandler, schema: download_wiki_page_file_js_1.downloadWikiPageFileSchema },
172
+ 'delete-wiki-page-file': { handler: delete_wiki_page_file_js_1.deleteWikiPageFileHandler, schema: delete_wiki_page_file_js_1.deleteWikiPageFileSchema },
173
+ 'upload-wiki-file': { handler: upload_wiki_file_js_1.uploadWikiFileHandler, schema: upload_wiki_file_js_1.uploadWikiFileSchema },
174
+ 'download-wiki-attach-file': { handler: download_wiki_attach_file_js_1.downloadWikiAttachFileHandler, schema: download_wiki_attach_file_js_1.downloadWikiAttachFileSchema },
175
+ // Messenger tools
176
+ 'get-messenger-channels': { handler: get_channels_js_1.getChannelsHandler, schema: get_channels_js_1.getChannelsSchema },
177
+ 'send-messenger-channel-message': { handler: send_channel_message_js_1.sendChannelMessageHandler, schema: send_channel_message_js_1.sendChannelMessageSchema },
178
+ 'send-messenger-direct-message': { handler: send_direct_message_js_1.sendDirectMessageHandler, schema: send_direct_message_js_1.sendDirectMessageSchema },
179
+ 'get-messenger-channel-messages': { handler: get_channel_messages_js_1.getChannelMessagesHandler, schema: get_channel_messages_js_1.getChannelMessagesSchema },
180
+ };
181
+ /**
182
+ * List of all available tools
183
+ */
184
+ const tools = [
185
+ get_my_member_info_js_1.getMyMemberInfoTool,
186
+ get_project_list_js_1.getProjectListTool,
187
+ get_project_js_1.getProjectTool,
188
+ get_task_list_js_1.getTaskListTool,
189
+ get_task_js_1.getTaskTool,
190
+ create_task_js_1.createTaskTool,
191
+ update_task_js_1.updateTaskTool,
192
+ create_task_comment_js_1.createTaskCommentTool,
193
+ get_task_comment_list_js_1.getTaskCommentListTool,
194
+ update_task_comment_js_1.updateTaskCommentTool,
195
+ get_milestone_list_js_1.getMilestoneListTool,
196
+ get_tag_list_js_1.getTagListTool,
197
+ get_tag_js_1.getTagTool,
198
+ create_tag_js_1.createTagTool,
199
+ update_tag_group_js_1.updateTagGroupTool,
200
+ get_project_template_list_js_1.getProjectTemplateListTool,
201
+ get_project_template_js_1.getProjectTemplateTool,
202
+ create_project_template_js_1.createProjectTemplateTool,
203
+ update_project_template_js_1.updateProjectTemplateTool,
204
+ delete_project_template_js_1.deleteProjectTemplateTool,
205
+ get_project_member_list_js_1.getProjectMemberListTool,
206
+ get_project_member_group_list_js_1.getProjectMemberGroupListTool,
207
+ get_project_workflow_list_js_1.getProjectWorkflowListTool,
208
+ upload_attachment_js_1.uploadAttachmentTool,
209
+ get_attachment_list_js_1.getAttachmentListTool,
210
+ get_attachment_metadata_js_1.getAttachmentMetadataTool,
211
+ download_attachment_js_1.downloadAttachmentTool,
212
+ delete_attachment_js_1.deleteAttachmentTool,
213
+ // Drive tools
214
+ get_drive_list_js_1.getDriveListTool,
215
+ get_drive_file_list_js_1.getDriveFileListTool,
216
+ get_drive_file_meta_js_1.getDriveFileMetaTool,
217
+ create_drive_folder_js_1.createDriveFolderTool,
218
+ rename_drive_file_js_1.renameDriveFileTool,
219
+ move_drive_file_js_1.moveDriveFileTool,
220
+ copy_drive_file_js_1.copyDriveFileTool,
221
+ delete_drive_file_js_1.deleteDriveFileTool,
222
+ upload_drive_file_js_1.uploadDriveFileTool,
223
+ download_drive_file_js_1.downloadDriveFileTool,
224
+ update_drive_file_js_1.updateDriveFileTool,
225
+ // Wiki tools
226
+ get_wiki_list_js_1.getWikiListTool,
227
+ get_wiki_page_list_js_1.getWikiPageListTool,
228
+ get_wiki_page_js_1.getWikiPageTool,
229
+ create_wiki_page_js_1.createWikiPageTool,
230
+ update_wiki_page_js_1.updateWikiPageTool,
231
+ get_wiki_comment_list_js_1.getWikiPageCommentListTool,
232
+ get_wiki_comment_js_1.getWikiPageCommentTool,
233
+ create_wiki_comment_js_1.createWikiPageCommentTool,
234
+ update_wiki_comment_js_1.updateWikiPageCommentTool,
235
+ delete_wiki_comment_js_1.deleteWikiPageCommentTool,
236
+ // Wiki file tools
237
+ upload_wiki_page_file_js_1.uploadWikiPageFileTool,
238
+ download_wiki_page_file_js_1.downloadWikiPageFileTool,
239
+ delete_wiki_page_file_js_1.deleteWikiPageFileTool,
240
+ upload_wiki_file_js_1.uploadWikiFileTool,
241
+ download_wiki_attach_file_js_1.downloadWikiAttachFileTool,
242
+ // Messenger tools
243
+ get_channels_js_1.getChannelsTool,
244
+ send_channel_message_js_1.sendChannelMessageTool,
245
+ send_direct_message_js_1.sendDirectMessageTool,
246
+ get_channel_messages_js_1.getChannelMessagesTool,
247
+ ];
248
+ /**
249
+ * Main server initialization
250
+ */
251
+ async function main() {
252
+ logger_js_1.logger.info('Starting Dooray MCP Server...');
253
+ // Validate API token
254
+ const apiToken = process.env.DOORAY_API_TOKEN;
255
+ if (!apiToken) {
256
+ logger_js_1.logger.error('DOORAY_API_TOKEN environment variable is required');
257
+ process.exit(1);
258
+ }
259
+ // Initialize Dooray API client
260
+ try {
261
+ (0, client_js_1.initializeClient)({
262
+ apiToken,
263
+ baseUrl: process.env.DOORAY_API_BASE_URL,
264
+ });
265
+ logger_js_1.logger.info('Dooray API client initialized');
266
+ }
267
+ catch (error) {
268
+ logger_js_1.logger.error('Failed to initialize Dooray API client:', error);
269
+ process.exit(1);
270
+ }
271
+ // Create MCP server
272
+ const server = new index_js_1.Server({
273
+ name: 'dooray-mcp',
274
+ version: '0.1.0',
275
+ }, {
276
+ capabilities: {
277
+ tools: {},
278
+ prompts: {},
279
+ resources: {},
280
+ },
281
+ });
282
+ /**
283
+ * Available prompts for common Dooray workflows
284
+ */
285
+ const prompts = [
286
+ {
287
+ name: 'create-task-with-template',
288
+ description: 'Create a new task using a structured template with all necessary fields',
289
+ arguments: [
290
+ {
291
+ name: 'projectId',
292
+ description: 'The project ID where the task will be created',
293
+ required: true,
294
+ },
295
+ {
296
+ name: 'taskType',
297
+ description: 'Type of task: bug, feature, improvement, or general',
298
+ required: false,
299
+ },
300
+ ],
301
+ },
302
+ {
303
+ name: 'weekly-task-summary',
304
+ description: 'Generate a summary of tasks assigned to you for the current week',
305
+ arguments: [
306
+ {
307
+ name: 'projectId',
308
+ description: 'The project ID to summarize tasks from',
309
+ required: true,
310
+ },
311
+ ],
312
+ },
313
+ {
314
+ name: 'project-status-report',
315
+ description: 'Generate a project status report including task counts by workflow status',
316
+ arguments: [
317
+ {
318
+ name: 'projectId',
319
+ description: 'The project ID to generate report for',
320
+ required: true,
321
+ },
322
+ ],
323
+ },
324
+ {
325
+ name: 'task-review-checklist',
326
+ description: 'Create a review checklist for a specific task',
327
+ arguments: [
328
+ {
329
+ name: 'projectId',
330
+ description: 'The project ID',
331
+ required: true,
332
+ },
333
+ {
334
+ name: 'taskId',
335
+ description: 'The task ID to create a review checklist for',
336
+ required: true,
337
+ },
338
+ ],
339
+ },
340
+ ];
341
+ /**
342
+ * Available resources for Dooray context
343
+ */
344
+ const resources = [
345
+ {
346
+ uri: 'dooray://api/info',
347
+ name: 'Dooray API Information',
348
+ description: 'Information about the Dooray API and available endpoints',
349
+ mimeType: 'application/json',
350
+ },
351
+ {
352
+ uri: 'dooray://workflows/reference',
353
+ name: 'Workflow Status Reference',
354
+ description: 'Reference guide for Dooray workflow statuses (backlog, registered, working, closed)',
355
+ mimeType: 'text/markdown',
356
+ },
357
+ {
358
+ uri: 'dooray://priority/reference',
359
+ name: 'Priority Reference',
360
+ description: 'Reference guide for Dooray task priorities',
361
+ mimeType: 'text/markdown',
362
+ },
363
+ ];
364
+ // Handle list tools request
365
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
366
+ logger_js_1.logger.debug('Handling list_tools request');
367
+ return {
368
+ tools,
369
+ };
370
+ });
371
+ // Handle list prompts request
372
+ server.setRequestHandler(types_js_1.ListPromptsRequestSchema, async () => {
373
+ logger_js_1.logger.debug('Handling list_prompts request');
374
+ return {
375
+ prompts,
376
+ };
377
+ });
378
+ // Handle get prompt request
379
+ server.setRequestHandler(types_js_1.GetPromptRequestSchema, async (request) => {
380
+ const { name, arguments: args } = request.params;
381
+ logger_js_1.logger.info(`Prompt requested: ${name}`);
382
+ const prompt = prompts.find(p => p.name === name);
383
+ if (!prompt) {
384
+ throw new Error(`Unknown prompt: ${name}`);
385
+ }
386
+ let messages = [];
387
+ switch (name) {
388
+ case 'create-task-with-template': {
389
+ const taskType = args?.taskType || 'general';
390
+ const templates = {
391
+ bug: `## Bug Report
392
+
393
+ **Project ID**: ${args?.projectId}
394
+
395
+ ### Description
396
+ [Describe the bug clearly]
397
+
398
+ ### Steps to Reproduce
399
+ 1.
400
+ 2.
401
+ 3.
402
+
403
+ ### Expected Behavior
404
+ [What should happen]
405
+
406
+ ### Actual Behavior
407
+ [What actually happens]
408
+
409
+ ### Environment
410
+ - Browser/OS:
411
+ - Version:
412
+
413
+ ### Priority
414
+ - [ ] High (서비스 중단)
415
+ - [ ] Normal (기능 장애)
416
+ - [ ] Low (개선 필요)`,
417
+ feature: `## Feature Request
418
+
419
+ **Project ID**: ${args?.projectId}
420
+
421
+ ### Summary
422
+ [Brief description of the feature]
423
+
424
+ ### User Story
425
+ As a [type of user], I want [goal] so that [benefit].
426
+
427
+ ### Acceptance Criteria
428
+ - [ ]
429
+ - [ ]
430
+ - [ ]
431
+
432
+ ### Technical Notes
433
+ [Any technical considerations]`,
434
+ improvement: `## Improvement
435
+
436
+ **Project ID**: ${args?.projectId}
437
+
438
+ ### Current State
439
+ [Describe current behavior]
440
+
441
+ ### Proposed Improvement
442
+ [Describe the improvement]
443
+
444
+ ### Benefits
445
+ -
446
+ -
447
+
448
+ ### Implementation Notes
449
+ [Technical details if any]`,
450
+ general: `## Task
451
+
452
+ **Project ID**: ${args?.projectId}
453
+
454
+ ### Subject
455
+ [Task title]
456
+
457
+ ### Description
458
+ [Detailed description]
459
+
460
+ ### Checklist
461
+ - [ ]
462
+ - [ ]
463
+
464
+ ### Due Date
465
+ [If applicable]`,
466
+ };
467
+ messages = [
468
+ {
469
+ role: 'user',
470
+ content: {
471
+ type: 'text',
472
+ text: `Use this template to create a new ${taskType} task in Dooray:\n\n${templates[taskType] || templates.general}`,
473
+ },
474
+ },
475
+ ];
476
+ break;
477
+ }
478
+ case 'weekly-task-summary': {
479
+ messages = [
480
+ {
481
+ role: 'user',
482
+ content: {
483
+ type: 'text',
484
+ text: `Generate a weekly task summary for project ${args?.projectId}.
485
+
486
+ Please:
487
+ 1. First call get-my-member-info to get my member ID
488
+ 2. Then call get-task-list with:
489
+ - projectId: ${args?.projectId}
490
+ - toMemberIds: [my member ID]
491
+ - postWorkflowClasses: ["working", "registered"]
492
+ 3. Summarize the tasks grouped by status
493
+ 4. Highlight any overdue tasks`,
494
+ },
495
+ },
496
+ ];
497
+ break;
498
+ }
499
+ case 'project-status-report': {
500
+ messages = [
501
+ {
502
+ role: 'user',
503
+ content: {
504
+ type: 'text',
505
+ text: `Generate a project status report for project ${args?.projectId}.
506
+
507
+ Please:
508
+ 1. Call get-project to get project details
509
+ 2. Call get-project-workflow-list to get all workflow statuses
510
+ 3. For each workflow class (backlog, registered, working, closed), call get-task-list to count tasks
511
+ 4. Call get-milestone-list to show milestone progress
512
+ 5. Generate a summary report with:
513
+ - Project overview
514
+ - Task counts by status
515
+ - Milestone progress
516
+ - Any blocked or overdue items`,
517
+ },
518
+ },
519
+ ];
520
+ break;
521
+ }
522
+ case 'task-review-checklist': {
523
+ messages = [
524
+ {
525
+ role: 'user',
526
+ content: {
527
+ type: 'text',
528
+ text: `Create a review checklist for task ${args?.taskId} in project ${args?.projectId}.
529
+
530
+ Please:
531
+ 1. Call get-task to get the task details
532
+ 2. Call get-task-comment-list to see existing comments
533
+ 3. Generate a review checklist including:
534
+ - [ ] Task description is clear
535
+ - [ ] Acceptance criteria defined
536
+ - [ ] Assignee is set
537
+ - [ ] Due date is appropriate
538
+ - [ ] Tags/labels are correct
539
+ - [ ] Related tasks are linked
540
+ 4. Suggest any improvements to the task`,
541
+ },
542
+ },
543
+ ];
544
+ break;
545
+ }
546
+ }
547
+ return {
548
+ description: prompt.description,
549
+ messages,
550
+ };
551
+ });
552
+ // Handle list resources request
553
+ server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
554
+ logger_js_1.logger.debug('Handling list_resources request');
555
+ return {
556
+ resources,
557
+ };
558
+ });
559
+ // Handle read resource request
560
+ server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
561
+ const { uri } = request.params;
562
+ logger_js_1.logger.info(`Resource requested: ${uri}`);
563
+ switch (uri) {
564
+ case 'dooray://api/info':
565
+ return {
566
+ contents: [
567
+ {
568
+ uri,
569
+ mimeType: 'application/json',
570
+ text: JSON.stringify({
571
+ name: 'Dooray API',
572
+ version: '1.0',
573
+ baseUrl: process.env.DOORAY_API_BASE_URL || 'https://api.dooray.com',
574
+ documentation: 'https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg',
575
+ availableTools: tools.map(t => ({ name: t.name, description: t.description })),
576
+ }, null, 2),
577
+ },
578
+ ],
579
+ };
580
+ case 'dooray://workflows/reference':
581
+ return {
582
+ contents: [
583
+ {
584
+ uri,
585
+ mimeType: 'text/markdown',
586
+ text: `# Dooray Workflow Status Reference
587
+
588
+ ## Workflow Classes
589
+
590
+ Dooray tasks follow a workflow with 4 main classes:
591
+
592
+ | Class | Korean | Description |
593
+ |-------|--------|-------------|
594
+ | \`backlog\` | 대기 | Tasks waiting to be started |
595
+ | \`registered\` | 등록 | Newly registered/acknowledged tasks |
596
+ | \`working\` | 진행중 | Tasks currently in progress |
597
+ | \`closed\` | 완료 | Completed tasks |
598
+
599
+ ## Using Workflows
600
+
601
+ ### Filtering Tasks by Status
602
+ \`\`\`json
603
+ {
604
+ "projectId": "your-project-id",
605
+ "postWorkflowClasses": ["working", "registered"]
606
+ }
607
+ \`\`\`
608
+
609
+ ### Getting All Workflow Statuses
610
+ Use \`get-project-workflow-list\` to get all custom workflow statuses for a project.
611
+
612
+ ### Updating Task Status
613
+ Use \`update-task\` with \`workflowId\` to change a task's status:
614
+ \`\`\`json
615
+ {
616
+ "projectId": "your-project-id",
617
+ "taskNumber": 123,
618
+ "workflowId": "workflow-status-id"
619
+ }
620
+ \`\`\`
621
+ `,
622
+ },
623
+ ],
624
+ };
625
+ case 'dooray://priority/reference':
626
+ return {
627
+ contents: [
628
+ {
629
+ uri,
630
+ mimeType: 'text/markdown',
631
+ text: `# Dooray Task Priority Reference
632
+
633
+ ## Priority Levels
634
+
635
+ | Priority | Value | Korean | Use Case |
636
+ |----------|-------|--------|----------|
637
+ | Highest | \`highest\` | 가장 높음 | Critical issues requiring immediate attention |
638
+ | High | \`high\` | 높음 | Important tasks that should be prioritized |
639
+ | Normal | \`normal\` | 보통 | Standard priority (default) |
640
+ | Low | \`low\` | 낮음 | Can be addressed when time permits |
641
+ | Lowest | \`lowest\` | 가장 낮음 | Nice to have, lowest priority |
642
+
643
+ ## Setting Priority
644
+
645
+ When creating or updating a task:
646
+ \`\`\`json
647
+ {
648
+ "projectId": "your-project-id",
649
+ "subject": "Task title",
650
+ "priority": "high"
651
+ }
652
+ \`\`\`
653
+ `,
654
+ },
655
+ ],
656
+ };
657
+ default:
658
+ throw new Error(`Unknown resource: ${uri}`);
659
+ }
660
+ });
661
+ // Handle call tool request
662
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
663
+ const { name, arguments: args } = request.params;
664
+ logger_js_1.logger.info(`Tool called: ${name}`);
665
+ logger_js_1.logger.debug(`Tool arguments:`, args);
666
+ const tool = toolRegistry[name];
667
+ if (!tool) {
668
+ logger_js_1.logger.error(`Unknown tool: ${name}`);
669
+ return {
670
+ content: [
671
+ {
672
+ type: 'text',
673
+ text: `Error: Unknown tool '${name}'`,
674
+ },
675
+ ],
676
+ isError: true,
677
+ };
678
+ }
679
+ try {
680
+ // Validate arguments with Zod schema
681
+ const validatedArgs = tool.schema.parse(args || {});
682
+ // Call the tool handler
683
+ const result = await tool.handler(validatedArgs);
684
+ logger_js_1.logger.debug(`Tool ${name} completed successfully`);
685
+ return result;
686
+ }
687
+ catch (error) {
688
+ logger_js_1.logger.error(`Tool ${name} failed:`, error);
689
+ // Handle Zod validation errors
690
+ if (error && typeof error === 'object' && 'errors' in error) {
691
+ const zodError = error;
692
+ const errorMessages = zodError.errors
693
+ .map(e => `${e.path.join('.')}: ${e.message}`)
694
+ .join(', ');
695
+ return {
696
+ content: [
697
+ {
698
+ type: 'text',
699
+ text: `Validation Error: ${errorMessages}`,
700
+ },
701
+ ],
702
+ isError: true,
703
+ };
704
+ }
705
+ return {
706
+ content: [
707
+ {
708
+ type: 'text',
709
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
710
+ },
711
+ ],
712
+ isError: true,
713
+ };
714
+ }
715
+ });
716
+ // Start the server with stdio transport
717
+ const transport = new stdio_js_1.StdioServerTransport();
718
+ await server.connect(transport);
719
+ logger_js_1.logger.info(`Dooray MCP Server running with ${tools.length} tools`);
720
+ logger_js_1.logger.info('Tools available: ' + tools.map(t => t.name).join(', '));
721
+ }
722
+ // Error handling
723
+ process.on('uncaughtException', (error) => {
724
+ logger_js_1.logger.error('Uncaught exception:', error);
725
+ process.exit(1);
726
+ });
727
+ process.on('unhandledRejection', (reason, promise) => {
728
+ logger_js_1.logger.error('Unhandled rejection at:', promise, 'reason:', reason);
729
+ process.exit(1);
730
+ });
731
+ // Start the server
732
+ main().catch((error) => {
733
+ logger_js_1.logger.error('Failed to start server:', error);
734
+ process.exit(1);
735
+ });
736
+ //# sourceMappingURL=index.js.map