@jbctechsolutions/mcp-office365 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +667 -0
  3. package/dist/applescript/account-repository.d.ts +30 -0
  4. package/dist/applescript/account-repository.d.ts.map +1 -0
  5. package/dist/applescript/account-repository.js +38 -0
  6. package/dist/applescript/account-repository.js.map +1 -0
  7. package/dist/applescript/account-scripts.d.ts +21 -0
  8. package/dist/applescript/account-scripts.d.ts.map +1 -0
  9. package/dist/applescript/account-scripts.js +180 -0
  10. package/dist/applescript/account-scripts.js.map +1 -0
  11. package/dist/applescript/calendar-manager.d.ts +44 -0
  12. package/dist/applescript/calendar-manager.d.ts.map +1 -0
  13. package/dist/applescript/calendar-manager.js +92 -0
  14. package/dist/applescript/calendar-manager.js.map +1 -0
  15. package/dist/applescript/calendar-writer.d.ts +36 -0
  16. package/dist/applescript/calendar-writer.d.ts.map +1 -0
  17. package/dist/applescript/calendar-writer.js +94 -0
  18. package/dist/applescript/calendar-writer.js.map +1 -0
  19. package/dist/applescript/content-readers.d.ts +114 -0
  20. package/dist/applescript/content-readers.d.ts.map +1 -0
  21. package/dist/applescript/content-readers.js +328 -0
  22. package/dist/applescript/content-readers.js.map +1 -0
  23. package/dist/applescript/executor.d.ts +60 -0
  24. package/dist/applescript/executor.d.ts.map +1 -0
  25. package/dist/applescript/executor.js +173 -0
  26. package/dist/applescript/executor.js.map +1 -0
  27. package/dist/applescript/index.d.ts +20 -0
  28. package/dist/applescript/index.d.ts.map +1 -0
  29. package/dist/applescript/index.js +29 -0
  30. package/dist/applescript/index.js.map +1 -0
  31. package/dist/applescript/mail-sender.d.ts +38 -0
  32. package/dist/applescript/mail-sender.d.ts.map +1 -0
  33. package/dist/applescript/mail-sender.js +67 -0
  34. package/dist/applescript/mail-sender.js.map +1 -0
  35. package/dist/applescript/parser.d.ts +235 -0
  36. package/dist/applescript/parser.d.ts.map +1 -0
  37. package/dist/applescript/parser.js +496 -0
  38. package/dist/applescript/parser.js.map +1 -0
  39. package/dist/applescript/repository.d.ts +64 -0
  40. package/dist/applescript/repository.d.ts.map +1 -0
  41. package/dist/applescript/repository.js +444 -0
  42. package/dist/applescript/repository.js.map +1 -0
  43. package/dist/applescript/scripts.d.ts +265 -0
  44. package/dist/applescript/scripts.d.ts.map +1 -0
  45. package/dist/applescript/scripts.js +1483 -0
  46. package/dist/applescript/scripts.js.map +1 -0
  47. package/dist/approval/hash.d.ts +87 -0
  48. package/dist/approval/hash.d.ts.map +1 -0
  49. package/dist/approval/hash.js +102 -0
  50. package/dist/approval/hash.js.map +1 -0
  51. package/dist/approval/index.d.ts +13 -0
  52. package/dist/approval/index.d.ts.map +1 -0
  53. package/dist/approval/index.js +7 -0
  54. package/dist/approval/index.js.map +1 -0
  55. package/dist/approval/token-manager.d.ts +51 -0
  56. package/dist/approval/token-manager.d.ts.map +1 -0
  57. package/dist/approval/token-manager.js +111 -0
  58. package/dist/approval/token-manager.js.map +1 -0
  59. package/dist/approval/types.d.ts +44 -0
  60. package/dist/approval/types.d.ts.map +1 -0
  61. package/dist/approval/types.js +6 -0
  62. package/dist/approval/types.js.map +1 -0
  63. package/dist/cli.d.ts +30 -0
  64. package/dist/cli.d.ts.map +1 -0
  65. package/dist/cli.js +143 -0
  66. package/dist/cli.js.map +1 -0
  67. package/dist/config.d.ts +27 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +42 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/database/connection.d.ts +77 -0
  72. package/dist/database/connection.d.ts.map +1 -0
  73. package/dist/database/connection.js +130 -0
  74. package/dist/database/connection.js.map +1 -0
  75. package/dist/database/index.d.ts +11 -0
  76. package/dist/database/index.d.ts.map +1 -0
  77. package/dist/database/index.js +11 -0
  78. package/dist/database/index.js.map +1 -0
  79. package/dist/database/queries.d.ts +93 -0
  80. package/dist/database/queries.d.ts.map +1 -0
  81. package/dist/database/queries.js +430 -0
  82. package/dist/database/queries.js.map +1 -0
  83. package/dist/database/repository.d.ts +198 -0
  84. package/dist/database/repository.d.ts.map +1 -0
  85. package/dist/database/repository.js +199 -0
  86. package/dist/database/repository.js.map +1 -0
  87. package/dist/graph/attachments.d.ts +72 -0
  88. package/dist/graph/attachments.d.ts.map +1 -0
  89. package/dist/graph/attachments.js +207 -0
  90. package/dist/graph/attachments.js.map +1 -0
  91. package/dist/graph/auth/config.d.ts +34 -0
  92. package/dist/graph/auth/config.d.ts.map +1 -0
  93. package/dist/graph/auth/config.js +78 -0
  94. package/dist/graph/auth/config.js.map +1 -0
  95. package/dist/graph/auth/device-code-flow.d.ts +55 -0
  96. package/dist/graph/auth/device-code-flow.d.ts.map +1 -0
  97. package/dist/graph/auth/device-code-flow.js +180 -0
  98. package/dist/graph/auth/device-code-flow.js.map +1 -0
  99. package/dist/graph/auth/index.d.ts +13 -0
  100. package/dist/graph/auth/index.d.ts.map +1 -0
  101. package/dist/graph/auth/index.js +13 -0
  102. package/dist/graph/auth/index.js.map +1 -0
  103. package/dist/graph/auth/token-cache.d.ts +41 -0
  104. package/dist/graph/auth/token-cache.d.ts.map +1 -0
  105. package/dist/graph/auth/token-cache.js +105 -0
  106. package/dist/graph/auth/token-cache.js.map +1 -0
  107. package/dist/graph/client/batch.d.ts +38 -0
  108. package/dist/graph/client/batch.d.ts.map +1 -0
  109. package/dist/graph/client/batch.js +33 -0
  110. package/dist/graph/client/batch.js.map +1 -0
  111. package/dist/graph/client/cache.d.ts +64 -0
  112. package/dist/graph/client/cache.d.ts.map +1 -0
  113. package/dist/graph/client/cache.js +108 -0
  114. package/dist/graph/client/cache.js.map +1 -0
  115. package/dist/graph/client/graph-client.d.ts +630 -0
  116. package/dist/graph/client/graph-client.d.ts.map +1 -0
  117. package/dist/graph/client/graph-client.js +1771 -0
  118. package/dist/graph/client/graph-client.js.map +1 -0
  119. package/dist/graph/client/index.d.ts +12 -0
  120. package/dist/graph/client/index.d.ts.map +1 -0
  121. package/dist/graph/client/index.js +12 -0
  122. package/dist/graph/client/index.js.map +1 -0
  123. package/dist/graph/content-readers.d.ts +106 -0
  124. package/dist/graph/content-readers.d.ts.map +1 -0
  125. package/dist/graph/content-readers.js +321 -0
  126. package/dist/graph/content-readers.js.map +1 -0
  127. package/dist/graph/index.d.ts +18 -0
  128. package/dist/graph/index.d.ts.map +1 -0
  129. package/dist/graph/index.js +23 -0
  130. package/dist/graph/index.js.map +1 -0
  131. package/dist/graph/mailbox-adapter.d.ts +30 -0
  132. package/dist/graph/mailbox-adapter.d.ts.map +1 -0
  133. package/dist/graph/mailbox-adapter.js +59 -0
  134. package/dist/graph/mailbox-adapter.js.map +1 -0
  135. package/dist/graph/mappers/contact-mapper.d.ts +14 -0
  136. package/dist/graph/mappers/contact-mapper.d.ts.map +1 -0
  137. package/dist/graph/mappers/contact-mapper.js +20 -0
  138. package/dist/graph/mappers/contact-mapper.js.map +1 -0
  139. package/dist/graph/mappers/email-mapper.d.ts +14 -0
  140. package/dist/graph/mappers/email-mapper.d.ts.map +1 -0
  141. package/dist/graph/mappers/email-mapper.js +44 -0
  142. package/dist/graph/mappers/email-mapper.js.map +1 -0
  143. package/dist/graph/mappers/event-mapper.d.ts +14 -0
  144. package/dist/graph/mappers/event-mapper.d.ts.map +1 -0
  145. package/dist/graph/mappers/event-mapper.js +31 -0
  146. package/dist/graph/mappers/event-mapper.js.map +1 -0
  147. package/dist/graph/mappers/folder-mapper.d.ts +22 -0
  148. package/dist/graph/mappers/folder-mapper.d.ts.map +1 -0
  149. package/dist/graph/mappers/folder-mapper.js +51 -0
  150. package/dist/graph/mappers/folder-mapper.js.map +1 -0
  151. package/dist/graph/mappers/index.d.ts +16 -0
  152. package/dist/graph/mappers/index.d.ts.map +1 -0
  153. package/dist/graph/mappers/index.js +16 -0
  154. package/dist/graph/mappers/index.js.map +1 -0
  155. package/dist/graph/mappers/task-mapper.d.ts +20 -0
  156. package/dist/graph/mappers/task-mapper.d.ts.map +1 -0
  157. package/dist/graph/mappers/task-mapper.js +27 -0
  158. package/dist/graph/mappers/task-mapper.js.map +1 -0
  159. package/dist/graph/mappers/utils.d.ts +97 -0
  160. package/dist/graph/mappers/utils.d.ts.map +1 -0
  161. package/dist/graph/mappers/utils.js +186 -0
  162. package/dist/graph/mappers/utils.js.map +1 -0
  163. package/dist/graph/repository.d.ts +1104 -0
  164. package/dist/graph/repository.d.ts.map +1 -0
  165. package/dist/graph/repository.js +2999 -0
  166. package/dist/graph/repository.js.map +1 -0
  167. package/dist/index.d.ts +21 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +6052 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/parsers/html-stripper.d.ts +41 -0
  172. package/dist/parsers/html-stripper.d.ts.map +1 -0
  173. package/dist/parsers/html-stripper.js +179 -0
  174. package/dist/parsers/html-stripper.js.map +1 -0
  175. package/dist/parsers/index.d.ts +12 -0
  176. package/dist/parsers/index.d.ts.map +1 -0
  177. package/dist/parsers/index.js +12 -0
  178. package/dist/parsers/index.js.map +1 -0
  179. package/dist/parsers/olk15.d.ts +87 -0
  180. package/dist/parsers/olk15.d.ts.map +1 -0
  181. package/dist/parsers/olk15.js +368 -0
  182. package/dist/parsers/olk15.js.map +1 -0
  183. package/dist/signature.d.ts +22 -0
  184. package/dist/signature.d.ts.map +1 -0
  185. package/dist/signature.js +89 -0
  186. package/dist/signature.js.map +1 -0
  187. package/dist/tools/calendar-permissions.d.ts +79 -0
  188. package/dist/tools/calendar-permissions.d.ts.map +1 -0
  189. package/dist/tools/calendar-permissions.js +121 -0
  190. package/dist/tools/calendar-permissions.js.map +1 -0
  191. package/dist/tools/calendar.d.ts +208 -0
  192. package/dist/tools/calendar.d.ts.map +1 -0
  193. package/dist/tools/calendar.js +247 -0
  194. package/dist/tools/calendar.js.map +1 -0
  195. package/dist/tools/categories.d.ts +94 -0
  196. package/dist/tools/categories.d.ts.map +1 -0
  197. package/dist/tools/categories.js +117 -0
  198. package/dist/tools/categories.js.map +1 -0
  199. package/dist/tools/checklist-items.d.ts +89 -0
  200. package/dist/tools/checklist-items.d.ts.map +1 -0
  201. package/dist/tools/checklist-items.js +140 -0
  202. package/dist/tools/checklist-items.js.map +1 -0
  203. package/dist/tools/contacts.d.ts +94 -0
  204. package/dist/tools/contacts.d.ts.map +1 -0
  205. package/dist/tools/contacts.js +134 -0
  206. package/dist/tools/contacts.js.map +1 -0
  207. package/dist/tools/excel.d.ts +96 -0
  208. package/dist/tools/excel.d.ts.map +1 -0
  209. package/dist/tools/excel.js +165 -0
  210. package/dist/tools/excel.js.map +1 -0
  211. package/dist/tools/focused-overrides.d.ts +70 -0
  212. package/dist/tools/focused-overrides.d.ts.map +1 -0
  213. package/dist/tools/focused-overrides.js +117 -0
  214. package/dist/tools/focused-overrides.js.map +1 -0
  215. package/dist/tools/index.d.ts +22 -0
  216. package/dist/tools/index.d.ts.map +1 -0
  217. package/dist/tools/index.js +34 -0
  218. package/dist/tools/index.js.map +1 -0
  219. package/dist/tools/linked-resources.d.ts +74 -0
  220. package/dist/tools/linked-resources.d.ts.map +1 -0
  221. package/dist/tools/linked-resources.js +122 -0
  222. package/dist/tools/linked-resources.js.map +1 -0
  223. package/dist/tools/mail-rules.d.ts +98 -0
  224. package/dist/tools/mail-rules.d.ts.map +1 -0
  225. package/dist/tools/mail-rules.js +169 -0
  226. package/dist/tools/mail-rules.js.map +1 -0
  227. package/dist/tools/mail-send.d.ts +314 -0
  228. package/dist/tools/mail-send.d.ts.map +1 -0
  229. package/dist/tools/mail-send.js +555 -0
  230. package/dist/tools/mail-send.js.map +1 -0
  231. package/dist/tools/mail.d.ts +127 -0
  232. package/dist/tools/mail.d.ts.map +1 -0
  233. package/dist/tools/mail.js +311 -0
  234. package/dist/tools/mail.js.map +1 -0
  235. package/dist/tools/mailbox-organization.d.ts +301 -0
  236. package/dist/tools/mailbox-organization.d.ts.map +1 -0
  237. package/dist/tools/mailbox-organization.js +541 -0
  238. package/dist/tools/mailbox-organization.js.map +1 -0
  239. package/dist/tools/meetings.d.ts +114 -0
  240. package/dist/tools/meetings.d.ts.map +1 -0
  241. package/dist/tools/meetings.js +110 -0
  242. package/dist/tools/meetings.js.map +1 -0
  243. package/dist/tools/notes.d.ts +74 -0
  244. package/dist/tools/notes.d.ts.map +1 -0
  245. package/dist/tools/notes.js +136 -0
  246. package/dist/tools/notes.js.map +1 -0
  247. package/dist/tools/onedrive.d.ts +194 -0
  248. package/dist/tools/onedrive.d.ts.map +1 -0
  249. package/dist/tools/onedrive.js +257 -0
  250. package/dist/tools/onedrive.js.map +1 -0
  251. package/dist/tools/people.d.ts +129 -0
  252. package/dist/tools/people.d.ts.map +1 -0
  253. package/dist/tools/people.js +195 -0
  254. package/dist/tools/people.js.map +1 -0
  255. package/dist/tools/planner-visualization.d.ts +91 -0
  256. package/dist/tools/planner-visualization.d.ts.map +1 -0
  257. package/dist/tools/planner-visualization.js +192 -0
  258. package/dist/tools/planner-visualization.js.map +1 -0
  259. package/dist/tools/planner.d.ts +288 -0
  260. package/dist/tools/planner.d.ts.map +1 -0
  261. package/dist/tools/planner.js +368 -0
  262. package/dist/tools/planner.js.map +1 -0
  263. package/dist/tools/scheduling.d.ts +49 -0
  264. package/dist/tools/scheduling.d.ts.map +1 -0
  265. package/dist/tools/scheduling.js +115 -0
  266. package/dist/tools/scheduling.js.map +1 -0
  267. package/dist/tools/sharepoint.d.ts +115 -0
  268. package/dist/tools/sharepoint.d.ts.map +1 -0
  269. package/dist/tools/sharepoint.js +99 -0
  270. package/dist/tools/sharepoint.js.map +1 -0
  271. package/dist/tools/task-attachments.d.ts +74 -0
  272. package/dist/tools/task-attachments.d.ts.map +1 -0
  273. package/dist/tools/task-attachments.js +122 -0
  274. package/dist/tools/task-attachments.js.map +1 -0
  275. package/dist/tools/tasks.d.ts +74 -0
  276. package/dist/tools/tasks.d.ts.map +1 -0
  277. package/dist/tools/tasks.js +126 -0
  278. package/dist/tools/tasks.js.map +1 -0
  279. package/dist/tools/teams.d.ts +389 -0
  280. package/dist/tools/teams.d.ts.map +1 -0
  281. package/dist/tools/teams.js +546 -0
  282. package/dist/tools/teams.js.map +1 -0
  283. package/dist/types/calendar.d.ts +60 -0
  284. package/dist/types/calendar.d.ts.map +1 -0
  285. package/dist/types/calendar.js +15 -0
  286. package/dist/types/calendar.js.map +1 -0
  287. package/dist/types/contacts.d.ts +96 -0
  288. package/dist/types/contacts.d.ts.map +1 -0
  289. package/dist/types/contacts.js +41 -0
  290. package/dist/types/contacts.js.map +1 -0
  291. package/dist/types/index.d.ts +15 -0
  292. package/dist/types/index.d.ts.map +1 -0
  293. package/dist/types/index.js +16 -0
  294. package/dist/types/index.js.map +1 -0
  295. package/dist/types/mail.d.ts +108 -0
  296. package/dist/types/mail.d.ts.map +1 -0
  297. package/dist/types/mail.js +40 -0
  298. package/dist/types/mail.js.map +1 -0
  299. package/dist/types/notes.d.ts +26 -0
  300. package/dist/types/notes.d.ts.map +1 -0
  301. package/dist/types/notes.js +6 -0
  302. package/dist/types/notes.js.map +1 -0
  303. package/dist/types/tasks.d.ts +31 -0
  304. package/dist/types/tasks.d.ts.map +1 -0
  305. package/dist/types/tasks.js +6 -0
  306. package/dist/types/tasks.js.map +1 -0
  307. package/dist/utils/dates.d.ts +66 -0
  308. package/dist/utils/dates.d.ts.map +1 -0
  309. package/dist/utils/dates.js +94 -0
  310. package/dist/utils/dates.js.map +1 -0
  311. package/dist/utils/errors.d.ts +218 -0
  312. package/dist/utils/errors.d.ts.map +1 -0
  313. package/dist/utils/errors.js +306 -0
  314. package/dist/utils/errors.js.map +1 -0
  315. package/dist/utils/index.d.ts +10 -0
  316. package/dist/utils/index.d.ts.map +1 -0
  317. package/dist/utils/index.js +10 -0
  318. package/dist/utils/index.js.map +1 -0
  319. package/dist/visualization/html.d.ts +26 -0
  320. package/dist/visualization/html.d.ts.map +1 -0
  321. package/dist/visualization/html.js +306 -0
  322. package/dist/visualization/html.js.map +1 -0
  323. package/dist/visualization/markdown.d.ts +25 -0
  324. package/dist/visualization/markdown.d.ts.map +1 -0
  325. package/dist/visualization/markdown.js +186 -0
  326. package/dist/visualization/markdown.js.map +1 -0
  327. package/dist/visualization/mermaid.d.ts +25 -0
  328. package/dist/visualization/mermaid.d.ts.map +1 -0
  329. package/dist/visualization/mermaid.js +158 -0
  330. package/dist/visualization/mermaid.js.map +1 -0
  331. package/dist/visualization/svg.d.ts +25 -0
  332. package/dist/visualization/svg.d.ts.map +1 -0
  333. package/dist/visualization/svg.js +282 -0
  334. package/dist/visualization/svg.js.map +1 -0
  335. package/dist/visualization/types.d.ts +43 -0
  336. package/dist/visualization/types.d.ts.map +1 -0
  337. package/dist/visualization/types.js +34 -0
  338. package/dist/visualization/types.js.map +1 -0
  339. package/package.json +88 -0
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Copyright (c) 2026 JBC Tech Solutions, LLC
3
+ * Licensed under the MIT License. See LICENSE file in the project root.
4
+ */
5
+ /**
6
+ * Microsoft Planner Plans and Buckets MCP tools.
7
+ *
8
+ * Provides tools for managing Planner plans and buckets with ETag caching
9
+ * for optimistic concurrency control, and two-phase approval for destructive
10
+ * delete operations.
11
+ */
12
+ import { z } from 'zod';
13
+ // =============================================================================
14
+ // Input Schemas
15
+ // =============================================================================
16
+ export const ListPlansInput = z.strictObject({});
17
+ export const GetPlanInput = z.strictObject({
18
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
19
+ });
20
+ export const CreatePlanInput = z.strictObject({
21
+ title: z.string().min(1).describe('Plan title'),
22
+ group_id: z.string().min(1).describe('M365 group ID that owns the plan'),
23
+ });
24
+ export const UpdatePlanInput = z.strictObject({
25
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
26
+ title: z.string().min(1).optional().describe('New plan title'),
27
+ });
28
+ export const ListBucketsInput = z.strictObject({
29
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
30
+ });
31
+ export const CreateBucketInput = z.strictObject({
32
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
33
+ name: z.string().min(1).describe('Bucket name'),
34
+ });
35
+ export const UpdateBucketInput = z.strictObject({
36
+ bucket_id: z.number().int().positive().describe('Bucket ID from list_buckets'),
37
+ name: z.string().min(1).optional().describe('New bucket name'),
38
+ });
39
+ export const PrepareDeleteBucketInput = z.strictObject({
40
+ bucket_id: z.number().int().positive().describe('Bucket ID from list_buckets'),
41
+ });
42
+ export const ConfirmDeleteBucketInput = z.strictObject({
43
+ approval_token: z.string().describe('Approval token from prepare_delete_bucket'),
44
+ });
45
+ export const ListPlannerTasksInput = z.strictObject({
46
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
47
+ });
48
+ export const GetPlannerTaskInput = z.strictObject({
49
+ task_id: z.number().int().positive().describe('Task ID from list_planner_tasks'),
50
+ });
51
+ export const CreatePlannerTaskInput = z.strictObject({
52
+ plan_id: z.number().int().positive().describe('Plan ID from list_plans'),
53
+ title: z.string().min(1).describe('Task title'),
54
+ bucket_id: z.number().int().positive().optional().describe('Bucket ID from list_buckets'),
55
+ assignments: z.record(z.string(), z.object({}).passthrough()).optional().describe('User assignments. Keys are user IDs, values should be { "@odata.type": "#microsoft.graph.plannerAssignment", "orderHint": " !" }'),
56
+ priority: z.number().int().min(0).max(10).optional().describe('Priority (0-10)'),
57
+ start_date: z.string().optional().describe('Start date in ISO format'),
58
+ due_date: z.string().optional().describe('Due date in ISO format'),
59
+ });
60
+ export const UpdatePlannerTaskInput = z.strictObject({
61
+ task_id: z.number().int().positive().describe('Task ID from list_planner_tasks'),
62
+ title: z.string().min(1).optional().describe('New task title'),
63
+ bucket_id: z.number().int().positive().optional().describe('New bucket ID from list_buckets'),
64
+ percent_complete: z.number().int().min(0).max(100).optional().describe('Percent complete (0-100)'),
65
+ priority: z.number().int().min(0).max(10).optional().describe('Priority (0-10)'),
66
+ start_date: z.string().optional().describe('Start date in ISO format'),
67
+ due_date: z.string().optional().describe('Due date in ISO format'),
68
+ assignments: z.record(z.string(), z.object({}).passthrough()).optional().describe('User assignments. Keys are user IDs, values should be { "@odata.type": "#microsoft.graph.plannerAssignment", "orderHint": " !" }'),
69
+ });
70
+ export const PrepareDeletePlannerTaskInput = z.strictObject({
71
+ task_id: z.number().int().positive().describe('Task ID from list_planner_tasks'),
72
+ });
73
+ export const ConfirmDeletePlannerTaskInput = z.strictObject({
74
+ approval_token: z.string().describe('Approval token from prepare_delete_planner_task'),
75
+ });
76
+ export const GetPlannerTaskDetailsInput = z.strictObject({
77
+ task_id: z.number().int().positive().describe('Planner task ID'),
78
+ });
79
+ export const UpdatePlannerTaskDetailsInput = z.strictObject({
80
+ task_id: z.number().int().positive().describe('Planner task ID'),
81
+ description: z.string().optional().describe('Task description/notes'),
82
+ checklist: z.record(z.string(), z.object({}).passthrough()).optional().describe('Checklist items. Keys are GUIDs, values have title (string) and isChecked (boolean)'),
83
+ references: z.record(z.string(), z.object({}).passthrough()).optional().describe('Reference links. Keys are encoded URLs, values have alias (string) and type (string)'),
84
+ });
85
+ // =============================================================================
86
+ // Planner Tools
87
+ // =============================================================================
88
+ /**
89
+ * Microsoft Planner tools with ETag caching and two-phase delete approval.
90
+ */
91
+ export class PlannerTools {
92
+ repo;
93
+ tokenManager;
94
+ constructor(repo, tokenManager) {
95
+ this.repo = repo;
96
+ this.tokenManager = tokenManager;
97
+ }
98
+ async listPlans() {
99
+ const plans = await this.repo.listPlansAsync();
100
+ return {
101
+ content: [{
102
+ type: 'text',
103
+ text: JSON.stringify({ plans }, null, 2),
104
+ }],
105
+ };
106
+ }
107
+ async getPlan(params) {
108
+ const plan = await this.repo.getPlanAsync(params.plan_id);
109
+ return {
110
+ content: [{
111
+ type: 'text',
112
+ text: JSON.stringify({ plan }, null, 2),
113
+ }],
114
+ };
115
+ }
116
+ async createPlan(params) {
117
+ const planId = await this.repo.createPlanAsync(params.title, params.group_id);
118
+ return {
119
+ content: [{
120
+ type: 'text',
121
+ text: JSON.stringify({ success: true, plan_id: planId, message: 'Plan created' }, null, 2),
122
+ }],
123
+ };
124
+ }
125
+ async updatePlan(params) {
126
+ const updates = {};
127
+ if (params.title != null)
128
+ updates.title = params.title;
129
+ await this.repo.updatePlanAsync(params.plan_id, updates);
130
+ return {
131
+ content: [{
132
+ type: 'text',
133
+ text: JSON.stringify({ success: true, message: 'Plan updated' }, null, 2),
134
+ }],
135
+ };
136
+ }
137
+ async listBuckets(params) {
138
+ const buckets = await this.repo.listBucketsAsync(params.plan_id);
139
+ return {
140
+ content: [{
141
+ type: 'text',
142
+ text: JSON.stringify({ buckets }, null, 2),
143
+ }],
144
+ };
145
+ }
146
+ async createBucket(params) {
147
+ const bucketId = await this.repo.createBucketAsync(params.plan_id, params.name);
148
+ return {
149
+ content: [{
150
+ type: 'text',
151
+ text: JSON.stringify({ success: true, bucket_id: bucketId, message: 'Bucket created' }, null, 2),
152
+ }],
153
+ };
154
+ }
155
+ async updateBucket(params) {
156
+ const updates = {};
157
+ if (params.name != null)
158
+ updates.name = params.name;
159
+ await this.repo.updateBucketAsync(params.bucket_id, updates);
160
+ return {
161
+ content: [{
162
+ type: 'text',
163
+ text: JSON.stringify({ success: true, message: 'Bucket updated' }, null, 2),
164
+ }],
165
+ };
166
+ }
167
+ prepareDeleteBucket(params) {
168
+ const token = this.tokenManager.generateToken({
169
+ operation: 'delete_bucket',
170
+ targetType: 'bucket',
171
+ targetId: params.bucket_id,
172
+ targetHash: String(params.bucket_id),
173
+ });
174
+ return {
175
+ content: [{
176
+ type: 'text',
177
+ text: JSON.stringify({
178
+ approval_token: token.tokenId,
179
+ expires_at: new Date(token.expiresAt).toISOString(),
180
+ bucket_id: params.bucket_id,
181
+ action: `To confirm deleting bucket ${params.bucket_id}, call confirm_delete_bucket with the approval_token.`,
182
+ }, null, 2),
183
+ }],
184
+ };
185
+ }
186
+ async confirmDeleteBucket(params) {
187
+ const token = this.tokenManager.lookupToken(params.approval_token);
188
+ if (token == null) {
189
+ return {
190
+ content: [{
191
+ type: 'text',
192
+ text: JSON.stringify({
193
+ success: false,
194
+ error: 'Token not found or already used',
195
+ }, null, 2),
196
+ }],
197
+ };
198
+ }
199
+ const result = this.tokenManager.consumeToken(params.approval_token, 'delete_bucket', token.targetId);
200
+ if (!result.valid) {
201
+ const errorMessages = {
202
+ NOT_FOUND: 'Token not found or already used',
203
+ EXPIRED: 'Token has expired. Please call prepare_delete_bucket again.',
204
+ OPERATION_MISMATCH: 'Token was not generated for delete_bucket',
205
+ TARGET_MISMATCH: 'Token was generated for a different bucket',
206
+ ALREADY_CONSUMED: 'Token has already been used',
207
+ };
208
+ return {
209
+ content: [{
210
+ type: 'text',
211
+ text: JSON.stringify({
212
+ success: false,
213
+ error: errorMessages[result.error ?? ''] ?? 'Invalid token',
214
+ }, null, 2),
215
+ }],
216
+ };
217
+ }
218
+ await this.repo.deleteBucketAsync(result.token.targetId);
219
+ return {
220
+ content: [{
221
+ type: 'text',
222
+ text: JSON.stringify({ success: true, message: 'Bucket deleted' }, null, 2),
223
+ }],
224
+ };
225
+ }
226
+ // ===========================================================================
227
+ // Planner Tasks
228
+ // ===========================================================================
229
+ async listPlannerTasks(params) {
230
+ const tasks = await this.repo.listPlannerTasksAsync(params.plan_id);
231
+ return {
232
+ content: [{
233
+ type: 'text',
234
+ text: JSON.stringify({ tasks }, null, 2),
235
+ }],
236
+ };
237
+ }
238
+ async getPlannerTask(params) {
239
+ const task = await this.repo.getPlannerTaskAsync(params.task_id);
240
+ return {
241
+ content: [{
242
+ type: 'text',
243
+ text: JSON.stringify({ task }, null, 2),
244
+ }],
245
+ };
246
+ }
247
+ async createPlannerTask(params) {
248
+ const taskId = await this.repo.createPlannerTaskAsync(params.plan_id, params.title, params.bucket_id, params.assignments, params.priority, params.start_date, params.due_date);
249
+ return {
250
+ content: [{
251
+ type: 'text',
252
+ text: JSON.stringify({ success: true, task_id: taskId, message: 'Planner task created' }, null, 2),
253
+ }],
254
+ };
255
+ }
256
+ async updatePlannerTask(params) {
257
+ const updates = {};
258
+ if (params.title != null)
259
+ updates.title = params.title;
260
+ if (params.bucket_id != null)
261
+ updates.bucketId = params.bucket_id;
262
+ if (params.percent_complete != null)
263
+ updates.percentComplete = params.percent_complete;
264
+ if (params.priority != null)
265
+ updates.priority = params.priority;
266
+ if (params.start_date != null)
267
+ updates.startDate = params.start_date;
268
+ if (params.due_date != null)
269
+ updates.dueDate = params.due_date;
270
+ if (params.assignments != null)
271
+ updates.assignments = params.assignments;
272
+ await this.repo.updatePlannerTaskAsync(params.task_id, updates);
273
+ return {
274
+ content: [{
275
+ type: 'text',
276
+ text: JSON.stringify({ success: true, message: 'Planner task updated' }, null, 2),
277
+ }],
278
+ };
279
+ }
280
+ prepareDeletePlannerTask(params) {
281
+ const token = this.tokenManager.generateToken({
282
+ operation: 'delete_planner_task',
283
+ targetType: 'planner_task',
284
+ targetId: params.task_id,
285
+ targetHash: String(params.task_id),
286
+ });
287
+ return {
288
+ content: [{
289
+ type: 'text',
290
+ text: JSON.stringify({
291
+ approval_token: token.tokenId,
292
+ expires_at: new Date(token.expiresAt).toISOString(),
293
+ task_id: params.task_id,
294
+ action: `To confirm deleting planner task ${params.task_id}, call confirm_delete_planner_task with the approval_token.`,
295
+ }, null, 2),
296
+ }],
297
+ };
298
+ }
299
+ async confirmDeletePlannerTask(params) {
300
+ const token = this.tokenManager.lookupToken(params.approval_token);
301
+ if (token == null) {
302
+ return {
303
+ content: [{
304
+ type: 'text',
305
+ text: JSON.stringify({
306
+ success: false,
307
+ error: 'Token not found or already used',
308
+ }, null, 2),
309
+ }],
310
+ };
311
+ }
312
+ const result = this.tokenManager.consumeToken(params.approval_token, 'delete_planner_task', token.targetId);
313
+ if (!result.valid) {
314
+ const errorMessages = {
315
+ NOT_FOUND: 'Token not found or already used',
316
+ EXPIRED: 'Token has expired. Please call prepare_delete_planner_task again.',
317
+ OPERATION_MISMATCH: 'Token was not generated for delete_planner_task',
318
+ TARGET_MISMATCH: 'Token was generated for a different task',
319
+ ALREADY_CONSUMED: 'Token has already been used',
320
+ };
321
+ return {
322
+ content: [{
323
+ type: 'text',
324
+ text: JSON.stringify({
325
+ success: false,
326
+ error: errorMessages[result.error ?? ''] ?? 'Invalid token',
327
+ }, null, 2),
328
+ }],
329
+ };
330
+ }
331
+ await this.repo.deletePlannerTaskAsync(result.token.targetId);
332
+ return {
333
+ content: [{
334
+ type: 'text',
335
+ text: JSON.stringify({ success: true, message: 'Planner task deleted' }, null, 2),
336
+ }],
337
+ };
338
+ }
339
+ // ===========================================================================
340
+ // Planner Task Details
341
+ // ===========================================================================
342
+ async getPlannerTaskDetails(params) {
343
+ const details = await this.repo.getPlannerTaskDetailsAsync(params.task_id);
344
+ return {
345
+ content: [{
346
+ type: 'text',
347
+ text: JSON.stringify({ details }, null, 2),
348
+ }],
349
+ };
350
+ }
351
+ async updatePlannerTaskDetails(params) {
352
+ const updates = {};
353
+ if (params.description != null)
354
+ updates.description = params.description;
355
+ if (params.checklist != null)
356
+ updates.checklist = params.checklist;
357
+ if (params.references != null)
358
+ updates.references = params.references;
359
+ await this.repo.updatePlannerTaskDetailsAsync(params.task_id, updates);
360
+ return {
361
+ content: [{
362
+ type: 'text',
363
+ text: JSON.stringify({ success: true, message: 'Planner task details updated' }, null, 2),
364
+ }],
365
+ };
366
+ }
367
+ }
368
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/tools/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Copyright (c) 2026 JBC Tech Solutions, LLC
3
+ * Licensed under the MIT License. See LICENSE file in the project root.
4
+ */
5
+ /**
6
+ * Calendar scheduling MCP tools.
7
+ *
8
+ * Provides tools for checking free/busy availability and
9
+ * finding optimal meeting times for groups of attendees.
10
+ */
11
+ import { z } from 'zod';
12
+ export interface ISchedulingRepository {
13
+ getScheduleAsync(params: {
14
+ emailAddresses: string[];
15
+ startTime: string;
16
+ endTime: string;
17
+ availabilityViewInterval?: number;
18
+ }): Promise<unknown[]>;
19
+ findMeetingTimesAsync(params: {
20
+ attendees: string[];
21
+ durationMinutes: number;
22
+ startTime?: string;
23
+ endTime?: string;
24
+ maxCandidates?: number;
25
+ }): Promise<unknown>;
26
+ }
27
+ export declare const CheckAvailabilityInput: z.ZodObject<{
28
+ email_addresses: z.ZodArray<z.ZodString>;
29
+ start_time: z.ZodString;
30
+ end_time: z.ZodString;
31
+ availability_view_interval: z.ZodDefault<z.ZodNumber>;
32
+ }, z.core.$strict>;
33
+ export declare const FindMeetingTimesInput: z.ZodObject<{
34
+ attendees: z.ZodArray<z.ZodString>;
35
+ duration_minutes: z.ZodNumber;
36
+ start_time: z.ZodOptional<z.ZodString>;
37
+ end_time: z.ZodOptional<z.ZodString>;
38
+ max_candidates: z.ZodDefault<z.ZodNumber>;
39
+ }, z.core.$strict>;
40
+ export declare class SchedulingTools {
41
+ private readonly repository;
42
+ constructor(repository: ISchedulingRepository);
43
+ checkAvailability(params: z.input<typeof CheckAvailabilityInput>): Promise<{
44
+ schedules: unknown[];
45
+ }>;
46
+ findMeetingTimes(params: z.input<typeof FindMeetingTimesInput>): Promise<unknown>;
47
+ }
48
+ export declare function createSchedulingTools(repository: ISchedulingRepository): SchedulingTools;
49
+ //# sourceMappingURL=scheduling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../src/tools/scheduling.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,MAAM,EAAE;QACvB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KACnC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvB,qBAAqB,CAAC,MAAM,EAAE;QAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAYD,eAAO,MAAM,sBAAsB;;;;;kBAuB/B,CAAC;AAEL,eAAO,MAAM,qBAAqB;;;;;;kBAmC9B,CAAC;AAML,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,qBAAqB;IAExD,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAWpG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAUxF;AAMD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CAExF"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Copyright (c) 2026 JBC Tech Solutions, LLC
3
+ * Licensed under the MIT License. See LICENSE file in the project root.
4
+ */
5
+ /**
6
+ * Calendar scheduling MCP tools.
7
+ *
8
+ * Provides tools for checking free/busy availability and
9
+ * finding optimal meeting times for groups of attendees.
10
+ */
11
+ import { z } from 'zod';
12
+ // =============================================================================
13
+ // Zod Schemas
14
+ // =============================================================================
15
+ const iso8601DateTimeString = z
16
+ .string()
17
+ .refine((value) => !Number.isNaN(Date.parse(value)), {
18
+ message: 'must be a valid ISO 8601 date-time string',
19
+ });
20
+ export const CheckAvailabilityInput = z
21
+ .strictObject({
22
+ email_addresses: z.array(z.string().email()).min(1).describe('Email addresses to check availability for'),
23
+ start_time: iso8601DateTimeString.describe('Start of time window (ISO 8601)'),
24
+ end_time: iso8601DateTimeString.describe('End of time window (ISO 8601)'),
25
+ availability_view_interval: z
26
+ .number()
27
+ .int()
28
+ .min(5)
29
+ .max(1440)
30
+ .default(30)
31
+ .describe('Time slot interval in minutes (default: 30)'),
32
+ })
33
+ .superRefine((data, ctx) => {
34
+ const start = Date.parse(data.start_time);
35
+ const end = Date.parse(data.end_time);
36
+ if (!Number.isNaN(start) && !Number.isNaN(end) && start >= end) {
37
+ ctx.addIssue({
38
+ code: z.ZodIssueCode.custom,
39
+ path: ['end_time'],
40
+ message: 'end_time must be after start_time',
41
+ });
42
+ }
43
+ });
44
+ export const FindMeetingTimesInput = z
45
+ .strictObject({
46
+ attendees: z.array(z.string().email()).min(1).describe('Attendee email addresses'),
47
+ duration_minutes: z.number().int().min(1).describe('Meeting duration in minutes'),
48
+ start_time: iso8601DateTimeString.optional().describe('Start of search window (ISO 8601)'),
49
+ end_time: iso8601DateTimeString.optional().describe('End of search window (ISO 8601)'),
50
+ max_candidates: z
51
+ .number()
52
+ .int()
53
+ .min(1)
54
+ .max(25)
55
+ .default(5)
56
+ .describe('Max time suggestions to return (default: 5)'),
57
+ })
58
+ .superRefine((data, ctx) => {
59
+ if (data.start_time != null && data.end_time != null) {
60
+ const start = Date.parse(data.start_time);
61
+ const end = Date.parse(data.end_time);
62
+ if (!Number.isNaN(start) && !Number.isNaN(end) && start >= end) {
63
+ ctx.addIssue({
64
+ code: z.ZodIssueCode.custom,
65
+ path: ['end_time'],
66
+ message: 'end_time must be after start_time when both are provided',
67
+ });
68
+ }
69
+ }
70
+ const hasStart = data.start_time !== undefined;
71
+ const hasEnd = data.end_time !== undefined;
72
+ if (hasStart !== hasEnd) {
73
+ ctx.addIssue({
74
+ code: z.ZodIssueCode.custom,
75
+ path: hasStart ? ['end_time'] : ['start_time'],
76
+ message: 'start_time and end_time must be provided together or omitted together',
77
+ });
78
+ }
79
+ });
80
+ // =============================================================================
81
+ // Scheduling Tools Class
82
+ // =============================================================================
83
+ export class SchedulingTools {
84
+ repository;
85
+ constructor(repository) {
86
+ this.repository = repository;
87
+ }
88
+ async checkAvailability(params) {
89
+ const parsed = CheckAvailabilityInput.parse(params);
90
+ const schedules = await this.repository.getScheduleAsync({
91
+ emailAddresses: parsed.email_addresses,
92
+ startTime: parsed.start_time,
93
+ endTime: parsed.end_time,
94
+ availabilityViewInterval: parsed.availability_view_interval,
95
+ });
96
+ return { schedules };
97
+ }
98
+ async findMeetingTimes(params) {
99
+ const parsed = FindMeetingTimesInput.parse(params);
100
+ return await this.repository.findMeetingTimesAsync({
101
+ attendees: parsed.attendees,
102
+ durationMinutes: parsed.duration_minutes,
103
+ ...(parsed.start_time !== undefined && { startTime: parsed.start_time }),
104
+ ...(parsed.end_time !== undefined && { endTime: parsed.end_time }),
105
+ maxCandidates: parsed.max_candidates,
106
+ });
107
+ }
108
+ }
109
+ // =============================================================================
110
+ // Factory
111
+ // =============================================================================
112
+ export function createSchedulingTools(repository) {
113
+ return new SchedulingTools(repository);
114
+ }
115
+ //# sourceMappingURL=scheduling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../src/tools/scheduling.ts"],"names":[],"mappings":"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"}