@mcp-z/mcp-outlook 1.0.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 (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/bin/server.js +5 -0
  4. package/dist/cjs/constants.d.cts +10 -0
  5. package/dist/cjs/constants.d.ts +10 -0
  6. package/dist/cjs/constants.js +35 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/email/composition/outlook-message-builder.d.cts +36 -0
  9. package/dist/cjs/email/composition/outlook-message-builder.d.ts +36 -0
  10. package/dist/cjs/email/composition/outlook-message-builder.js +56 -0
  11. package/dist/cjs/email/composition/outlook-message-builder.js.map +1 -0
  12. package/dist/cjs/email/messages/messages.d.cts +7 -0
  13. package/dist/cjs/email/messages/messages.d.ts +7 -0
  14. package/dist/cjs/email/messages/messages.js +61 -0
  15. package/dist/cjs/email/messages/messages.js.map +1 -0
  16. package/dist/cjs/email/parsing/header-parsing.d.cts +18 -0
  17. package/dist/cjs/email/parsing/header-parsing.d.ts +18 -0
  18. package/dist/cjs/email/parsing/header-parsing.js +42 -0
  19. package/dist/cjs/email/parsing/header-parsing.js.map +1 -0
  20. package/dist/cjs/email/parsing/message-extraction.d.cts +4 -0
  21. package/dist/cjs/email/parsing/message-extraction.d.ts +4 -0
  22. package/dist/cjs/email/parsing/message-extraction.js +192 -0
  23. package/dist/cjs/email/parsing/message-extraction.js.map +1 -0
  24. package/dist/cjs/email/parsing/message-mapping.d.cts +21 -0
  25. package/dist/cjs/email/parsing/message-mapping.d.ts +21 -0
  26. package/dist/cjs/email/parsing/message-mapping.js +47 -0
  27. package/dist/cjs/email/parsing/message-mapping.js.map +1 -0
  28. package/dist/cjs/email/querying/execute-query.d.cts +20 -0
  29. package/dist/cjs/email/querying/execute-query.d.ts +20 -0
  30. package/dist/cjs/email/querying/execute-query.js +268 -0
  31. package/dist/cjs/email/querying/execute-query.js.map +1 -0
  32. package/dist/cjs/email/querying/query-builder.d.cts +32 -0
  33. package/dist/cjs/email/querying/query-builder.d.ts +32 -0
  34. package/dist/cjs/email/querying/query-builder.js +528 -0
  35. package/dist/cjs/email/querying/query-builder.js.map +1 -0
  36. package/dist/cjs/email/querying/search-execution.d.cts +24 -0
  37. package/dist/cjs/email/querying/search-execution.d.ts +24 -0
  38. package/dist/cjs/email/querying/search-execution.js +261 -0
  39. package/dist/cjs/email/querying/search-execution.js.map +1 -0
  40. package/dist/cjs/index.d.cts +8 -0
  41. package/dist/cjs/index.d.ts +8 -0
  42. package/dist/cjs/index.js +314 -0
  43. package/dist/cjs/index.js.map +1 -0
  44. package/dist/cjs/lib/create-store.d.cts +2 -0
  45. package/dist/cjs/lib/create-store.d.ts +2 -0
  46. package/dist/cjs/lib/create-store.js +166 -0
  47. package/dist/cjs/lib/create-store.js.map +1 -0
  48. package/dist/cjs/lib/messages-to-row.d.cts +39 -0
  49. package/dist/cjs/lib/messages-to-row.d.ts +39 -0
  50. package/dist/cjs/lib/messages-to-row.js +177 -0
  51. package/dist/cjs/lib/messages-to-row.js.map +1 -0
  52. package/dist/cjs/lib/outlook/index.d.cts +7 -0
  53. package/dist/cjs/lib/outlook/index.d.ts +7 -0
  54. package/dist/cjs/lib/outlook/index.js +56 -0
  55. package/dist/cjs/lib/outlook/index.js.map +1 -0
  56. package/dist/cjs/lib/outlook/types.d.cts +22 -0
  57. package/dist/cjs/lib/outlook/types.d.ts +22 -0
  58. package/dist/cjs/lib/outlook/types.js +6 -0
  59. package/dist/cjs/lib/outlook/types.js.map +1 -0
  60. package/dist/cjs/mcp/index.d.cts +3 -0
  61. package/dist/cjs/mcp/index.d.ts +3 -0
  62. package/dist/cjs/mcp/index.js +66 -0
  63. package/dist/cjs/mcp/index.js.map +1 -0
  64. package/dist/cjs/mcp/prompts/draft-email.d.cts +30 -0
  65. package/dist/cjs/mcp/prompts/draft-email.d.ts +30 -0
  66. package/dist/cjs/mcp/prompts/draft-email.js +184 -0
  67. package/dist/cjs/mcp/prompts/draft-email.js.map +1 -0
  68. package/dist/cjs/mcp/prompts/index.d.cts +2 -0
  69. package/dist/cjs/mcp/prompts/index.d.ts +2 -0
  70. package/dist/cjs/mcp/prompts/index.js +26 -0
  71. package/dist/cjs/mcp/prompts/index.js.map +1 -0
  72. package/dist/cjs/mcp/prompts/query-syntax.d.cts +19 -0
  73. package/dist/cjs/mcp/prompts/query-syntax.d.ts +19 -0
  74. package/dist/cjs/mcp/prompts/query-syntax.js +169 -0
  75. package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -0
  76. package/dist/cjs/mcp/resources/email.d.cts +11 -0
  77. package/dist/cjs/mcp/resources/email.d.ts +11 -0
  78. package/dist/cjs/mcp/resources/email.js +233 -0
  79. package/dist/cjs/mcp/resources/email.js.map +1 -0
  80. package/dist/cjs/mcp/resources/index.d.cts +1 -0
  81. package/dist/cjs/mcp/resources/index.d.ts +1 -0
  82. package/dist/cjs/mcp/resources/index.js +17 -0
  83. package/dist/cjs/mcp/resources/index.js.map +1 -0
  84. package/dist/cjs/mcp/tools/categories-list.d.cts +96 -0
  85. package/dist/cjs/mcp/tools/categories-list.d.ts +96 -0
  86. package/dist/cjs/mcp/tools/categories-list.js +252 -0
  87. package/dist/cjs/mcp/tools/categories-list.js.map +1 -0
  88. package/dist/cjs/mcp/tools/index.d.cts +11 -0
  89. package/dist/cjs/mcp/tools/index.d.ts +11 -0
  90. package/dist/cjs/mcp/tools/index.js +62 -0
  91. package/dist/cjs/mcp/tools/index.js.map +1 -0
  92. package/dist/cjs/mcp/tools/label-add.d.cts +44 -0
  93. package/dist/cjs/mcp/tools/label-add.d.ts +44 -0
  94. package/dist/cjs/mcp/tools/label-add.js +249 -0
  95. package/dist/cjs/mcp/tools/label-add.js.map +1 -0
  96. package/dist/cjs/mcp/tools/label-delete.d.cts +54 -0
  97. package/dist/cjs/mcp/tools/label-delete.d.ts +54 -0
  98. package/dist/cjs/mcp/tools/label-delete.js +497 -0
  99. package/dist/cjs/mcp/tools/label-delete.js.map +1 -0
  100. package/dist/cjs/mcp/tools/labels-list.d.cts +96 -0
  101. package/dist/cjs/mcp/tools/labels-list.d.ts +96 -0
  102. package/dist/cjs/mcp/tools/labels-list.js +252 -0
  103. package/dist/cjs/mcp/tools/labels-list.js.map +1 -0
  104. package/dist/cjs/mcp/tools/message-get.d.cts +110 -0
  105. package/dist/cjs/mcp/tools/message-get.d.ts +110 -0
  106. package/dist/cjs/mcp/tools/message-get.js +289 -0
  107. package/dist/cjs/mcp/tools/message-get.js.map +1 -0
  108. package/dist/cjs/mcp/tools/message-mark-read.d.cts +42 -0
  109. package/dist/cjs/mcp/tools/message-mark-read.d.ts +42 -0
  110. package/dist/cjs/mcp/tools/message-mark-read.js +254 -0
  111. package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -0
  112. package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +54 -0
  113. package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +54 -0
  114. package/dist/cjs/mcp/tools/message-move-to-trash.js +460 -0
  115. package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -0
  116. package/dist/cjs/mcp/tools/message-respond.d.cts +52 -0
  117. package/dist/cjs/mcp/tools/message-respond.d.ts +52 -0
  118. package/dist/cjs/mcp/tools/message-respond.js +263 -0
  119. package/dist/cjs/mcp/tools/message-respond.js.map +1 -0
  120. package/dist/cjs/mcp/tools/message-search.d.cts +138 -0
  121. package/dist/cjs/mcp/tools/message-search.d.ts +138 -0
  122. package/dist/cjs/mcp/tools/message-search.js +408 -0
  123. package/dist/cjs/mcp/tools/message-search.js.map +1 -0
  124. package/dist/cjs/mcp/tools/message-send.d.cts +66 -0
  125. package/dist/cjs/mcp/tools/message-send.d.ts +66 -0
  126. package/dist/cjs/mcp/tools/message-send.js +298 -0
  127. package/dist/cjs/mcp/tools/message-send.js.map +1 -0
  128. package/dist/cjs/mcp/tools/messages-export-csv.d.cts +72 -0
  129. package/dist/cjs/mcp/tools/messages-export-csv.d.ts +72 -0
  130. package/dist/cjs/mcp/tools/messages-export-csv.js +540 -0
  131. package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -0
  132. package/dist/cjs/package.json +1 -0
  133. package/dist/cjs/schemas/index.d.cts +2 -0
  134. package/dist/cjs/schemas/index.d.ts +2 -0
  135. package/dist/cjs/schemas/index.js +20 -0
  136. package/dist/cjs/schemas/index.js.map +1 -0
  137. package/dist/cjs/schemas/outlook-query-schema.d.cts +53 -0
  138. package/dist/cjs/schemas/outlook-query-schema.d.ts +53 -0
  139. package/dist/cjs/schemas/outlook-query-schema.js +115 -0
  140. package/dist/cjs/schemas/outlook-query-schema.js.map +1 -0
  141. package/dist/cjs/schemas/outlook-validation.d.cts +428 -0
  142. package/dist/cjs/schemas/outlook-validation.d.ts +428 -0
  143. package/dist/cjs/schemas/outlook-validation.js +420 -0
  144. package/dist/cjs/schemas/outlook-validation.js.map +1 -0
  145. package/dist/cjs/setup/config.d.cts +50 -0
  146. package/dist/cjs/setup/config.d.ts +50 -0
  147. package/dist/cjs/setup/config.js +217 -0
  148. package/dist/cjs/setup/config.js.map +1 -0
  149. package/dist/cjs/setup/http.d.cts +8 -0
  150. package/dist/cjs/setup/http.d.ts +8 -0
  151. package/dist/cjs/setup/http.js +267 -0
  152. package/dist/cjs/setup/http.js.map +1 -0
  153. package/dist/cjs/setup/index.d.cts +5 -0
  154. package/dist/cjs/setup/index.d.ts +5 -0
  155. package/dist/cjs/setup/index.js +46 -0
  156. package/dist/cjs/setup/index.js.map +1 -0
  157. package/dist/cjs/setup/oauth-microsoft.d.cts +43 -0
  158. package/dist/cjs/setup/oauth-microsoft.d.ts +43 -0
  159. package/dist/cjs/setup/oauth-microsoft.js +366 -0
  160. package/dist/cjs/setup/oauth-microsoft.js.map +1 -0
  161. package/dist/cjs/setup/runtime.d.cts +11 -0
  162. package/dist/cjs/setup/runtime.d.ts +11 -0
  163. package/dist/cjs/setup/runtime.js +489 -0
  164. package/dist/cjs/setup/runtime.js.map +1 -0
  165. package/dist/cjs/setup/stdio.d.cts +7 -0
  166. package/dist/cjs/setup/stdio.d.ts +7 -0
  167. package/dist/cjs/setup/stdio.js +239 -0
  168. package/dist/cjs/setup/stdio.js.map +1 -0
  169. package/dist/cjs/types.d.cts +54 -0
  170. package/dist/cjs/types.d.ts +54 -0
  171. package/dist/cjs/types.js +5 -0
  172. package/dist/cjs/types.js.map +1 -0
  173. package/dist/esm/constants.d.ts +10 -0
  174. package/dist/esm/constants.js +13 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/email/composition/outlook-message-builder.d.ts +36 -0
  177. package/dist/esm/email/composition/outlook-message-builder.js +46 -0
  178. package/dist/esm/email/composition/outlook-message-builder.js.map +1 -0
  179. package/dist/esm/email/messages/messages.d.ts +7 -0
  180. package/dist/esm/email/messages/messages.js +42 -0
  181. package/dist/esm/email/messages/messages.js.map +1 -0
  182. package/dist/esm/email/parsing/header-parsing.d.ts +18 -0
  183. package/dist/esm/email/parsing/header-parsing.js +18 -0
  184. package/dist/esm/email/parsing/header-parsing.js.map +1 -0
  185. package/dist/esm/email/parsing/message-extraction.d.ts +4 -0
  186. package/dist/esm/email/parsing/message-extraction.js +26 -0
  187. package/dist/esm/email/parsing/message-extraction.js.map +1 -0
  188. package/dist/esm/email/parsing/message-mapping.d.ts +21 -0
  189. package/dist/esm/email/parsing/message-mapping.js +35 -0
  190. package/dist/esm/email/parsing/message-mapping.js.map +1 -0
  191. package/dist/esm/email/querying/execute-query.d.ts +20 -0
  192. package/dist/esm/email/querying/execute-query.js +48 -0
  193. package/dist/esm/email/querying/execute-query.js.map +1 -0
  194. package/dist/esm/email/querying/query-builder.d.ts +32 -0
  195. package/dist/esm/email/querying/query-builder.js +424 -0
  196. package/dist/esm/email/querying/query-builder.js.map +1 -0
  197. package/dist/esm/email/querying/search-execution.d.ts +24 -0
  198. package/dist/esm/email/querying/search-execution.js +96 -0
  199. package/dist/esm/email/querying/search-execution.js.map +1 -0
  200. package/dist/esm/index.d.ts +8 -0
  201. package/dist/esm/index.js +34 -0
  202. package/dist/esm/index.js.map +1 -0
  203. package/dist/esm/lib/create-store.d.ts +2 -0
  204. package/dist/esm/lib/create-store.js +6 -0
  205. package/dist/esm/lib/create-store.js.map +1 -0
  206. package/dist/esm/lib/messages-to-row.d.ts +39 -0
  207. package/dist/esm/lib/messages-to-row.js +141 -0
  208. package/dist/esm/lib/messages-to-row.js.map +1 -0
  209. package/dist/esm/lib/outlook/index.d.ts +7 -0
  210. package/dist/esm/lib/outlook/index.js +7 -0
  211. package/dist/esm/lib/outlook/index.js.map +1 -0
  212. package/dist/esm/lib/outlook/types.d.ts +22 -0
  213. package/dist/esm/lib/outlook/types.js +2 -0
  214. package/dist/esm/lib/outlook/types.js.map +1 -0
  215. package/dist/esm/mcp/index.d.ts +3 -0
  216. package/dist/esm/mcp/index.js +6 -0
  217. package/dist/esm/mcp/index.js.map +1 -0
  218. package/dist/esm/mcp/prompts/draft-email.d.ts +30 -0
  219. package/dist/esm/mcp/prompts/draft-email.js +37 -0
  220. package/dist/esm/mcp/prompts/draft-email.js.map +1 -0
  221. package/dist/esm/mcp/prompts/index.d.ts +2 -0
  222. package/dist/esm/mcp/prompts/index.js +2 -0
  223. package/dist/esm/mcp/prompts/index.js.map +1 -0
  224. package/dist/esm/mcp/prompts/query-syntax.d.ts +19 -0
  225. package/dist/esm/mcp/prompts/query-syntax.js +75 -0
  226. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -0
  227. package/dist/esm/mcp/resources/email.d.ts +11 -0
  228. package/dist/esm/mcp/resources/email.js +69 -0
  229. package/dist/esm/mcp/resources/email.js.map +1 -0
  230. package/dist/esm/mcp/resources/index.d.ts +1 -0
  231. package/dist/esm/mcp/resources/index.js +1 -0
  232. package/dist/esm/mcp/resources/index.js.map +1 -0
  233. package/dist/esm/mcp/tools/categories-list.d.ts +96 -0
  234. package/dist/esm/mcp/tools/categories-list.js +78 -0
  235. package/dist/esm/mcp/tools/categories-list.js.map +1 -0
  236. package/dist/esm/mcp/tools/index.d.ts +11 -0
  237. package/dist/esm/mcp/tools/index.js +11 -0
  238. package/dist/esm/mcp/tools/index.js.map +1 -0
  239. package/dist/esm/mcp/tools/label-add.d.ts +44 -0
  240. package/dist/esm/mcp/tools/label-add.js +75 -0
  241. package/dist/esm/mcp/tools/label-add.js.map +1 -0
  242. package/dist/esm/mcp/tools/label-delete.d.ts +54 -0
  243. package/dist/esm/mcp/tools/label-delete.js +166 -0
  244. package/dist/esm/mcp/tools/label-delete.js.map +1 -0
  245. package/dist/esm/mcp/tools/labels-list.d.ts +96 -0
  246. package/dist/esm/mcp/tools/labels-list.js +78 -0
  247. package/dist/esm/mcp/tools/labels-list.js.map +1 -0
  248. package/dist/esm/mcp/tools/message-get.d.ts +110 -0
  249. package/dist/esm/mcp/tools/message-get.js +117 -0
  250. package/dist/esm/mcp/tools/message-get.js.map +1 -0
  251. package/dist/esm/mcp/tools/message-mark-read.d.ts +42 -0
  252. package/dist/esm/mcp/tools/message-mark-read.js +80 -0
  253. package/dist/esm/mcp/tools/message-mark-read.js.map +1 -0
  254. package/dist/esm/mcp/tools/message-move-to-trash.d.ts +54 -0
  255. package/dist/esm/mcp/tools/message-move-to-trash.js +177 -0
  256. package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -0
  257. package/dist/esm/mcp/tools/message-respond.d.ts +52 -0
  258. package/dist/esm/mcp/tools/message-respond.js +89 -0
  259. package/dist/esm/mcp/tools/message-respond.js.map +1 -0
  260. package/dist/esm/mcp/tools/message-search.d.ts +138 -0
  261. package/dist/esm/mcp/tools/message-search.js +184 -0
  262. package/dist/esm/mcp/tools/message-search.js.map +1 -0
  263. package/dist/esm/mcp/tools/message-send.d.ts +66 -0
  264. package/dist/esm/mcp/tools/message-send.js +111 -0
  265. package/dist/esm/mcp/tools/message-send.js.map +1 -0
  266. package/dist/esm/mcp/tools/messages-export-csv.d.ts +72 -0
  267. package/dist/esm/mcp/tools/messages-export-csv.js +273 -0
  268. package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -0
  269. package/dist/esm/package.json +1 -0
  270. package/dist/esm/schemas/index.d.ts +2 -0
  271. package/dist/esm/schemas/index.js +2 -0
  272. package/dist/esm/schemas/index.js.map +1 -0
  273. package/dist/esm/schemas/outlook-query-schema.d.ts +53 -0
  274. package/dist/esm/schemas/outlook-query-schema.js +63 -0
  275. package/dist/esm/schemas/outlook-query-schema.js.map +1 -0
  276. package/dist/esm/schemas/outlook-validation.d.ts +428 -0
  277. package/dist/esm/schemas/outlook-validation.js +388 -0
  278. package/dist/esm/schemas/outlook-validation.js.map +1 -0
  279. package/dist/esm/setup/config.d.ts +50 -0
  280. package/dist/esm/setup/config.js +180 -0
  281. package/dist/esm/setup/config.js.map +1 -0
  282. package/dist/esm/setup/http.d.ts +8 -0
  283. package/dist/esm/setup/http.js +61 -0
  284. package/dist/esm/setup/http.js.map +1 -0
  285. package/dist/esm/setup/index.d.ts +5 -0
  286. package/dist/esm/setup/index.js +5 -0
  287. package/dist/esm/setup/index.js.map +1 -0
  288. package/dist/esm/setup/oauth-microsoft.d.ts +43 -0
  289. package/dist/esm/setup/oauth-microsoft.js +169 -0
  290. package/dist/esm/setup/oauth-microsoft.js.map +1 -0
  291. package/dist/esm/setup/runtime.d.ts +11 -0
  292. package/dist/esm/setup/runtime.js +115 -0
  293. package/dist/esm/setup/runtime.js.map +1 -0
  294. package/dist/esm/setup/stdio.d.ts +7 -0
  295. package/dist/esm/setup/stdio.js +38 -0
  296. package/dist/esm/setup/stdio.js.map +1 -0
  297. package/dist/esm/types.d.ts +54 -0
  298. package/dist/esm/types.js +1 -0
  299. package/dist/esm/types.js.map +1 -0
  300. package/package.json +111 -0
@@ -0,0 +1,388 @@
1
+ import { z } from 'zod';
2
+ // Base schemas for common Microsoft types
3
+ export const EmailAddressSchema = z.object({
4
+ name: z.string().optional().describe('Display name of the recipient'),
5
+ address: z.string().email().describe('Email address')
6
+ });
7
+ export const RecipientSchema = z.object({
8
+ emailAddress: EmailAddressSchema
9
+ });
10
+ // Outlook Message schema based on Microsoft Graph API
11
+ export const OutlookMessageSchema = z.object({
12
+ id: z.string().optional().describe('Unique identifier for the message'),
13
+ subject: z.string().optional().describe('Subject of the email message'),
14
+ body: z.object({
15
+ contentType: z.enum([
16
+ 'text',
17
+ 'html'
18
+ ]).optional().describe('Content type of the body'),
19
+ content: z.string().optional().describe('Body content of the message')
20
+ }).optional(),
21
+ bodyPreview: z.string().optional().describe('First 255 characters of the message body'),
22
+ importance: z.enum([
23
+ 'low',
24
+ 'normal',
25
+ 'high'
26
+ ]).optional().describe('Importance level of the message'),
27
+ hasAttachments: z.boolean().optional().describe('Indicates whether the message has attachments'),
28
+ parentFolderId: z.string().optional().describe('ID of the parent folder'),
29
+ sender: RecipientSchema.optional().describe('Account used to send the message'),
30
+ from: RecipientSchema.optional().describe('Sender of the message'),
31
+ toRecipients: z.array(RecipientSchema).optional().describe('To recipients of the message'),
32
+ ccRecipients: z.array(RecipientSchema).optional().describe('CC recipients of the message'),
33
+ bccRecipients: z.array(RecipientSchema).optional().describe('BCC recipients of the message'),
34
+ replyTo: z.array(RecipientSchema).optional().describe('Reply-to recipients'),
35
+ conversationId: z.string().optional().describe('ID of the conversation the email belongs to'),
36
+ conversationIndex: z.string().optional().describe('Index for conversation threading'),
37
+ receivedDateTime: z.string().optional().describe('ISO datetime when message was received'),
38
+ sentDateTime: z.string().optional().describe('ISO datetime when message was sent'),
39
+ createdDateTime: z.string().optional().describe('ISO datetime when message was created'),
40
+ lastModifiedDateTime: z.string().optional().describe('ISO datetime when message was last modified'),
41
+ changeKey: z.string().optional().describe('Version of the message'),
42
+ categories: z.array(z.string()).optional().describe('Categories associated with the message'),
43
+ isDeliveryReceiptRequested: z.boolean().optional().describe('Whether delivery receipt is requested'),
44
+ isReadReceiptRequested: z.boolean().optional().describe('Whether read receipt is requested'),
45
+ isRead: z.boolean().optional().describe('Whether the message has been read'),
46
+ isDraft: z.boolean().optional().describe('Whether the message is a draft'),
47
+ webLink: z.string().optional().describe('URL to open the message in Outlook on the web'),
48
+ inferenceClassification: z.enum([
49
+ 'focused',
50
+ 'other'
51
+ ]).optional().describe('Classification for focused inbox'),
52
+ flag: z.object({
53
+ flagStatus: z.enum([
54
+ 'notFlagged',
55
+ 'complete',
56
+ 'flagged'
57
+ ]).describe('Status of the flag'),
58
+ startDateTime: z.string().optional().describe('Start date for the flag'),
59
+ dueDateTime: z.string().optional().describe('Due date for the flag')
60
+ }).optional().describe('Flag information for the message')
61
+ });
62
+ // Outlook Folder schema
63
+ export const OutlookFolderSchema = z.object({
64
+ id: z.string().optional().describe('Unique identifier for the folder'),
65
+ displayName: z.string().optional().describe('Display name of the folder'),
66
+ parentFolderId: z.string().optional().describe('ID of the parent folder'),
67
+ childFolderCount: z.number().optional().describe('Number of immediate child folders'),
68
+ unreadItemCount: z.number().optional().describe('Number of unread items in the folder'),
69
+ totalItemCount: z.number().optional().describe('Total number of items in the folder'),
70
+ sizeInBytes: z.number().optional().describe('Size of the folder in bytes'),
71
+ isHidden: z.boolean().optional().describe('Whether the folder is hidden'),
72
+ wellKnownName: z.enum([
73
+ 'archive',
74
+ 'clutter',
75
+ 'conflicts',
76
+ 'conversationhistory',
77
+ 'deleteditems',
78
+ 'drafts',
79
+ 'inbox',
80
+ 'junkemail',
81
+ 'localfailures',
82
+ 'msgfolderroot',
83
+ 'outbox',
84
+ 'recoverableitemsdeletions',
85
+ 'scheduled',
86
+ 'searchfolders',
87
+ 'sentitems',
88
+ 'serverfailures',
89
+ 'syncissues'
90
+ ]).optional().describe('Well-known folder name if applicable')
91
+ });
92
+ // Outlook Attachment schema
93
+ export const OutlookAttachmentSchema = z.object({
94
+ id: z.string().optional().describe('Unique identifier for the attachment'),
95
+ name: z.string().optional().describe('Name of the attachment'),
96
+ contentType: z.string().optional().describe('MIME type of the attachment'),
97
+ size: z.number().optional().describe('Size of the attachment in bytes'),
98
+ isInline: z.boolean().optional().describe('Whether the attachment is inline'),
99
+ lastModifiedDateTime: z.string().optional().describe('ISO datetime when attachment was last modified'),
100
+ contentId: z.string().optional().describe('Content ID for inline attachments'),
101
+ contentLocation: z.string().optional().describe('Content location for inline attachments'),
102
+ contentBytes: z.string().optional().describe('Base64-encoded content of the attachment')
103
+ });
104
+ // OneDrive file schema (subset of Microsoft Graph DriveItem)
105
+ export const OneDriveFileSchema = z.object({
106
+ id: z.string().optional().describe('Unique identifier for the file'),
107
+ name: z.string().optional().describe('Name of the file'),
108
+ size: z.number().optional().describe('Size of the file in bytes'),
109
+ createdDateTime: z.string().optional().describe('ISO datetime when file was created'),
110
+ lastModifiedDateTime: z.string().optional().describe('ISO datetime when file was last modified'),
111
+ webUrl: z.string().optional().describe('URL to view the file in OneDrive'),
112
+ downloadUrl: z.string().optional().describe('Direct download URL for the file'),
113
+ parentReference: z.object({
114
+ driveId: z.string().optional().describe('ID of the drive containing the file'),
115
+ driveType: z.enum([
116
+ 'personal',
117
+ 'business',
118
+ 'documentLibrary'
119
+ ]).optional().describe('Type of drive'),
120
+ id: z.string().optional().describe('ID of the parent folder'),
121
+ name: z.string().optional().describe('Name of the parent folder'),
122
+ path: z.string().optional().describe('Path to the parent folder')
123
+ }).optional().describe('Reference to the parent folder'),
124
+ file: z.object({
125
+ mimeType: z.string().optional().describe('MIME type of the file'),
126
+ hashes: z.object({
127
+ quickXorHash: z.string().optional().describe('QuickXorHash of the file'),
128
+ sha1Hash: z.string().optional().describe('SHA1 hash of the file'),
129
+ sha256Hash: z.string().optional().describe('SHA256 hash of the file')
130
+ }).optional().describe('Hash values for the file')
131
+ }).optional().describe('File-specific properties'),
132
+ folder: z.object({
133
+ childCount: z.number().optional().describe('Number of children in the folder')
134
+ }).optional().describe('Folder-specific properties (present if item is a folder)'),
135
+ shared: z.object({
136
+ scope: z.enum([
137
+ 'anonymous',
138
+ 'organization',
139
+ 'users'
140
+ ]).optional().describe('Scope of sharing'),
141
+ owner: z.object({
142
+ user: z.object({
143
+ displayName: z.string().optional(),
144
+ id: z.string().optional()
145
+ }).optional()
146
+ }).optional()
147
+ }).optional().describe('Sharing information'),
148
+ createdBy: z.object({
149
+ user: z.object({
150
+ displayName: z.string().optional(),
151
+ id: z.string().optional()
152
+ }).optional()
153
+ }).optional().describe('User who created the file'),
154
+ lastModifiedBy: z.object({
155
+ user: z.object({
156
+ displayName: z.string().optional(),
157
+ id: z.string().optional()
158
+ }).optional()
159
+ }).optional().describe('User who last modified the file')
160
+ });
161
+ // Microsoft Calendar Event schema
162
+ export const OutlookCalendarEventSchema = z.object({
163
+ id: z.string().optional().describe('Unique identifier for the event'),
164
+ subject: z.string().optional().describe('Subject of the event'),
165
+ body: z.object({
166
+ contentType: z.enum([
167
+ 'text',
168
+ 'html'
169
+ ]).optional().describe('Content type of the body'),
170
+ content: z.string().optional().describe('Body content of the event')
171
+ }).optional(),
172
+ start: z.object({
173
+ dateTime: z.string().describe('Start date and time in ISO format'),
174
+ timeZone: z.string().optional().describe('Time zone for the start time')
175
+ }).optional().describe('Start time of the event'),
176
+ end: z.object({
177
+ dateTime: z.string().describe('End date and time in ISO format'),
178
+ timeZone: z.string().optional().describe('Time zone for the end time')
179
+ }).optional().describe('End time of the event'),
180
+ location: z.object({
181
+ displayName: z.string().optional().describe('Display name of the location'),
182
+ address: z.object({
183
+ street: z.string().optional(),
184
+ city: z.string().optional(),
185
+ state: z.string().optional(),
186
+ countryOrRegion: z.string().optional(),
187
+ postalCode: z.string().optional()
188
+ }).optional(),
189
+ coordinates: z.object({
190
+ latitude: z.number().optional(),
191
+ longitude: z.number().optional()
192
+ }).optional()
193
+ }).optional().describe('Location of the event'),
194
+ attendees: z.array(z.object({
195
+ type: z.enum([
196
+ 'required',
197
+ 'optional',
198
+ 'resource'
199
+ ]).optional().describe('Type of attendee'),
200
+ status: z.object({
201
+ response: z.enum([
202
+ 'none',
203
+ 'organizer',
204
+ 'tentativelyAccepted',
205
+ 'accepted',
206
+ 'declined',
207
+ 'notResponded'
208
+ ]).optional(),
209
+ time: z.string().optional().describe('Time when response was given')
210
+ }).optional(),
211
+ emailAddress: EmailAddressSchema.optional()
212
+ })).optional().describe('Attendees of the event'),
213
+ organizer: z.object({
214
+ emailAddress: EmailAddressSchema.optional()
215
+ }).optional().describe('Organizer of the event'),
216
+ recurrence: z.object({
217
+ pattern: z.object({
218
+ type: z.enum([
219
+ 'daily',
220
+ 'weekly',
221
+ 'absoluteMonthly',
222
+ 'relativeMonthly',
223
+ 'absoluteYearly',
224
+ 'relativeYearly'
225
+ ]).describe('Recurrence pattern type'),
226
+ interval: z.number().describe('Interval between occurrences'),
227
+ month: z.number().optional().describe('Month for yearly recurrence'),
228
+ dayOfMonth: z.number().optional().describe('Day of month for monthly recurrence'),
229
+ daysOfWeek: z.array(z.enum([
230
+ 'sunday',
231
+ 'monday',
232
+ 'tuesday',
233
+ 'wednesday',
234
+ 'thursday',
235
+ 'friday',
236
+ 'saturday'
237
+ ])).optional(),
238
+ firstDayOfWeek: z.enum([
239
+ 'sunday',
240
+ 'monday',
241
+ 'tuesday',
242
+ 'wednesday',
243
+ 'thursday',
244
+ 'friday',
245
+ 'saturday'
246
+ ]).optional(),
247
+ index: z.enum([
248
+ 'first',
249
+ 'second',
250
+ 'third',
251
+ 'fourth',
252
+ 'last'
253
+ ]).optional()
254
+ }).describe('Recurrence pattern'),
255
+ range: z.object({
256
+ type: z.enum([
257
+ 'endDate',
258
+ 'noEnd',
259
+ 'numbered'
260
+ ]).describe('Type of recurrence range'),
261
+ startDate: z.string().describe('Start date for recurrence'),
262
+ endDate: z.string().optional().describe('End date for recurrence'),
263
+ numberOfOccurrences: z.number().optional().describe('Number of occurrences')
264
+ }).describe('Recurrence range')
265
+ }).optional().describe('Recurrence pattern for the event'),
266
+ isAllDay: z.boolean().optional().describe('Whether the event is an all-day event'),
267
+ showAs: z.enum([
268
+ 'free',
269
+ 'tentative',
270
+ 'busy',
271
+ 'oof',
272
+ 'workingElsewhere',
273
+ 'unknown'
274
+ ]).optional().describe('Show as status'),
275
+ sensitivity: z.enum([
276
+ 'normal',
277
+ 'personal',
278
+ 'private',
279
+ 'confidential'
280
+ ]).optional().describe('Sensitivity level'),
281
+ importance: z.enum([
282
+ 'low',
283
+ 'normal',
284
+ 'high'
285
+ ]).optional().describe('Importance level'),
286
+ reminderMinutesBeforeStart: z.number().optional().describe('Minutes before start to show reminder'),
287
+ isReminderOn: z.boolean().optional().describe('Whether reminder is enabled'),
288
+ hasAttachments: z.boolean().optional().describe('Whether the event has attachments'),
289
+ webLink: z.string().optional().describe('URL to open the event in Outlook on the web'),
290
+ onlineMeetingUrl: z.string().optional().describe('URL for online meeting'),
291
+ isOnlineMeeting: z.boolean().optional().describe('Whether the event is an online meeting'),
292
+ onlineMeetingProvider: z.enum([
293
+ 'unknown',
294
+ 'skypeForBusiness',
295
+ 'skypeForConsumer',
296
+ 'teamsForBusiness'
297
+ ]).optional(),
298
+ allowNewTimeProposals: z.boolean().optional().describe('Whether attendees can propose new times'),
299
+ hideAttendees: z.boolean().optional().describe('Whether to hide attendee list'),
300
+ responseRequested: z.boolean().optional().describe('Whether response is requested'),
301
+ seriesMasterId: z.string().optional().describe('ID of recurring series master'),
302
+ isCancelled: z.boolean().optional().describe('Whether the event is cancelled'),
303
+ isDraft: z.boolean().optional().describe('Whether the event is a draft'),
304
+ isOrganizer: z.boolean().optional().describe('Whether current user is the organizer'),
305
+ createdDateTime: z.string().optional().describe('ISO datetime when event was created'),
306
+ lastModifiedDateTime: z.string().optional().describe('ISO datetime when event was last modified')
307
+ });
308
+ // Outlook Category schema based on Microsoft Graph API
309
+ export const OutlookCategorySchema = z.object({
310
+ id: z.string().describe('Unique identifier for the category'),
311
+ displayName: z.string().describe('Display name of the category'),
312
+ color: z.enum([
313
+ 'preset0',
314
+ 'preset1',
315
+ 'preset2',
316
+ 'preset3',
317
+ 'preset4',
318
+ 'preset5',
319
+ 'preset6',
320
+ 'preset7',
321
+ 'preset8',
322
+ 'preset9',
323
+ 'preset10',
324
+ 'preset11',
325
+ 'preset12',
326
+ 'preset13',
327
+ 'preset14',
328
+ 'preset15',
329
+ 'preset16',
330
+ 'preset17',
331
+ 'preset18',
332
+ 'preset19',
333
+ 'preset20',
334
+ 'preset21',
335
+ 'preset22',
336
+ 'preset23',
337
+ 'preset24'
338
+ ]).describe('Color preset for the category')
339
+ });
340
+ // Microsoft Contact schema
341
+ export const OutlookContactSchema = z.object({
342
+ id: z.string().optional().describe('Unique identifier for the contact'),
343
+ displayName: z.string().optional().describe('Display name of the contact'),
344
+ givenName: z.string().optional().describe('First name'),
345
+ surname: z.string().optional().describe('Last name'),
346
+ middleName: z.string().optional().describe('Middle name'),
347
+ nickName: z.string().optional().describe('Nickname'),
348
+ title: z.string().optional().describe('Job title'),
349
+ companyName: z.string().optional().describe('Company name'),
350
+ department: z.string().optional().describe('Department'),
351
+ officeLocation: z.string().optional().describe('Office location'),
352
+ profession: z.string().optional().describe('Profession'),
353
+ businessPhones: z.array(z.string()).optional().describe('Business phone numbers'),
354
+ homePhones: z.array(z.string()).optional().describe('Home phone numbers'),
355
+ mobilePhone: z.string().optional().describe('Mobile phone number'),
356
+ emailAddresses: z.array(z.object({
357
+ name: z.string().optional().describe('Name for the email address'),
358
+ address: z.string().email().describe('Email address')
359
+ })).optional().describe('Email addresses'),
360
+ homeAddress: z.object({
361
+ street: z.string().optional(),
362
+ city: z.string().optional(),
363
+ state: z.string().optional(),
364
+ countryOrRegion: z.string().optional(),
365
+ postalCode: z.string().optional()
366
+ }).optional().describe('Home address'),
367
+ businessAddress: z.object({
368
+ street: z.string().optional(),
369
+ city: z.string().optional(),
370
+ state: z.string().optional(),
371
+ countryOrRegion: z.string().optional(),
372
+ postalCode: z.string().optional()
373
+ }).optional().describe('Business address'),
374
+ otherAddress: z.object({
375
+ street: z.string().optional(),
376
+ city: z.string().optional(),
377
+ state: z.string().optional(),
378
+ countryOrRegion: z.string().optional(),
379
+ postalCode: z.string().optional()
380
+ }).optional().describe('Other address'),
381
+ birthday: z.string().optional().describe('Birthday in ISO date format'),
382
+ personalNotes: z.string().optional().describe('Personal notes about the contact'),
383
+ categories: z.array(z.string()).optional().describe('Categories assigned to the contact'),
384
+ createdDateTime: z.string().optional().describe('ISO datetime when contact was created'),
385
+ lastModifiedDateTime: z.string().optional().describe('ISO datetime when contact was last modified'),
386
+ changeKey: z.string().optional().describe('Version of the contact'),
387
+ parentFolderId: z.string().optional().describe('ID of the parent folder')
388
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/schemas/outlook-validation.ts"],"sourcesContent":["import { z } from 'zod';\n\n// Base schemas for common Microsoft types\nexport const EmailAddressSchema = z.object({\n name: z.string().optional().describe('Display name of the recipient'),\n address: z.string().email().describe('Email address'),\n});\n\nexport const RecipientSchema = z.object({\n emailAddress: EmailAddressSchema,\n});\n\n// Outlook Message schema based on Microsoft Graph API\nexport const OutlookMessageSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the message'),\n subject: z.string().optional().describe('Subject of the email message'),\n body: z\n .object({\n contentType: z.enum(['text', 'html']).optional().describe('Content type of the body'),\n content: z.string().optional().describe('Body content of the message'),\n })\n .optional(),\n bodyPreview: z.string().optional().describe('First 255 characters of the message body'),\n importance: z.enum(['low', 'normal', 'high']).optional().describe('Importance level of the message'),\n hasAttachments: z.boolean().optional().describe('Indicates whether the message has attachments'),\n parentFolderId: z.string().optional().describe('ID of the parent folder'),\n sender: RecipientSchema.optional().describe('Account used to send the message'),\n from: RecipientSchema.optional().describe('Sender of the message'),\n toRecipients: z.array(RecipientSchema).optional().describe('To recipients of the message'),\n ccRecipients: z.array(RecipientSchema).optional().describe('CC recipients of the message'),\n bccRecipients: z.array(RecipientSchema).optional().describe('BCC recipients of the message'),\n replyTo: z.array(RecipientSchema).optional().describe('Reply-to recipients'),\n conversationId: z.string().optional().describe('ID of the conversation the email belongs to'),\n conversationIndex: z.string().optional().describe('Index for conversation threading'),\n receivedDateTime: z.string().optional().describe('ISO datetime when message was received'),\n sentDateTime: z.string().optional().describe('ISO datetime when message was sent'),\n createdDateTime: z.string().optional().describe('ISO datetime when message was created'),\n lastModifiedDateTime: z.string().optional().describe('ISO datetime when message was last modified'),\n changeKey: z.string().optional().describe('Version of the message'),\n categories: z.array(z.string()).optional().describe('Categories associated with the message'),\n isDeliveryReceiptRequested: z.boolean().optional().describe('Whether delivery receipt is requested'),\n isReadReceiptRequested: z.boolean().optional().describe('Whether read receipt is requested'),\n isRead: z.boolean().optional().describe('Whether the message has been read'),\n isDraft: z.boolean().optional().describe('Whether the message is a draft'),\n webLink: z.string().optional().describe('URL to open the message in Outlook on the web'),\n inferenceClassification: z.enum(['focused', 'other']).optional().describe('Classification for focused inbox'),\n flag: z\n .object({\n flagStatus: z.enum(['notFlagged', 'complete', 'flagged']).describe('Status of the flag'),\n startDateTime: z.string().optional().describe('Start date for the flag'),\n dueDateTime: z.string().optional().describe('Due date for the flag'),\n })\n .optional()\n .describe('Flag information for the message'),\n});\n\n// Outlook Folder schema\nexport const OutlookFolderSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the folder'),\n displayName: z.string().optional().describe('Display name of the folder'),\n parentFolderId: z.string().optional().describe('ID of the parent folder'),\n childFolderCount: z.number().optional().describe('Number of immediate child folders'),\n unreadItemCount: z.number().optional().describe('Number of unread items in the folder'),\n totalItemCount: z.number().optional().describe('Total number of items in the folder'),\n sizeInBytes: z.number().optional().describe('Size of the folder in bytes'),\n isHidden: z.boolean().optional().describe('Whether the folder is hidden'),\n wellKnownName: z\n .enum(['archive', 'clutter', 'conflicts', 'conversationhistory', 'deleteditems', 'drafts', 'inbox', 'junkemail', 'localfailures', 'msgfolderroot', 'outbox', 'recoverableitemsdeletions', 'scheduled', 'searchfolders', 'sentitems', 'serverfailures', 'syncissues'])\n .optional()\n .describe('Well-known folder name if applicable'),\n});\n\n// Outlook Attachment schema\nexport const OutlookAttachmentSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the attachment'),\n name: z.string().optional().describe('Name of the attachment'),\n contentType: z.string().optional().describe('MIME type of the attachment'),\n size: z.number().optional().describe('Size of the attachment in bytes'),\n isInline: z.boolean().optional().describe('Whether the attachment is inline'),\n lastModifiedDateTime: z.string().optional().describe('ISO datetime when attachment was last modified'),\n contentId: z.string().optional().describe('Content ID for inline attachments'),\n contentLocation: z.string().optional().describe('Content location for inline attachments'),\n contentBytes: z.string().optional().describe('Base64-encoded content of the attachment'),\n});\n\n// OneDrive file schema (subset of Microsoft Graph DriveItem)\nexport const OneDriveFileSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the file'),\n name: z.string().optional().describe('Name of the file'),\n size: z.number().optional().describe('Size of the file in bytes'),\n createdDateTime: z.string().optional().describe('ISO datetime when file was created'),\n lastModifiedDateTime: z.string().optional().describe('ISO datetime when file was last modified'),\n webUrl: z.string().optional().describe('URL to view the file in OneDrive'),\n downloadUrl: z.string().optional().describe('Direct download URL for the file'),\n parentReference: z\n .object({\n driveId: z.string().optional().describe('ID of the drive containing the file'),\n driveType: z.enum(['personal', 'business', 'documentLibrary']).optional().describe('Type of drive'),\n id: z.string().optional().describe('ID of the parent folder'),\n name: z.string().optional().describe('Name of the parent folder'),\n path: z.string().optional().describe('Path to the parent folder'),\n })\n .optional()\n .describe('Reference to the parent folder'),\n file: z\n .object({\n mimeType: z.string().optional().describe('MIME type of the file'),\n hashes: z\n .object({\n quickXorHash: z.string().optional().describe('QuickXorHash of the file'),\n sha1Hash: z.string().optional().describe('SHA1 hash of the file'),\n sha256Hash: z.string().optional().describe('SHA256 hash of the file'),\n })\n .optional()\n .describe('Hash values for the file'),\n })\n .optional()\n .describe('File-specific properties'),\n folder: z\n .object({\n childCount: z.number().optional().describe('Number of children in the folder'),\n })\n .optional()\n .describe('Folder-specific properties (present if item is a folder)'),\n shared: z\n .object({\n scope: z.enum(['anonymous', 'organization', 'users']).optional().describe('Scope of sharing'),\n owner: z\n .object({\n user: z\n .object({\n displayName: z.string().optional(),\n id: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n })\n .optional()\n .describe('Sharing information'),\n createdBy: z\n .object({\n user: z\n .object({\n displayName: z.string().optional(),\n id: z.string().optional(),\n })\n .optional(),\n })\n .optional()\n .describe('User who created the file'),\n lastModifiedBy: z\n .object({\n user: z\n .object({\n displayName: z.string().optional(),\n id: z.string().optional(),\n })\n .optional(),\n })\n .optional()\n .describe('User who last modified the file'),\n});\n\n// Microsoft Calendar Event schema\nexport const OutlookCalendarEventSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the event'),\n subject: z.string().optional().describe('Subject of the event'),\n body: z\n .object({\n contentType: z.enum(['text', 'html']).optional().describe('Content type of the body'),\n content: z.string().optional().describe('Body content of the event'),\n })\n .optional(),\n start: z\n .object({\n dateTime: z.string().describe('Start date and time in ISO format'),\n timeZone: z.string().optional().describe('Time zone for the start time'),\n })\n .optional()\n .describe('Start time of the event'),\n end: z\n .object({\n dateTime: z.string().describe('End date and time in ISO format'),\n timeZone: z.string().optional().describe('Time zone for the end time'),\n })\n .optional()\n .describe('End time of the event'),\n location: z\n .object({\n displayName: z.string().optional().describe('Display name of the location'),\n address: z\n .object({\n street: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n countryOrRegion: z.string().optional(),\n postalCode: z.string().optional(),\n })\n .optional(),\n coordinates: z\n .object({\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n })\n .optional(),\n })\n .optional()\n .describe('Location of the event'),\n attendees: z\n .array(\n z.object({\n type: z.enum(['required', 'optional', 'resource']).optional().describe('Type of attendee'),\n status: z\n .object({\n response: z.enum(['none', 'organizer', 'tentativelyAccepted', 'accepted', 'declined', 'notResponded']).optional(),\n time: z.string().optional().describe('Time when response was given'),\n })\n .optional(),\n emailAddress: EmailAddressSchema.optional(),\n })\n )\n .optional()\n .describe('Attendees of the event'),\n organizer: z\n .object({\n emailAddress: EmailAddressSchema.optional(),\n })\n .optional()\n .describe('Organizer of the event'),\n recurrence: z\n .object({\n pattern: z\n .object({\n type: z.enum(['daily', 'weekly', 'absoluteMonthly', 'relativeMonthly', 'absoluteYearly', 'relativeYearly']).describe('Recurrence pattern type'),\n interval: z.number().describe('Interval between occurrences'),\n month: z.number().optional().describe('Month for yearly recurrence'),\n dayOfMonth: z.number().optional().describe('Day of month for monthly recurrence'),\n daysOfWeek: z.array(z.enum(['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'])).optional(),\n firstDayOfWeek: z.enum(['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']).optional(),\n index: z.enum(['first', 'second', 'third', 'fourth', 'last']).optional(),\n })\n .describe('Recurrence pattern'),\n range: z\n .object({\n type: z.enum(['endDate', 'noEnd', 'numbered']).describe('Type of recurrence range'),\n startDate: z.string().describe('Start date for recurrence'),\n endDate: z.string().optional().describe('End date for recurrence'),\n numberOfOccurrences: z.number().optional().describe('Number of occurrences'),\n })\n .describe('Recurrence range'),\n })\n .optional()\n .describe('Recurrence pattern for the event'),\n isAllDay: z.boolean().optional().describe('Whether the event is an all-day event'),\n showAs: z.enum(['free', 'tentative', 'busy', 'oof', 'workingElsewhere', 'unknown']).optional().describe('Show as status'),\n sensitivity: z.enum(['normal', 'personal', 'private', 'confidential']).optional().describe('Sensitivity level'),\n importance: z.enum(['low', 'normal', 'high']).optional().describe('Importance level'),\n reminderMinutesBeforeStart: z.number().optional().describe('Minutes before start to show reminder'),\n isReminderOn: z.boolean().optional().describe('Whether reminder is enabled'),\n hasAttachments: z.boolean().optional().describe('Whether the event has attachments'),\n webLink: z.string().optional().describe('URL to open the event in Outlook on the web'),\n onlineMeetingUrl: z.string().optional().describe('URL for online meeting'),\n isOnlineMeeting: z.boolean().optional().describe('Whether the event is an online meeting'),\n onlineMeetingProvider: z.enum(['unknown', 'skypeForBusiness', 'skypeForConsumer', 'teamsForBusiness']).optional(),\n allowNewTimeProposals: z.boolean().optional().describe('Whether attendees can propose new times'),\n hideAttendees: z.boolean().optional().describe('Whether to hide attendee list'),\n responseRequested: z.boolean().optional().describe('Whether response is requested'),\n seriesMasterId: z.string().optional().describe('ID of recurring series master'),\n isCancelled: z.boolean().optional().describe('Whether the event is cancelled'),\n isDraft: z.boolean().optional().describe('Whether the event is a draft'),\n isOrganizer: z.boolean().optional().describe('Whether current user is the organizer'),\n createdDateTime: z.string().optional().describe('ISO datetime when event was created'),\n lastModifiedDateTime: z.string().optional().describe('ISO datetime when event was last modified'),\n});\n\n// Outlook Category schema based on Microsoft Graph API\nexport const OutlookCategorySchema = z.object({\n id: z.string().describe('Unique identifier for the category'),\n displayName: z.string().describe('Display name of the category'),\n color: z\n .enum(['preset0', 'preset1', 'preset2', 'preset3', 'preset4', 'preset5', 'preset6', 'preset7', 'preset8', 'preset9', 'preset10', 'preset11', 'preset12', 'preset13', 'preset14', 'preset15', 'preset16', 'preset17', 'preset18', 'preset19', 'preset20', 'preset21', 'preset22', 'preset23', 'preset24'])\n .describe('Color preset for the category'),\n});\n\n// Microsoft Contact schema\nexport const OutlookContactSchema = z.object({\n id: z.string().optional().describe('Unique identifier for the contact'),\n displayName: z.string().optional().describe('Display name of the contact'),\n givenName: z.string().optional().describe('First name'),\n surname: z.string().optional().describe('Last name'),\n middleName: z.string().optional().describe('Middle name'),\n nickName: z.string().optional().describe('Nickname'),\n title: z.string().optional().describe('Job title'),\n companyName: z.string().optional().describe('Company name'),\n department: z.string().optional().describe('Department'),\n officeLocation: z.string().optional().describe('Office location'),\n profession: z.string().optional().describe('Profession'),\n businessPhones: z.array(z.string()).optional().describe('Business phone numbers'),\n homePhones: z.array(z.string()).optional().describe('Home phone numbers'),\n mobilePhone: z.string().optional().describe('Mobile phone number'),\n emailAddresses: z\n .array(\n z.object({\n name: z.string().optional().describe('Name for the email address'),\n address: z.string().email().describe('Email address'),\n })\n )\n .optional()\n .describe('Email addresses'),\n homeAddress: z\n .object({\n street: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n countryOrRegion: z.string().optional(),\n postalCode: z.string().optional(),\n })\n .optional()\n .describe('Home address'),\n businessAddress: z\n .object({\n street: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n countryOrRegion: z.string().optional(),\n postalCode: z.string().optional(),\n })\n .optional()\n .describe('Business address'),\n otherAddress: z\n .object({\n street: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n countryOrRegion: z.string().optional(),\n postalCode: z.string().optional(),\n })\n .optional()\n .describe('Other address'),\n birthday: z.string().optional().describe('Birthday in ISO date format'),\n personalNotes: z.string().optional().describe('Personal notes about the contact'),\n categories: z.array(z.string()).optional().describe('Categories assigned to the contact'),\n createdDateTime: z.string().optional().describe('ISO datetime when contact was created'),\n lastModifiedDateTime: z.string().optional().describe('ISO datetime when contact was last modified'),\n changeKey: z.string().optional().describe('Version of the contact'),\n parentFolderId: z.string().optional().describe('ID of the parent folder'),\n});\n\n// Export TypeScript types inferred from schemas\nexport type EmailAddress = z.infer<typeof EmailAddressSchema>;\nexport type Recipient = z.infer<typeof RecipientSchema>;\nexport type OutlookMessage = z.infer<typeof OutlookMessageSchema>;\nexport type OutlookFolder = z.infer<typeof OutlookFolderSchema>;\nexport type OutlookAttachment = z.infer<typeof OutlookAttachmentSchema>;\nexport type OneDriveFile = z.infer<typeof OneDriveFileSchema>;\nexport type OutlookCalendarEvent = z.infer<typeof OutlookCalendarEventSchema>;\nexport type OutlookContact = z.infer<typeof OutlookContactSchema>;\nexport type OutlookCategory = z.infer<typeof OutlookCategorySchema>;\n"],"names":["z","EmailAddressSchema","object","name","string","optional","describe","address","email","RecipientSchema","emailAddress","OutlookMessageSchema","id","subject","body","contentType","enum","content","bodyPreview","importance","hasAttachments","boolean","parentFolderId","sender","from","toRecipients","array","ccRecipients","bccRecipients","replyTo","conversationId","conversationIndex","receivedDateTime","sentDateTime","createdDateTime","lastModifiedDateTime","changeKey","categories","isDeliveryReceiptRequested","isReadReceiptRequested","isRead","isDraft","webLink","inferenceClassification","flag","flagStatus","startDateTime","dueDateTime","OutlookFolderSchema","displayName","childFolderCount","number","unreadItemCount","totalItemCount","sizeInBytes","isHidden","wellKnownName","OutlookAttachmentSchema","size","isInline","contentId","contentLocation","contentBytes","OneDriveFileSchema","webUrl","downloadUrl","parentReference","driveId","driveType","path","file","mimeType","hashes","quickXorHash","sha1Hash","sha256Hash","folder","childCount","shared","scope","owner","user","createdBy","lastModifiedBy","OutlookCalendarEventSchema","start","dateTime","timeZone","end","location","street","city","state","countryOrRegion","postalCode","coordinates","latitude","longitude","attendees","type","status","response","time","organizer","recurrence","pattern","interval","month","dayOfMonth","daysOfWeek","firstDayOfWeek","index","range","startDate","endDate","numberOfOccurrences","isAllDay","showAs","sensitivity","reminderMinutesBeforeStart","isReminderOn","onlineMeetingUrl","isOnlineMeeting","onlineMeetingProvider","allowNewTimeProposals","hideAttendees","responseRequested","seriesMasterId","isCancelled","isOrganizer","OutlookCategorySchema","color","OutlookContactSchema","givenName","surname","middleName","nickName","title","companyName","department","officeLocation","profession","businessPhones","homePhones","mobilePhone","emailAddresses","homeAddress","businessAddress","otherAddress","birthday","personalNotes"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ServerConfig } from '../types.js';
2
+ /**
3
+ * Handle --version and --help flags before config parsing.
4
+ * These should work without requiring any configuration.
5
+ */
6
+ export declare function handleVersionHelp(args: string[]): {
7
+ handled: boolean;
8
+ output?: string;
9
+ };
10
+ /**
11
+ * Parse Outlook server configuration from CLI arguments and environment.
12
+ *
13
+ * CLI Arguments (all optional):
14
+ * - --auth=<mode> Authentication mode (default: loopback-oauth)
15
+ * Modes: loopback-oauth, device-code, dcr
16
+ * - --headless Disable browser auto-open, return auth URL instead
17
+ * - --redirect-uri=<uri> OAuth redirect URI (default: ephemeral loopback)
18
+ * - --tenant-id=<id> Microsoft tenant ID (overrides MS_TENANT_ID env var)
19
+ * - --dcr-mode=<mode> DCR mode (self-hosted or external, default: self-hosted)
20
+ * - --dcr-verify-url=<url> External verification endpoint (required for external mode)
21
+ * - --dcr-store-uri=<uri> DCR client storage URI (required for self-hosted mode)
22
+ * - --port=<port> Enable HTTP transport on specified port
23
+ * - --stdio Enable stdio transport (default if no port)
24
+ * - --log-level=<level> Logging level (default: info)
25
+ * - --storage-dir=<path> Directory for CSV file storage (default: .mcp-z/files)
26
+ * - --base-url=<url> Base URL for HTTP file serving (default: http://localhost for HTTP transports)
27
+ *
28
+ * Environment Variables:
29
+ * - MS_CLIENT_ID OAuth client ID (REQUIRED)
30
+ * - MS_TENANT_ID Microsoft tenant ID (REQUIRED)
31
+ * - MS_CLIENT_SECRET OAuth client secret (optional)
32
+ * - AUTH_MODE Default authentication mode (optional)
33
+ * - HEADLESS Disable browser auto-open (optional)
34
+ * - DCR_MODE DCR mode (optional, same format as --dcr-mode)
35
+ * - DCR_VERIFY_URL External verification URL (optional, same as --dcr-verify-url)
36
+ * - DCR_STORE_URI DCR storage URI (optional, same as --dcr-store-uri)
37
+ * - PORT Default HTTP port (optional)
38
+ * - LOG_LEVEL Default logging level (optional)
39
+ * - STORAGE_DIR Directory for CSV file storage (optional)
40
+ * - BASE_URL Base URL for HTTP file serving (optional)
41
+ *
42
+ * OAuth Scopes (from constants.ts):
43
+ * openid profile offline_access https://graph.microsoft.com/User.Read https://graph.microsoft.com/Mail.ReadWrite https://graph.microsoft.com/Mail.Send https://graph.microsoft.com/MailboxSettings.ReadWrite
44
+ */
45
+ export declare function parseConfig(args: string[], env: Record<string, string | undefined>): ServerConfig;
46
+ /**
47
+ * Build production configuration from process globals.
48
+ * Entry point for production server.
49
+ */
50
+ export declare function createConfig(): ServerConfig;