@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Kevin Malakoff
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,165 @@
1
+ # @mcp-z/mcp-outlook
2
+
3
+ Docs: https://mcp-z.github.io/mcp-outlook
4
+ Outlook MCP server for searching, reading, and sending Microsoft 365 mail.
5
+
6
+ ## Common uses
7
+
8
+ - Search and read messages
9
+ - Send and reply to emails
10
+ - Manage categories and export messages to CSV
11
+
12
+ ## Transports
13
+
14
+ MCP supports stdio and HTTP.
15
+
16
+ **Stdio**
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "outlook": {
21
+ "command": "npx",
22
+ "args": ["-y", "@mcp-z/mcp-outlook"]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ **HTTP**
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "outlook": {
33
+ "type": "http",
34
+ "url": "http://localhost:9003/mcp",
35
+ "start": {
36
+ "command": "npx",
37
+ "args": ["-y", "@mcp-z/mcp-outlook", "--port=9003"]
38
+ }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ `start` is an extension used by `npx @mcp-z/cli up` to launch HTTP servers for you.
45
+
46
+ ## Create a Microsoft app
47
+
48
+ 1. Go to [Azure Portal](https://portal.azure.com/).
49
+ 2. Navigate to Azure Active Directory > App registrations.
50
+ 3. Click New registration.
51
+ 4. Choose a name and select a supported account type.
52
+ 5. Copy the Application (client) ID and Directory (tenant) ID.
53
+
54
+ ## OAuth configuration
55
+
56
+ Configure via environment variables or the `env` block in `.mcp.json`. Use `server.json` for the full list of options.
57
+
58
+ ### Loopback OAuth (default)
59
+
60
+ Environment variables:
61
+
62
+ ```bash
63
+ MS_CLIENT_ID=your-client-id
64
+ MS_TENANT_ID=common
65
+ MS_CLIENT_SECRET=your-client-secret
66
+ ```
67
+
68
+ Example:
69
+ ```json
70
+ {
71
+ "mcpServers": {
72
+ "outlook": {
73
+ "command": "npx",
74
+ "args": ["-y", "@mcp-z/mcp-outlook"],
75
+ "env": {
76
+ "MS_CLIENT_ID": "your-client-id",
77
+ "MS_TENANT_ID": "common",
78
+ "MS_CLIENT_SECRET": "your-client-secret"
79
+ }
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ ### Device code
86
+
87
+ Useful for headless or remote environments.
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "outlook": {
93
+ "command": "npx",
94
+ "args": ["-y", "@mcp-z/mcp-outlook", "--auth=device-code"],
95
+ "env": {
96
+ "MS_CLIENT_ID": "your-client-id",
97
+ "MS_TENANT_ID": "common"
98
+ }
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ ### DCR (Dynamic Client Registration)
105
+
106
+ HTTP only. Requires a public base URL.
107
+
108
+ ```json
109
+ {
110
+ "mcpServers": {
111
+ "outlook-dcr": {
112
+ "command": "npx",
113
+ "args": [
114
+ "-y",
115
+ "@mcp-z/mcp-outlook",
116
+ "--auth=dcr",
117
+ "--port=3456",
118
+ "--base-url=https://oauth.example.com"
119
+ ],
120
+ "env": {
121
+ "MS_CLIENT_ID": "your-client-id",
122
+ "MS_TENANT_ID": "common",
123
+ "MS_CLIENT_SECRET": "your-client-secret"
124
+ }
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ ## How to use
131
+
132
+ ```bash
133
+ # List tools
134
+ mcp-z inspect --servers outlook --tools
135
+
136
+ # Call a tool
137
+ mcp-z call outlook message-search '{"query":"from:alice@example.com"}'
138
+ ```
139
+
140
+ ## Tools
141
+
142
+ 1. categories-list
143
+ 2. label-add
144
+ 3. label-delete
145
+ 4. labels-list
146
+ 5. message-get
147
+ 6. message-mark-read
148
+ 7. message-move-to-trash
149
+ 8. message-respond
150
+ 9. message-search
151
+ 10. message-send
152
+ 11. messages-export-csv
153
+
154
+ ## Resources
155
+
156
+ 1. email
157
+
158
+ ## Prompts
159
+
160
+ 1. draft-email
161
+ 2. query-syntax
162
+
163
+ ## Configuration reference
164
+
165
+ See `server.json` for all supported environment variables, CLI arguments, and defaults.
package/bin/server.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ // biome-ignore lint/security/noGlobalEval: dual esm and cjs
4
+ if (typeof require === 'undefined') eval("import('../dist/esm/index.js').then((cli) => cli.default(process.argv.slice(2), 'mcp-outlook')).catch((err) => { console.log(err); process.exit(-1); });");
5
+ else require('../dist/cjs/index.js')(process.argv.slice(2), 'mcp-outlook');
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Outlook MCP Server Constants
3
+ *
4
+ * These scopes are required for Microsoft Outlook functionality and are hardcoded
5
+ * rather than externally configured since this server knows its own requirements.
6
+ */
7
+ export declare const MS_SCOPE = "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";
8
+ export declare const CHUNK_SIZE = 10;
9
+ export declare const MAX_BATCH_SIZE = 500;
10
+ export declare const MAX_PAGE_SIZE = 1000;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Outlook MCP Server Constants
3
+ *
4
+ * These scopes are required for Microsoft Outlook functionality and are hardcoded
5
+ * rather than externally configured since this server knows its own requirements.
6
+ */
7
+ export declare const MS_SCOPE = "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";
8
+ export declare const CHUNK_SIZE = 10;
9
+ export declare const MAX_BATCH_SIZE = 500;
10
+ export declare const MAX_PAGE_SIZE = 1000;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Outlook MCP Server Constants
3
+ *
4
+ * These scopes are required for Microsoft Outlook functionality and are hardcoded
5
+ * rather than externally configured since this server knows its own requirements.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ function _export(target, all) {
11
+ for(var name in all)Object.defineProperty(target, name, {
12
+ enumerable: true,
13
+ get: Object.getOwnPropertyDescriptor(all, name).get
14
+ });
15
+ }
16
+ _export(exports, {
17
+ get CHUNK_SIZE () {
18
+ return CHUNK_SIZE;
19
+ },
20
+ get MAX_BATCH_SIZE () {
21
+ return MAX_BATCH_SIZE;
22
+ },
23
+ get MAX_PAGE_SIZE () {
24
+ return MAX_PAGE_SIZE;
25
+ },
26
+ get MS_SCOPE () {
27
+ return MS_SCOPE;
28
+ }
29
+ });
30
+ var _email = require("@mcp-z/email");
31
+ var MS_SCOPE = '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';
32
+ var CHUNK_SIZE = _email.EMAIL_CHUNK_SIZE;
33
+ var MAX_BATCH_SIZE = _email.EMAIL_MAX_BATCH_SIZE;
34
+ var MAX_PAGE_SIZE = 1000; // Maximum number of items per page
35
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/constants.ts"],"sourcesContent":["/**\n * Outlook MCP Server Constants\n *\n * These scopes are required for Microsoft Outlook functionality and are hardcoded\n * rather than externally configured since this server knows its own requirements.\n */\n\nimport { EMAIL_CHUNK_SIZE, EMAIL_MAX_BATCH_SIZE } from '@mcp-z/email';\n\n// Microsoft OAuth scopes required for Outlook operations\nexport const MS_SCOPE = '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';\n\n// Batch processing configuration (from shared email constants)\nexport const CHUNK_SIZE = EMAIL_CHUNK_SIZE;\nexport const MAX_BATCH_SIZE = EMAIL_MAX_BATCH_SIZE;\n\n// Pagination configuration\nexport const MAX_PAGE_SIZE = 1000; // Maximum number of items per page\n"],"names":["CHUNK_SIZE","MAX_BATCH_SIZE","MAX_PAGE_SIZE","MS_SCOPE","EMAIL_CHUNK_SIZE","EMAIL_MAX_BATCH_SIZE"],"mappings":"AAAA;;;;;CAKC;;;;;;;;;;;QAQYA;eAAAA;;QACAC;eAAAA;;QAGAC;eAAAA;;QAPAC;eAAAA;;;qBAH0C;AAGhD,IAAMA,WAAW;AAGjB,IAAMH,aAAaI,uBAAgB;AACnC,IAAMH,iBAAiBI,2BAAoB;AAG3C,IAAMH,gBAAgB,MAAM,mCAAmC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Outlook-specific message builder for composing emails using Microsoft Graph API format
3
+ * This is the Outlook equivalent of Gmail's RFC822 builder
4
+ */
5
+ export interface OutlookRecipient {
6
+ emailAddress: {
7
+ address: string;
8
+ name?: string;
9
+ };
10
+ }
11
+ export interface OutlookMessageArgs {
12
+ to?: string | string[] | undefined;
13
+ cc?: string | string[] | undefined;
14
+ bcc?: string | string[] | undefined;
15
+ subject?: string;
16
+ body?: string;
17
+ from?: string;
18
+ importance?: 'Low' | 'Normal' | 'High';
19
+ contentType?: 'Text' | 'HTML';
20
+ }
21
+ export interface OutlookMessage {
22
+ subject?: string;
23
+ body?: {
24
+ contentType: string;
25
+ content: string;
26
+ };
27
+ toRecipients?: OutlookRecipient[];
28
+ ccRecipients?: OutlookRecipient[];
29
+ bccRecipients?: OutlookRecipient[];
30
+ importance?: string;
31
+ }
32
+ /**
33
+ * Build an Outlook message object from email arguments for Microsoft Graph API
34
+ * This is the Outlook equivalent of buildRfc822FromArgs for Gmail
35
+ */
36
+ export declare function buildOutlookMessage(args: OutlookMessageArgs): OutlookMessage;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Outlook-specific message builder for composing emails using Microsoft Graph API format
3
+ * This is the Outlook equivalent of Gmail's RFC822 builder
4
+ */
5
+ export interface OutlookRecipient {
6
+ emailAddress: {
7
+ address: string;
8
+ name?: string;
9
+ };
10
+ }
11
+ export interface OutlookMessageArgs {
12
+ to?: string | string[] | undefined;
13
+ cc?: string | string[] | undefined;
14
+ bcc?: string | string[] | undefined;
15
+ subject?: string;
16
+ body?: string;
17
+ from?: string;
18
+ importance?: 'Low' | 'Normal' | 'High';
19
+ contentType?: 'Text' | 'HTML';
20
+ }
21
+ export interface OutlookMessage {
22
+ subject?: string;
23
+ body?: {
24
+ contentType: string;
25
+ content: string;
26
+ };
27
+ toRecipients?: OutlookRecipient[];
28
+ ccRecipients?: OutlookRecipient[];
29
+ bccRecipients?: OutlookRecipient[];
30
+ importance?: string;
31
+ }
32
+ /**
33
+ * Build an Outlook message object from email arguments for Microsoft Graph API
34
+ * This is the Outlook equivalent of buildRfc822FromArgs for Gmail
35
+ */
36
+ export declare function buildOutlookMessage(args: OutlookMessageArgs): OutlookMessage;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Outlook-specific message builder for composing emails using Microsoft Graph API format
3
+ * This is the Outlook equivalent of Gmail's RFC822 builder
4
+ */ "use strict";
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "buildOutlookMessage", {
9
+ enumerable: true,
10
+ get: function() {
11
+ return buildOutlookMessage;
12
+ }
13
+ });
14
+ function buildOutlookMessage(args) {
15
+ var _args_to = args.to, to = _args_to === void 0 ? [] : _args_to, _args_cc = args.cc, cc = _args_cc === void 0 ? [] : _args_cc, _args_bcc = args.bcc, bcc = _args_bcc === void 0 ? [] : _args_bcc, _args_subject = args.subject, subject = _args_subject === void 0 ? '' : _args_subject, _args_body = args.body, body = _args_body === void 0 ? '' : _args_body, _args_importance = args.importance, importance = _args_importance === void 0 ? 'Normal' : _args_importance, _args_contentType = args.contentType, contentType = _args_contentType === void 0 ? 'Text' : _args_contentType;
16
+ var message = {};
17
+ if (subject) {
18
+ message.subject = subject;
19
+ }
20
+ if (body) {
21
+ message.body = {
22
+ contentType: contentType,
23
+ content: body
24
+ };
25
+ }
26
+ function parseEmailAddresses(emails) {
27
+ var emailArray = Array.isArray(emails) ? emails : [
28
+ emails
29
+ ];
30
+ return emailArray.filter(function(email) {
31
+ return email && email.trim();
32
+ }).map(function(email) {
33
+ var trimmed = email.trim();
34
+ // Simple email parsing - could be enhanced for name parsing
35
+ return {
36
+ emailAddress: {
37
+ address: trimmed
38
+ }
39
+ };
40
+ });
41
+ }
42
+ if (to && (Array.isArray(to) ? to.length > 0 : to.trim())) {
43
+ message.toRecipients = parseEmailAddresses(to);
44
+ }
45
+ if (cc && (Array.isArray(cc) ? cc.length > 0 : cc.trim())) {
46
+ message.ccRecipients = parseEmailAddresses(cc);
47
+ }
48
+ if (bcc && (Array.isArray(bcc) ? bcc.length > 0 : bcc.trim())) {
49
+ message.bccRecipients = parseEmailAddresses(bcc);
50
+ }
51
+ if (importance && importance !== 'Normal') {
52
+ message.importance = importance;
53
+ }
54
+ return message;
55
+ }
56
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/email/composition/outlook-message-builder.ts"],"sourcesContent":["/**\n * Outlook-specific message builder for composing emails using Microsoft Graph API format\n * This is the Outlook equivalent of Gmail's RFC822 builder\n */\n\nexport interface OutlookRecipient {\n emailAddress: {\n address: string;\n name?: string;\n };\n}\n\nexport interface OutlookMessageArgs {\n to?: string | string[] | undefined;\n cc?: string | string[] | undefined;\n bcc?: string | string[] | undefined;\n subject?: string;\n body?: string;\n from?: string;\n importance?: 'Low' | 'Normal' | 'High';\n contentType?: 'Text' | 'HTML';\n}\n\nexport interface OutlookMessage {\n subject?: string;\n body?: {\n contentType: string;\n content: string;\n };\n toRecipients?: OutlookRecipient[];\n ccRecipients?: OutlookRecipient[];\n bccRecipients?: OutlookRecipient[];\n importance?: string;\n}\n\n/**\n * Build an Outlook message object from email arguments for Microsoft Graph API\n * This is the Outlook equivalent of buildRfc822FromArgs for Gmail\n */\nexport function buildOutlookMessage(args: OutlookMessageArgs): OutlookMessage {\n const { to = [], cc = [], bcc = [], subject = '', body = '', importance = 'Normal', contentType = 'Text' } = args;\n\n const message: OutlookMessage = {};\n\n if (subject) {\n message.subject = subject;\n }\n\n if (body) {\n message.body = {\n contentType: contentType,\n content: body,\n };\n }\n\n function parseEmailAddresses(emails: string | string[]): OutlookRecipient[] {\n const emailArray = Array.isArray(emails) ? emails : [emails];\n return emailArray\n .filter((email) => email && email.trim())\n .map((email) => {\n const trimmed = email.trim();\n // Simple email parsing - could be enhanced for name parsing\n return {\n emailAddress: {\n address: trimmed,\n },\n };\n });\n }\n\n if (to && (Array.isArray(to) ? to.length > 0 : to.trim())) {\n message.toRecipients = parseEmailAddresses(to);\n }\n\n if (cc && (Array.isArray(cc) ? cc.length > 0 : cc.trim())) {\n message.ccRecipients = parseEmailAddresses(cc);\n }\n\n if (bcc && (Array.isArray(bcc) ? bcc.length > 0 : bcc.trim())) {\n message.bccRecipients = parseEmailAddresses(bcc);\n }\n\n if (importance && importance !== 'Normal') {\n message.importance = importance;\n }\n\n return message;\n}\n"],"names":["buildOutlookMessage","args","to","cc","bcc","subject","body","importance","contentType","message","content","parseEmailAddresses","emails","emailArray","Array","isArray","filter","email","trim","map","trimmed","emailAddress","address","length","toRecipients","ccRecipients","bccRecipients"],"mappings":"AAAA;;;CAGC;;;;+BAoCeA;;;eAAAA;;;AAAT,SAASA,oBAAoBC,IAAwB;IAC1D,eAA6GA,KAArGC,IAAAA,2BAAK,EAAE,wBAA8FD,KAA5FE,IAAAA,2BAAK,EAAE,yBAAqFF,KAAnFG,KAAAA,6BAAM,EAAE,8BAA2EH,KAAzEI,SAAAA,qCAAU,iCAA+DJ,KAA3DK,MAAAA,+BAAO,oCAAoDL,KAAhDM,YAAAA,2CAAa,iDAAmCN,KAAzBO,aAAAA,6CAAc;IAElG,IAAMC,UAA0B,CAAC;IAEjC,IAAIJ,SAAS;QACXI,QAAQJ,OAAO,GAAGA;IACpB;IAEA,IAAIC,MAAM;QACRG,QAAQH,IAAI,GAAG;YACbE,aAAaA;YACbE,SAASJ;QACX;IACF;IAEA,SAASK,oBAAoBC,MAAyB;QACpD,IAAMC,aAAaC,MAAMC,OAAO,CAACH,UAAUA,SAAS;YAACA;SAAO;QAC5D,OAAOC,WACJG,MAAM,CAAC,SAACC;mBAAUA,SAASA,MAAMC,IAAI;WACrCC,GAAG,CAAC,SAACF;YACJ,IAAMG,UAAUH,MAAMC,IAAI;YAC1B,4DAA4D;YAC5D,OAAO;gBACLG,cAAc;oBACZC,SAASF;gBACX;YACF;QACF;IACJ;IAEA,IAAIlB,MAAOY,CAAAA,MAAMC,OAAO,CAACb,MAAMA,GAAGqB,MAAM,GAAG,IAAIrB,GAAGgB,IAAI,EAAC,GAAI;QACzDT,QAAQe,YAAY,GAAGb,oBAAoBT;IAC7C;IAEA,IAAIC,MAAOW,CAAAA,MAAMC,OAAO,CAACZ,MAAMA,GAAGoB,MAAM,GAAG,IAAIpB,GAAGe,IAAI,EAAC,GAAI;QACzDT,QAAQgB,YAAY,GAAGd,oBAAoBR;IAC7C;IAEA,IAAIC,OAAQU,CAAAA,MAAMC,OAAO,CAACX,OAAOA,IAAImB,MAAM,GAAG,IAAInB,IAAIc,IAAI,EAAC,GAAI;QAC7DT,QAAQiB,aAAa,GAAGf,oBAAoBP;IAC9C;IAEA,IAAIG,cAAcA,eAAe,UAAU;QACzCE,QAAQF,UAAU,GAAGA;IACvB;IAEA,OAAOE;AACT"}
@@ -0,0 +1,7 @@
1
+ import { buildContentForItems } from '@mcp-z/email';
2
+ import type { OutlookMessage } from '../../lib/outlook/types.js';
3
+ export { buildContentForItems };
4
+ export declare function toRowFromOutlook(msg: OutlookMessage, opts?: {
5
+ body?: boolean;
6
+ addressFormat?: 'email' | 'name' | 'raw';
7
+ }): string[];
@@ -0,0 +1,7 @@
1
+ import { buildContentForItems } from '@mcp-z/email';
2
+ import type { OutlookMessage } from '../../lib/outlook/types.js';
3
+ export { buildContentForItems };
4
+ export declare function toRowFromOutlook(msg: OutlookMessage, opts?: {
5
+ body?: boolean;
6
+ addressFormat?: 'email' | 'name' | 'raw';
7
+ }): string[];
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get buildContentForItems () {
13
+ return _email.buildContentForItems;
14
+ },
15
+ get toRowFromOutlook () {
16
+ return toRowFromOutlook;
17
+ }
18
+ });
19
+ var _email = require("@mcp-z/email");
20
+ var _headerparsing = require("../parsing/header-parsing.js");
21
+ function toRowFromOutlook(msg) {
22
+ var opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
23
+ body: false,
24
+ addressFormat: 'email'
25
+ };
26
+ var _msg_id, _msg_conversationId, _extractFrom, _msg_subject, _msg_bodyPreview;
27
+ var id = (_msg_id = msg.id) !== null && _msg_id !== void 0 ? _msg_id : '';
28
+ var provider = 'outlook';
29
+ var threadId = (_msg_conversationId = msg.conversationId) !== null && _msg_conversationId !== void 0 ? _msg_conversationId : '';
30
+ var to = msg.toRecipients ? (0, _headerparsing.formatAddressList)(msg.toRecipients, opts.addressFormat) : '';
31
+ var from = msg.from ? (_extractFrom = (0, _headerparsing.extractFrom)(msg.from)) !== null && _extractFrom !== void 0 ? _extractFrom : '' : '';
32
+ var cc = msg.ccRecipients ? (0, _headerparsing.formatAddressList)(msg.ccRecipients, opts.addressFormat) : '';
33
+ var bcc = msg.bccRecipients ? (0, _headerparsing.formatAddressList)(msg.bccRecipients, opts.addressFormat) : '';
34
+ var date = msg.receivedDateTime ? (0, _email.normalizeDateToISO)(msg.receivedDateTime) || msg.receivedDateTime : '';
35
+ var subject = (_msg_subject = msg.subject) !== null && _msg_subject !== void 0 ? _msg_subject : '';
36
+ var labels = msg.categories ? msg.categories.join(';') : '';
37
+ var snippet = (_msg_bodyPreview = msg.bodyPreview) !== null && _msg_bodyPreview !== void 0 ? _msg_bodyPreview : '';
38
+ var bodyFull = '';
39
+ if (opts.body && msg.body) {
40
+ var _msg_body_content;
41
+ var raw = (_msg_body_content = msg.body.content) !== null && _msg_body_content !== void 0 ? _msg_body_content : '';
42
+ if (raw) {
43
+ bodyFull = msg.body.contentType && msg.body.contentType.toLowerCase() === 'html' ? (0, _email.stripHtml)(raw) : String(raw);
44
+ }
45
+ }
46
+ return [
47
+ id,
48
+ provider,
49
+ threadId,
50
+ to,
51
+ from,
52
+ cc,
53
+ bcc,
54
+ date,
55
+ subject,
56
+ labels,
57
+ snippet,
58
+ bodyFull
59
+ ];
60
+ }
61
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/email/messages/messages.ts"],"sourcesContent":["import { buildContentForItems, stripHtml, normalizeDateToISO as toIsoUtc } from '@mcp-z/email';\nimport type { OutlookMessage } from '../../lib/outlook/types.js';\nimport { extractFrom, formatAddressList } from '../parsing/header-parsing.js';\n\nexport { buildContentForItems };\n\nexport function toRowFromOutlook(msg: OutlookMessage, opts: { body?: boolean; addressFormat?: 'email' | 'name' | 'raw' } = { body: false, addressFormat: 'email' }) {\n const id = msg.id ?? '';\n const provider = 'outlook';\n const threadId = msg.conversationId ?? '';\n const to = msg.toRecipients ? formatAddressList(msg.toRecipients, opts.addressFormat) : '';\n const from = msg.from ? (extractFrom(msg.from) ?? '') : '';\n const cc = msg.ccRecipients ? formatAddressList(msg.ccRecipients, opts.addressFormat) : '';\n const bcc = msg.bccRecipients ? formatAddressList(msg.bccRecipients, opts.addressFormat) : '';\n const date = msg.receivedDateTime ? toIsoUtc(msg.receivedDateTime) || msg.receivedDateTime : '';\n const subject = msg.subject ?? '';\n const labels = msg.categories ? msg.categories.join(';') : '';\n const snippet = msg.bodyPreview ?? '';\n let bodyFull = '';\n if (opts.body && msg.body) {\n const raw = msg.body.content ?? '';\n if (raw) {\n bodyFull = msg.body.contentType && msg.body.contentType.toLowerCase() === 'html' ? stripHtml(raw) : String(raw);\n }\n }\n return [id, provider, threadId, to, from, cc, bcc, date, subject, labels, snippet, bodyFull];\n}\n"],"names":["buildContentForItems","toRowFromOutlook","msg","opts","body","addressFormat","extractFrom","id","provider","threadId","conversationId","to","toRecipients","formatAddressList","from","cc","ccRecipients","bcc","bccRecipients","date","receivedDateTime","toIsoUtc","subject","labels","categories","join","snippet","bodyPreview","bodyFull","raw","content","contentType","toLowerCase","stripHtml","String"],"mappings":";;;;;;;;;;;QAISA;eAAAA,2BAAoB;;QAEbC;eAAAA;;;qBANgE;6BAEjC;AAIxC,SAASA,iBAAiBC,GAAmB;QAAEC,OAAAA,iEAAqE;QAAEC,MAAM;QAAOC,eAAe;IAAQ;QACpJH,SAEMA,qBAEQI,cAITJ,cAEAA;IAVhB,IAAMK,MAAKL,UAAAA,IAAIK,EAAE,cAANL,qBAAAA,UAAU;IACrB,IAAMM,WAAW;IACjB,IAAMC,YAAWP,sBAAAA,IAAIQ,cAAc,cAAlBR,iCAAAA,sBAAsB;IACvC,IAAMS,KAAKT,IAAIU,YAAY,GAAGC,IAAAA,gCAAiB,EAACX,IAAIU,YAAY,EAAET,KAAKE,aAAa,IAAI;IACxF,IAAMS,OAAOZ,IAAIY,IAAI,IAAIR,eAAAA,IAAAA,0BAAW,EAACJ,IAAIY,IAAI,eAApBR,0BAAAA,eAAyB,KAAM;IACxD,IAAMS,KAAKb,IAAIc,YAAY,GAAGH,IAAAA,gCAAiB,EAACX,IAAIc,YAAY,EAAEb,KAAKE,aAAa,IAAI;IACxF,IAAMY,MAAMf,IAAIgB,aAAa,GAAGL,IAAAA,gCAAiB,EAACX,IAAIgB,aAAa,EAAEf,KAAKE,aAAa,IAAI;IAC3F,IAAMc,OAAOjB,IAAIkB,gBAAgB,GAAGC,IAAAA,yBAAQ,EAACnB,IAAIkB,gBAAgB,KAAKlB,IAAIkB,gBAAgB,GAAG;IAC7F,IAAME,WAAUpB,eAAAA,IAAIoB,OAAO,cAAXpB,0BAAAA,eAAe;IAC/B,IAAMqB,SAASrB,IAAIsB,UAAU,GAAGtB,IAAIsB,UAAU,CAACC,IAAI,CAAC,OAAO;IAC3D,IAAMC,WAAUxB,mBAAAA,IAAIyB,WAAW,cAAfzB,8BAAAA,mBAAmB;IACnC,IAAI0B,WAAW;IACf,IAAIzB,KAAKC,IAAI,IAAIF,IAAIE,IAAI,EAAE;YACbF;QAAZ,IAAM2B,OAAM3B,oBAAAA,IAAIE,IAAI,CAAC0B,OAAO,cAAhB5B,+BAAAA,oBAAoB;QAChC,IAAI2B,KAAK;YACPD,WAAW1B,IAAIE,IAAI,CAAC2B,WAAW,IAAI7B,IAAIE,IAAI,CAAC2B,WAAW,CAACC,WAAW,OAAO,SAASC,IAAAA,gBAAS,EAACJ,OAAOK,OAAOL;QAC7G;IACF;IACA,OAAO;QAACtB;QAAIC;QAAUC;QAAUE;QAAIG;QAAMC;QAAIE;QAAKE;QAAMG;QAASC;QAAQG;QAASE;KAAS;AAC9F"}
@@ -0,0 +1,18 @@
1
+ export declare function extractEmailsFromRecipients(recipients: Array<{
2
+ emailAddress?: {
3
+ address?: string;
4
+ name?: string;
5
+ };
6
+ }>, mode?: 'email' | 'name' | 'raw'): string[];
7
+ export declare function formatAddressList(recipients: Array<{
8
+ emailAddress?: {
9
+ address?: string;
10
+ name?: string;
11
+ };
12
+ }>, mode?: 'email' | 'name' | 'raw'): string;
13
+ export declare function extractFrom(from: {
14
+ emailAddress?: {
15
+ address?: string;
16
+ name?: string;
17
+ };
18
+ } | undefined): string | undefined;
@@ -0,0 +1,18 @@
1
+ export declare function extractEmailsFromRecipients(recipients: Array<{
2
+ emailAddress?: {
3
+ address?: string;
4
+ name?: string;
5
+ };
6
+ }>, mode?: 'email' | 'name' | 'raw'): string[];
7
+ export declare function formatAddressList(recipients: Array<{
8
+ emailAddress?: {
9
+ address?: string;
10
+ name?: string;
11
+ };
12
+ }>, mode?: 'email' | 'name' | 'raw'): string;
13
+ export declare function extractFrom(from: {
14
+ emailAddress?: {
15
+ address?: string;
16
+ name?: string;
17
+ };
18
+ } | undefined): string | undefined;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get extractEmailsFromRecipients () {
13
+ return extractEmailsFromRecipients;
14
+ },
15
+ get extractFrom () {
16
+ return extractFrom;
17
+ },
18
+ get formatAddressList () {
19
+ return formatAddressList;
20
+ }
21
+ });
22
+ function extractEmailsFromRecipients(recipients) {
23
+ var mode = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'email';
24
+ if (!Array.isArray(recipients)) return [];
25
+ return recipients.map(function(r) {
26
+ var _ref, _ref1;
27
+ var _r_emailAddress, _r_emailAddress1;
28
+ var name = (_ref = r === null || r === void 0 ? void 0 : (_r_emailAddress = r.emailAddress) === null || _r_emailAddress === void 0 ? void 0 : _r_emailAddress.name) !== null && _ref !== void 0 ? _ref : '';
29
+ var email = (_ref1 = r === null || r === void 0 ? void 0 : (_r_emailAddress1 = r.emailAddress) === null || _r_emailAddress1 === void 0 ? void 0 : _r_emailAddress1.address) !== null && _ref1 !== void 0 ? _ref1 : '';
30
+ return mode === 'email' ? email : mode === 'name' ? name || email : "".concat(name, " <").concat(email, ">");
31
+ }).filter(Boolean);
32
+ }
33
+ function formatAddressList(recipients) {
34
+ var mode = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'email';
35
+ return extractEmailsFromRecipients(recipients, mode).join(', ');
36
+ }
37
+ function extractFrom(from) {
38
+ var _from_emailAddress, _from_emailAddress1;
39
+ if (!from) return undefined;
40
+ return ((_from_emailAddress = from.emailAddress) === null || _from_emailAddress === void 0 ? void 0 : _from_emailAddress.address) || ((_from_emailAddress1 = from.emailAddress) === null || _from_emailAddress1 === void 0 ? void 0 : _from_emailAddress1.name) || undefined;
41
+ }
42
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/email/parsing/header-parsing.ts"],"sourcesContent":["export function extractEmailsFromRecipients(recipients: Array<{ emailAddress?: { address?: string; name?: string } }>, mode: 'email' | 'name' | 'raw' = 'email'): string[] {\n if (!Array.isArray(recipients)) return [];\n return recipients\n .map((r) => {\n const name = r?.emailAddress?.name ?? '';\n const email = r?.emailAddress?.address ?? '';\n return mode === 'email' ? email : mode === 'name' ? name || email : `${name} <${email}>`;\n })\n .filter(Boolean);\n}\n\nexport function formatAddressList(recipients: Array<{ emailAddress?: { address?: string; name?: string } }>, mode: 'email' | 'name' | 'raw' = 'email'): string {\n return extractEmailsFromRecipients(recipients, mode).join(', ');\n}\n\nexport function extractFrom(from: { emailAddress?: { address?: string; name?: string } } | undefined): string | undefined {\n if (!from) return undefined;\n return from.emailAddress?.address || from.emailAddress?.name || undefined;\n}\n"],"names":["extractEmailsFromRecipients","extractFrom","formatAddressList","recipients","mode","Array","isArray","map","r","name","emailAddress","email","address","filter","Boolean","join","from","undefined"],"mappings":";;;;;;;;;;;QAAgBA;eAAAA;;QAeAC;eAAAA;;QAJAC;eAAAA;;;AAXT,SAASF,4BAA4BG,UAAyE;QAAEC,OAAAA,iEAAiC;IACtJ,IAAI,CAACC,MAAMC,OAAO,CAACH,aAAa,OAAO,EAAE;IACzC,OAAOA,WACJI,GAAG,CAAC,SAACC;;YACSA,iBACCA;QADd,IAAMC,eAAOD,cAAAA,yBAAAA,kBAAAA,EAAGE,YAAY,cAAfF,sCAAAA,gBAAiBC,IAAI,uCAAI;QACtC,IAAME,iBAAQH,cAAAA,yBAAAA,mBAAAA,EAAGE,YAAY,cAAfF,uCAAAA,iBAAiBI,OAAO,yCAAI;QAC1C,OAAOR,SAAS,UAAUO,QAAQP,SAAS,SAASK,QAAQE,QAAQ,AAAC,GAAWA,OAATF,MAAK,MAAU,OAANE,OAAM;IACxF,GACCE,MAAM,CAACC;AACZ;AAEO,SAASZ,kBAAkBC,UAAyE;QAAEC,OAAAA,iEAAiC;IAC5I,OAAOJ,4BAA4BG,YAAYC,MAAMW,IAAI,CAAC;AAC5D;AAEO,SAASd,YAAYe,IAAwE;QAE3FA,oBAA8BA;IADrC,IAAI,CAACA,MAAM,OAAOC;IAClB,OAAOD,EAAAA,qBAAAA,KAAKN,YAAY,cAAjBM,yCAAAA,mBAAmBJ,OAAO,OAAII,sBAAAA,KAAKN,YAAY,cAAjBM,0CAAAA,oBAAmBP,IAAI,KAAIQ;AAClE"}
@@ -0,0 +1,4 @@
1
+ import type { Client } from '@microsoft/microsoft-graph-client';
2
+ import { type NormalizedMessage } from './message-mapping.js';
3
+ /** Fetch a single Outlook message. Throws on non-OK Graph responses. */
4
+ export declare function fetchOutlookMessage(graph: Client, id: string): Promise<NormalizedMessage>;
@@ -0,0 +1,4 @@
1
+ import type { Client } from '@microsoft/microsoft-graph-client';
2
+ import { type NormalizedMessage } from './message-mapping.js';
3
+ /** Fetch a single Outlook message. Throws on non-OK Graph responses. */
4
+ export declare function fetchOutlookMessage(graph: Client, id: string): Promise<NormalizedMessage>;