mcp-twake-mail 0.1.0 → 2.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 (86) hide show
  1. package/README.md +168 -74
  2. package/build/cli/commands/setup.js +54 -12
  3. package/build/cli/commands/setup.js.map +1 -1
  4. package/build/cli/prompts/setup-wizard.d.ts +33 -1
  5. package/build/cli/prompts/setup-wizard.js +134 -2
  6. package/build/cli/prompts/setup-wizard.js.map +1 -1
  7. package/build/cli/prompts/setup-wizard.test.d.ts +1 -0
  8. package/build/cli/prompts/setup-wizard.test.js +161 -0
  9. package/build/cli/prompts/setup-wizard.test.js.map +1 -0
  10. package/build/config/schema.d.ts +2 -0
  11. package/build/config/schema.js +3 -0
  12. package/build/config/schema.js.map +1 -1
  13. package/build/discovery/dns-srv.d.ts +18 -0
  14. package/build/discovery/dns-srv.js +60 -0
  15. package/build/discovery/dns-srv.js.map +1 -0
  16. package/build/discovery/dns-srv.test.d.ts +4 -0
  17. package/build/discovery/dns-srv.test.js +79 -0
  18. package/build/discovery/dns-srv.test.js.map +1 -0
  19. package/build/discovery/index.d.ts +9 -0
  20. package/build/discovery/index.js +13 -0
  21. package/build/discovery/index.js.map +1 -0
  22. package/build/discovery/oauth-discovery.d.ts +34 -0
  23. package/build/discovery/oauth-discovery.js +160 -0
  24. package/build/discovery/oauth-discovery.js.map +1 -0
  25. package/build/discovery/oauth-discovery.test.d.ts +1 -0
  26. package/build/discovery/oauth-discovery.test.js +198 -0
  27. package/build/discovery/oauth-discovery.test.js.map +1 -0
  28. package/build/discovery/orchestrator.d.ts +31 -0
  29. package/build/discovery/orchestrator.js +87 -0
  30. package/build/discovery/orchestrator.js.map +1 -0
  31. package/build/discovery/orchestrator.test.d.ts +4 -0
  32. package/build/discovery/orchestrator.test.js +242 -0
  33. package/build/discovery/orchestrator.test.js.map +1 -0
  34. package/build/discovery/types.d.ts +18 -0
  35. package/build/discovery/types.js +15 -0
  36. package/build/discovery/types.js.map +1 -0
  37. package/build/discovery/well-known.d.ts +21 -0
  38. package/build/discovery/well-known.js +52 -0
  39. package/build/discovery/well-known.js.map +1 -0
  40. package/build/discovery/well-known.test.d.ts +4 -0
  41. package/build/discovery/well-known.test.js +120 -0
  42. package/build/discovery/well-known.test.js.map +1 -0
  43. package/build/jmap/client.js +1 -1
  44. package/build/jmap/client.js.map +1 -1
  45. package/build/mcp/server.d.ts +5 -3
  46. package/build/mcp/server.js +11 -5
  47. package/build/mcp/server.js.map +1 -1
  48. package/build/mcp/tools/batch-operations.d.ts +10 -0
  49. package/build/mcp/tools/batch-operations.js +609 -0
  50. package/build/mcp/tools/batch-operations.js.map +1 -0
  51. package/build/mcp/tools/batch-operations.test.d.ts +1 -0
  52. package/build/mcp/tools/batch-operations.test.js +875 -0
  53. package/build/mcp/tools/batch-operations.test.js.map +1 -0
  54. package/build/mcp/tools/email-operations.js +355 -1
  55. package/build/mcp/tools/email-operations.js.map +1 -1
  56. package/build/mcp/tools/email-operations.test.js +5 -3
  57. package/build/mcp/tools/email-operations.test.js.map +1 -1
  58. package/build/mcp/tools/email-sending.d.ts +10 -1
  59. package/build/mcp/tools/email-sending.js +481 -14
  60. package/build/mcp/tools/email-sending.js.map +1 -1
  61. package/build/mcp/tools/index.d.ts +10 -1
  62. package/build/mcp/tools/index.js +7 -3
  63. package/build/mcp/tools/index.js.map +1 -1
  64. package/build/mcp/tools/mailbox.js +433 -1
  65. package/build/mcp/tools/mailbox.js.map +1 -1
  66. package/build/mcp/tools/mailbox.test.js +5 -2
  67. package/build/mcp/tools/mailbox.test.js.map +1 -1
  68. package/build/signature/converter.d.ts +2 -0
  69. package/build/signature/converter.js +23 -0
  70. package/build/signature/converter.js.map +1 -0
  71. package/build/signature/converter.test.d.ts +1 -0
  72. package/build/signature/converter.test.js +84 -0
  73. package/build/signature/converter.test.js.map +1 -0
  74. package/build/signature/index.d.ts +2 -0
  75. package/build/signature/index.js +3 -0
  76. package/build/signature/index.js.map +1 -0
  77. package/build/signature/loader.d.ts +6 -0
  78. package/build/signature/loader.js +31 -0
  79. package/build/signature/loader.js.map +1 -0
  80. package/build/signature/loader.test.d.ts +1 -0
  81. package/build/signature/loader.test.js +85 -0
  82. package/build/signature/loader.test.js.map +1 -0
  83. package/build/types/jmap.d.ts +23 -0
  84. package/docs/auto-discovery.md +210 -0
  85. package/docs/oidc-configuration.md +261 -0
  86. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"email-operations.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/email-operations.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-operations.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/email-operations.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAWpE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,UAAqB,CAAC;IAC1B,IAAI,cAA0B,CAAC;IAC/B,IAAI,UAAkB,CAAC;IACvB,IAAI,eAAyC,CAAC;IAE9C,UAAU,CAAC,GAAG,EAAE;QACd,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAE5B,kBAAkB;QAClB,UAAU,GAAG;YACX,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,QAAiB,EAAE,OAAoB,EAAE,EAAE;gBAC5E,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC,CAAC;SACqB,CAAC;QAE1B,mBAAmB;QACnB,cAAc,GAAG;YACf,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAC7F,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAChB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;SACJ,CAAC;QAE3B,uBAAuB;QACvB,UAAU,GAAG;YACX,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACM,CAAC;QAEvB,qBAAqB;QACrB,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC;iBACpF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC;iBACvG;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;aAClF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,CAAC;iBACtF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC;iBACzG;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;aAClF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,iCAAiC;YACjC,6BAA6B;YAC7B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC9B,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;aACjF,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC;iBACvF;aACF,CAAC,CAAC;YACL,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;iBAC1C,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;iBAC3E,mBAAmB,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEL,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,CAAC;iBAClF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE;aACzD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,qBAAqB;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,8CAA8C;YAC9C,6BAA6B;YAC7B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC9B,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;aAC/D,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,CAAC;iBAC1F;aACF,CAAC,CAAC;YACL,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;iBAC1C,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;iBACzD,mBAAmB,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE;aACzD,CAAC,CAAC;YAEL,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,qBAAqB;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC;iBACrF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAEzF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,eAAe,EAAE,iBAAiB;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf;wBACE,WAAW;wBACX;4BACE,SAAS,EAAE,WAAW;4BACtB,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE;yBAChF;wBACD,WAAW;qBACZ;iBACF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,SAAS,EAAE,WAAW;oBACtB,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE;iBAChF;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAEzF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC;iBACpF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAErF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,cAAc,EAAE,mBAAmB;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf;wBACE,WAAW;wBACX;4BACE,SAAS,EAAE,WAAW;4BACtB,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;yBACzD;wBACD,UAAU;qBACX;iBACF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,SAAS,EAAE,WAAW;oBACtB,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE;iBACzD;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAEnF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC;iBACvF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;aAC/D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;YAEjF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS;gBAClB,gBAAgB,EAAE,eAAe;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;gBAClD,eAAe,EAAE;oBACf;wBACE,WAAW;wBACX;4BACE,SAAS,EAAE,WAAW;4BACtB,UAAU,EAAE;gCACV,SAAS,EAAE;oCACT,IAAI,EAAE,mBAAmB;oCACzB,WAAW,EAAE,4CAA4C;iCAC1D;6BACF;yBACF;wBACD,aAAa;qBACd;iBACF;aACF,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC;gBAC5D,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,SAAS,EAAE,WAAW;oBACtB,UAAU,EAAE;wBACV,SAAS,EAAE;4BACT,IAAI,EAAE,mBAAmB;4BACzB,WAAW,EAAE,4CAA4C;yBAC1D;qBACF;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;YAEhF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,gEAAgE,CACjE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,4BAA4B;YAC5B,mEAAmE;YACnE,2BAA2B;YAC3B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC9B,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;aAC5G,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;aACnI,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE;oBACf;wBACE,WAAW;wBACX;4BACE,SAAS,EAAE,WAAW;4BACtB,OAAO,EAAE;gCACP,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;6BACzE;yBACF;wBACD,aAAa;qBACd;iBACF;aACF,CAAC,CAAC;YACL,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;iBAC1C,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;iBACrG,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;iBAC5H,mBAAmB,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE;wBACP,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;qBACzE;iBACF;aACF,CAAC,CAAC;YAEL,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,EAAE,EAAE,CAAC,uBAAuB,CAAC;gBAC7B,OAAO,EAAE,cAAc;gBACvB,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACjD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC;gBACtD,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;aAClG,CAAC,CAAC;YACH,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;iBAC1C,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAE/F,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,EAAE,EAAE,CAAC,uBAAuB,CAAC;gBAC7B,OAAO,EAAE,cAAc;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC9B,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;aAC5G,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;aAChH,CAAC;iBACD,qBAAqB,CAAC;gBACrB,eAAe,EAAE;oBACf;wBACE,WAAW;wBACX;4BACE,SAAS,EAAE,WAAW;4BACtB,UAAU,EAAE;gCACV,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE;6BAC1E;yBACF;wBACD,aAAa;qBACd;iBACF;aACF,CAAC,CAAC;YACL,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC;iBAC1C,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;iBACrG,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC;iBACzG,mBAAmB,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,SAAS,EAAE,WAAW;oBACtB,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE;qBAC1E;iBACF;aACF,CAAC,CAAC;YAEL,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,EAAE,EAAE,CAAC,eAAe,CAAC;gBACrB,OAAO,EAAE,cAAc;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,10 +1,19 @@
1
1
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { JMAPClient } from '../../jmap/client.js';
3
3
  import type { Logger } from '../../config/logger.js';
4
+ import type { SignatureContent } from '../../signature/index.js';
5
+ /**
6
+ * Options for email sending tools.
7
+ */
8
+ export interface EmailSendingOptions {
9
+ signatureContent?: SignatureContent;
10
+ defaultFrom?: string;
11
+ }
4
12
  /**
5
13
  * Register email sending MCP tools with the server.
6
14
  * @param server MCP server instance
7
15
  * @param jmapClient JMAP client for API calls
8
16
  * @param logger Pino logger
17
+ * @param options Optional signature and defaultFrom configuration
9
18
  */
10
- export declare function registerEmailSendingTools(server: McpServer, jmapClient: JMAPClient, logger: Logger): void;
19
+ export declare function registerEmailSendingTools(server: McpServer, jmapClient: JMAPClient, logger: Logger, options?: EmailSendingOptions): void;
@@ -21,13 +21,34 @@ const SUBMISSION_USING = [
21
21
  'urn:ietf:params:jmap:mail',
22
22
  'urn:ietf:params:jmap:submission',
23
23
  ];
24
+ /**
25
+ * Append signature to email body.
26
+ * @param body Email body content
27
+ * @param signature Signature content to append
28
+ * @param isHtml Whether this is HTML content
29
+ * @returns Body with signature appended
30
+ */
31
+ function appendSignature(body, signature, isHtml) {
32
+ if (!signature)
33
+ return body;
34
+ if (isHtml) {
35
+ // HTML: use <br> tags and -- separator
36
+ return `${body}<br/><br/>-- <br/>${signature}`;
37
+ }
38
+ else {
39
+ // Plain text: RFC-compliant "-- \n" delimiter
40
+ return `${body}\n\n-- \n${signature}`;
41
+ }
42
+ }
24
43
  /**
25
44
  * Register email sending MCP tools with the server.
26
45
  * @param server MCP server instance
27
46
  * @param jmapClient JMAP client for API calls
28
47
  * @param logger Pino logger
48
+ * @param options Optional signature and defaultFrom configuration
29
49
  */
30
- export function registerEmailSendingTools(server, jmapClient, logger) {
50
+ export function registerEmailSendingTools(server, jmapClient, logger, options = {}) {
51
+ const { signatureContent, defaultFrom } = options;
31
52
  // send_email - compose and send a new email (EMAIL-01)
32
53
  server.registerTool('send_email', {
33
54
  title: 'Send Email',
@@ -42,10 +63,11 @@ export function registerEmailSendingTools(server, jmapClient, logger) {
42
63
  subject: z.string().describe('Email subject line'),
43
64
  body: z.string().optional().describe('Plain text email body'),
44
65
  htmlBody: z.string().optional().describe('HTML email body'),
66
+ from: z.string().email().optional().describe('Sender email address (uses default if not specified)'),
45
67
  },
46
68
  annotations: EMAIL_SEND_ANNOTATIONS,
47
- }, async ({ to, cc, bcc, subject, body, htmlBody }) => {
48
- logger.debug({ to, cc, bcc, subject, hasBody: !!body, hasHtmlBody: !!htmlBody }, 'send_email called');
69
+ }, async ({ to, cc, bcc, subject, body, htmlBody, from }) => {
70
+ logger.debug({ to, cc, bcc, subject, hasBody: !!body, hasHtmlBody: !!htmlBody, from }, 'send_email called');
49
71
  try {
50
72
  const session = jmapClient.getSession();
51
73
  // Step 1: Get identity and mailboxes in a single batch
@@ -124,16 +146,27 @@ export function registerEmailSendingTools(server, jmapClient, logger) {
124
146
  const bodyValues = {};
125
147
  if (body) {
126
148
  textBody = [{ partId: 'text', type: 'text/plain' }];
127
- bodyValues.text = { value: body };
149
+ // Inject signature into plain text body
150
+ const finalBody = signatureContent
151
+ ? appendSignature(body, signatureContent.text, false)
152
+ : body;
153
+ bodyValues.text = { value: finalBody };
128
154
  }
129
155
  if (htmlBody) {
130
156
  htmlBodyParts = [{ partId: 'html', type: 'text/html' }];
131
- bodyValues.html = { value: htmlBody };
157
+ // Inject signature into HTML body
158
+ const finalHtml = signatureContent
159
+ ? appendSignature(htmlBody, signatureContent.html, true)
160
+ : htmlBody;
161
+ bodyValues.html = { value: finalHtml };
132
162
  }
133
- // Step 3: Build email object
163
+ // Step 3: Build email object with sender address priority chain
164
+ // Priority: explicit from parameter > defaultFrom config > identity.email
165
+ const senderEmail = from || defaultFrom || identity.email;
166
+ const senderName = identity.name; // Always use identity name
134
167
  const emailCreate = {
135
168
  mailboxIds: { [draftsMailboxId]: true },
136
- from: [{ name: identity.name, email: identity.email }],
169
+ from: [{ name: senderName, email: senderEmail }],
137
170
  to: to.map((email) => ({ email })),
138
171
  subject,
139
172
  bodyValues,
@@ -320,10 +353,11 @@ export function registerEmailSendingTools(server, jmapClient, logger) {
320
353
  .boolean()
321
354
  .default(false)
322
355
  .describe('If true, reply to all original recipients'),
356
+ from: z.string().email().optional().describe('Sender email address (uses default if not specified)'),
323
357
  },
324
358
  annotations: EMAIL_SEND_ANNOTATIONS,
325
- }, async ({ originalEmailId, body, htmlBody, replyAll }) => {
326
- logger.debug({ originalEmailId, hasBody: !!body, hasHtmlBody: !!htmlBody, replyAll }, 'reply_email called');
359
+ }, async ({ originalEmailId, body, htmlBody, replyAll, from }) => {
360
+ logger.debug({ originalEmailId, hasBody: !!body, hasHtmlBody: !!htmlBody, replyAll, from }, 'reply_email called');
327
361
  try {
328
362
  const session = jmapClient.getSession();
329
363
  // Step 1: Get identity, mailboxes, and original email in a single batch
@@ -488,16 +522,27 @@ export function registerEmailSendingTools(server, jmapClient, logger) {
488
522
  const bodyValues = {};
489
523
  if (body) {
490
524
  textBody = [{ partId: 'text', type: 'text/plain' }];
491
- bodyValues.text = { value: body };
525
+ // Inject signature into plain text body
526
+ const finalBody = signatureContent
527
+ ? appendSignature(body, signatureContent.text, false)
528
+ : body;
529
+ bodyValues.text = { value: finalBody };
492
530
  }
493
531
  if (htmlBody) {
494
532
  htmlBodyParts = [{ partId: 'html', type: 'text/html' }];
495
- bodyValues.html = { value: htmlBody };
533
+ // Inject signature into HTML body
534
+ const finalHtml = signatureContent
535
+ ? appendSignature(htmlBody, signatureContent.html, true)
536
+ : htmlBody;
537
+ bodyValues.html = { value: finalHtml };
496
538
  }
497
- // Step 6: Build email object
539
+ // Step 6: Build email object with sender address priority chain
540
+ // Priority: explicit from parameter > defaultFrom config > identity.email
541
+ const senderEmail = from || defaultFrom || identity.email;
542
+ const senderName = identity.name; // Always use identity name
498
543
  const emailCreate = {
499
544
  mailboxIds: { [draftsMailboxId]: true },
500
- from: [{ name: identity.name, email: identity.email }],
545
+ from: [{ name: senderName, email: senderEmail }],
501
546
  to: toAddresses,
502
547
  subject: replySubject,
503
548
  inReplyTo,
@@ -677,6 +722,428 @@ export function registerEmailSendingTools(server, jmapClient, logger) {
677
722
  };
678
723
  }
679
724
  });
680
- logger.debug('Email sending tools registered: send_email, reply_email');
725
+ // forward_email - forward an email to new recipients (FWD-01, FWD-02, FWD-03, FWD-04)
726
+ server.registerTool('forward_email', {
727
+ title: 'Forward Email',
728
+ description: 'Forward an existing email to new recipients. Includes original content as quoted text and preserves all attachments.',
729
+ inputSchema: {
730
+ originalEmailId: z.string().describe('ID of the email to forward'),
731
+ to: z
732
+ .array(z.string().email())
733
+ .min(1)
734
+ .describe('Recipient email addresses (at least one required)'),
735
+ cc: z.array(z.string().email()).optional().describe('CC email addresses'),
736
+ bcc: z.array(z.string().email()).optional().describe('BCC email addresses'),
737
+ note: z.string().optional().describe('Personal note to include above the forwarded content'),
738
+ htmlNote: z.string().optional().describe('HTML version of the personal note'),
739
+ from: z.string().email().optional().describe('Sender email address (uses default if not specified)'),
740
+ },
741
+ annotations: EMAIL_SEND_ANNOTATIONS,
742
+ }, async ({ originalEmailId, to, cc, bcc, note, htmlNote, from }) => {
743
+ logger.debug({ originalEmailId, to, cc, bcc, hasNote: !!note, hasHtmlNote: !!htmlNote, from }, 'forward_email called');
744
+ try {
745
+ const session = jmapClient.getSession();
746
+ // Step 1: Get identity, mailboxes, and original email in a single batch
747
+ const setupResponse = await jmapClient.request([
748
+ ['Identity/get', { accountId: session.accountId }, 'getIdentity'],
749
+ [
750
+ 'Mailbox/get',
751
+ { accountId: session.accountId, properties: ['id', 'role'] },
752
+ 'getMailboxes',
753
+ ],
754
+ [
755
+ 'Email/get',
756
+ {
757
+ accountId: session.accountId,
758
+ ids: [originalEmailId],
759
+ properties: ['subject', 'from', 'to', 'cc', 'sentAt', 'textBody', 'htmlBody', 'bodyValues', 'attachments'],
760
+ fetchTextBodyValues: true,
761
+ fetchHTMLBodyValues: true,
762
+ bodyProperties: ['partId', 'blobId', 'type', 'name', 'size', 'disposition', 'cid'],
763
+ },
764
+ 'getOriginal',
765
+ ],
766
+ ], SUBMISSION_USING);
767
+ // Parse Identity response
768
+ const identityResult = jmapClient.parseMethodResponse(setupResponse.methodResponses[0]);
769
+ if (!identityResult.success) {
770
+ logger.error({ error: identityResult.error }, 'Failed to get identity');
771
+ return {
772
+ isError: true,
773
+ content: [
774
+ {
775
+ type: 'text',
776
+ text: 'Failed to get sending identity. Contact your administrator.',
777
+ },
778
+ ],
779
+ };
780
+ }
781
+ const identities = identityResult.data.list;
782
+ if (!identities || identities.length === 0) {
783
+ logger.error({}, 'No sending identity available');
784
+ return {
785
+ isError: true,
786
+ content: [
787
+ {
788
+ type: 'text',
789
+ text: 'No sending identity available. Contact your administrator.',
790
+ },
791
+ ],
792
+ };
793
+ }
794
+ const identity = identities[0];
795
+ // Parse Mailbox response and find Sent/Drafts by role
796
+ const mailboxResult = jmapClient.parseMethodResponse(setupResponse.methodResponses[1]);
797
+ if (!mailboxResult.success) {
798
+ logger.error({ error: mailboxResult.error }, 'Failed to get mailboxes');
799
+ return {
800
+ isError: true,
801
+ content: [
802
+ {
803
+ type: 'text',
804
+ text: 'Failed to get mailboxes. Cannot forward email.',
805
+ },
806
+ ],
807
+ };
808
+ }
809
+ const mailboxes = mailboxResult.data.list;
810
+ const sentMailbox = mailboxes.find((mb) => mb.role === 'sent');
811
+ const draftsMailbox = mailboxes.find((mb) => mb.role === 'drafts');
812
+ const sentMailboxId = sentMailbox?.id;
813
+ if (!draftsMailbox) {
814
+ logger.error({}, 'No Drafts mailbox found');
815
+ return {
816
+ isError: true,
817
+ content: [
818
+ {
819
+ type: 'text',
820
+ text: 'No Drafts mailbox found. Cannot forward email.',
821
+ },
822
+ ],
823
+ };
824
+ }
825
+ const draftsMailboxId = draftsMailbox.id;
826
+ // Parse original email response
827
+ const originalResult = jmapClient.parseMethodResponse(setupResponse.methodResponses[2]);
828
+ if (!originalResult.success) {
829
+ logger.error({ error: originalResult.error }, 'Failed to get original email');
830
+ return {
831
+ isError: true,
832
+ content: [
833
+ {
834
+ type: 'text',
835
+ text: `Failed to fetch original email: ${originalResult.error?.description || originalResult.error?.type || 'Unknown error'}`,
836
+ },
837
+ ],
838
+ };
839
+ }
840
+ const originalList = originalResult.data.list;
841
+ if (!originalList || originalList.length === 0) {
842
+ logger.error({ originalEmailId }, 'Original email not found');
843
+ return {
844
+ isError: true,
845
+ content: [
846
+ {
847
+ type: 'text',
848
+ text: `Original email not found: ${originalEmailId}`,
849
+ },
850
+ ],
851
+ };
852
+ }
853
+ const original = originalList[0];
854
+ // Step 2: Build subject with Fwd: prefix (case-insensitive check)
855
+ let forwardSubject;
856
+ const originalSubject = original.subject || '';
857
+ if (originalSubject.toLowerCase().startsWith('fwd:')) {
858
+ forwardSubject = originalSubject;
859
+ }
860
+ else {
861
+ forwardSubject = `Fwd: ${originalSubject}`;
862
+ }
863
+ // Step 3: Extract original email body content
864
+ const originalTextPartId = original.textBody?.[0]?.partId;
865
+ const originalHtmlPartId = original.htmlBody?.[0]?.partId;
866
+ const originalTextBody = originalTextPartId ? original.bodyValues?.[originalTextPartId]?.value || '' : '';
867
+ const originalHtmlBody = originalHtmlPartId ? original.bodyValues?.[originalHtmlPartId]?.value || '' : '';
868
+ // Format original sender info for quoted header
869
+ const originalFrom = original.from?.[0];
870
+ const originalFromStr = originalFrom
871
+ ? originalFrom.name
872
+ ? `${originalFrom.name} <${originalFrom.email}>`
873
+ : originalFrom.email
874
+ : 'Unknown';
875
+ const originalToStr = (original.to || [])
876
+ .map((addr) => (addr.name ? `${addr.name} <${addr.email}>` : addr.email))
877
+ .join(', ') || 'Unknown';
878
+ const originalDate = original.sentAt
879
+ ? new Date(original.sentAt).toLocaleString()
880
+ : 'Unknown date';
881
+ // Step 4: Build quoted forwarded content
882
+ const forwardHeader = `---------- Forwarded message ---------
883
+ From: ${originalFromStr}
884
+ Date: ${originalDate}
885
+ Subject: ${originalSubject}
886
+ To: ${originalToStr}`;
887
+ // Plain text version
888
+ let plainTextBody = note ? `${note}\n\n` : '';
889
+ plainTextBody += `${forwardHeader}\n\n${originalTextBody}`;
890
+ // HTML version with styling
891
+ const htmlForwardHeader = `<div style="border-left: 2px solid #ccc; padding-left: 10px; margin-left: 5px; color: #666;">
892
+ <p>---------- Forwarded message ---------<br/>
893
+ From: ${escapeHtml(originalFromStr)}<br/>
894
+ Date: ${escapeHtml(originalDate)}<br/>
895
+ Subject: ${escapeHtml(originalSubject)}<br/>
896
+ To: ${escapeHtml(originalToStr)}</p>
897
+ ${originalHtmlBody || `<p>${escapeHtml(originalTextBody).replace(/\n/g, '<br/>')}</p>`}
898
+ </div>`;
899
+ let htmlBodyContent = htmlNote ? `<div>${htmlNote}</div><br/>` : (note ? `<p>${escapeHtml(note).replace(/\n/g, '<br/>')}</p><br/>` : '');
900
+ htmlBodyContent += htmlForwardHeader;
901
+ // Step 5: Apply signature if configured
902
+ if (signatureContent) {
903
+ plainTextBody = appendSignature(plainTextBody, signatureContent.text, false);
904
+ htmlBodyContent = appendSignature(htmlBodyContent, signatureContent.html, true);
905
+ }
906
+ // Step 6: Build email object with sender address priority chain
907
+ // Priority: explicit from parameter > defaultFrom config > identity.email
908
+ const senderEmail = from || defaultFrom || identity.email;
909
+ const senderName = identity.name; // Always use identity name
910
+ // Build email object with textBody/htmlBody
911
+ // Note: We use textBody/htmlBody + attachments property instead of bodyStructure
912
+ // because Apache James ignores bodyValues when bodyStructure is present
913
+ const attachments = original.attachments || [];
914
+ const bodyValues = {
915
+ text: { value: plainTextBody },
916
+ html: { value: htmlBodyContent },
917
+ };
918
+ const emailCreate = {
919
+ mailboxIds: { [draftsMailboxId]: true },
920
+ from: [{ name: senderName, email: senderEmail }],
921
+ to: to.map((email) => ({ email })),
922
+ subject: forwardSubject,
923
+ bodyValues,
924
+ textBody: [{ partId: 'text', type: 'text/plain' }],
925
+ htmlBody: [{ partId: 'html', type: 'text/html' }],
926
+ };
927
+ // Add attachments if present (reference original blobs)
928
+ if (attachments.length > 0) {
929
+ emailCreate.attachments = attachments.map((att, index) => ({
930
+ blobId: att.blobId,
931
+ type: att.type,
932
+ name: att.name || `attachment-${index + 1}`,
933
+ }));
934
+ }
935
+ // Add optional address fields
936
+ if (cc && cc.length > 0) {
937
+ emailCreate.cc = cc.map((email) => ({ email }));
938
+ }
939
+ if (bcc && bcc.length > 0) {
940
+ emailCreate.bcc = bcc.map((email) => ({ email }));
941
+ }
942
+ // Note: Unlike reply_email, forward does NOT include inReplyTo or references headers
943
+ // Step 7: Build onSuccessUpdateEmail for Drafts-to-Sent transition
944
+ const onSuccessUpdate = {
945
+ 'keywords/$draft': null,
946
+ };
947
+ if (sentMailboxId) {
948
+ onSuccessUpdate[`mailboxIds/${draftsMailboxId}`] = null;
949
+ onSuccessUpdate[`mailboxIds/${sentMailboxId}`] = true;
950
+ }
951
+ // Step 8: Create email and submit in single batch
952
+ const sendResponse = await jmapClient.request([
953
+ [
954
+ 'Email/set',
955
+ {
956
+ accountId: session.accountId,
957
+ create: { forward: emailCreate },
958
+ },
959
+ 'createForward',
960
+ ],
961
+ [
962
+ 'EmailSubmission/set',
963
+ {
964
+ accountId: session.accountId,
965
+ create: {
966
+ submission: {
967
+ identityId: identity.id,
968
+ emailId: '#forward',
969
+ },
970
+ },
971
+ onSuccessUpdateEmail: { '#submission': onSuccessUpdate },
972
+ },
973
+ 'submitForward',
974
+ ],
975
+ ], SUBMISSION_USING);
976
+ // Step 9: Check Email/set response
977
+ const emailResult = jmapClient.parseMethodResponse(sendResponse.methodResponses[0]);
978
+ if (!emailResult.success) {
979
+ logger.error({ error: emailResult.error }, 'JMAP error in Email/set for forward');
980
+ return {
981
+ isError: true,
982
+ content: [
983
+ {
984
+ type: 'text',
985
+ text: `Failed to create forwarded email: ${emailResult.error?.description || emailResult.error?.type || 'Unknown error'}`,
986
+ },
987
+ ],
988
+ };
989
+ }
990
+ const emailSetResponse = emailResult.data;
991
+ if (emailSetResponse.notCreated?.forward) {
992
+ const error = emailSetResponse.notCreated.forward;
993
+ logger.error({ error }, 'Email/set notCreated for forward');
994
+ // Handle blobNotFound error for attachments
995
+ if (error.type === 'blobNotFound') {
996
+ const missingCount = attachments.length;
997
+ return {
998
+ isError: true,
999
+ content: [
1000
+ {
1001
+ type: 'text',
1002
+ text: `Forward failed: Some attachments are no longer available (${missingCount} attachment${missingCount !== 1 ? 's' : ''} missing). The original email may have been modified or deleted.`,
1003
+ },
1004
+ ],
1005
+ };
1006
+ }
1007
+ return {
1008
+ isError: true,
1009
+ content: [
1010
+ {
1011
+ type: 'text',
1012
+ text: `Failed to create forwarded email: ${error.type} - ${error.description || ''}`,
1013
+ },
1014
+ ],
1015
+ };
1016
+ }
1017
+ const createdEmail = emailSetResponse.created?.forward;
1018
+ if (!createdEmail) {
1019
+ logger.error({}, 'No created forward in response');
1020
+ return {
1021
+ isError: true,
1022
+ content: [
1023
+ {
1024
+ type: 'text',
1025
+ text: 'Failed to create forwarded email: no created email in response',
1026
+ },
1027
+ ],
1028
+ };
1029
+ }
1030
+ // Step 10: Check EmailSubmission/set response
1031
+ const submissionResult = jmapClient.parseMethodResponse(sendResponse.methodResponses[1]);
1032
+ if (!submissionResult.success) {
1033
+ logger.error({ error: submissionResult.error }, 'JMAP error in EmailSubmission/set for forward');
1034
+ return {
1035
+ isError: true,
1036
+ content: [
1037
+ {
1038
+ type: 'text',
1039
+ text: `Failed to send forwarded email: ${submissionResult.error?.description || submissionResult.error?.type || 'Unknown error'}`,
1040
+ },
1041
+ ],
1042
+ };
1043
+ }
1044
+ const submissionSetResponse = submissionResult.data;
1045
+ if (submissionSetResponse.notCreated?.submission) {
1046
+ const error = submissionSetResponse.notCreated.submission;
1047
+ logger.error({ error }, 'EmailSubmission/set notCreated for forward');
1048
+ let errorMessage = `Failed to send forwarded email: ${error.type}`;
1049
+ if (error.type === 'forbiddenFrom') {
1050
+ errorMessage = 'Failed to send forwarded email: You are not authorized to send from this address.';
1051
+ }
1052
+ else if (error.type === 'forbiddenToSend') {
1053
+ errorMessage = 'Failed to send forwarded email: You do not have permission to send emails.';
1054
+ }
1055
+ else if (error.type === 'tooManyRecipients') {
1056
+ errorMessage = 'Failed to send forwarded email: Too many recipients specified.';
1057
+ }
1058
+ else if (error.description) {
1059
+ errorMessage = `Failed to send forwarded email: ${error.type} - ${error.description}`;
1060
+ }
1061
+ return {
1062
+ isError: true,
1063
+ content: [
1064
+ {
1065
+ type: 'text',
1066
+ text: errorMessage,
1067
+ },
1068
+ ],
1069
+ };
1070
+ }
1071
+ const createdSubmission = submissionSetResponse.created?.submission;
1072
+ if (!createdSubmission) {
1073
+ logger.error({}, 'No created submission in response for forward');
1074
+ return {
1075
+ isError: true,
1076
+ content: [
1077
+ {
1078
+ type: 'text',
1079
+ text: 'Failed to send forwarded email: no submission created in response',
1080
+ },
1081
+ ],
1082
+ };
1083
+ }
1084
+ // Step 11: Mark original email with $forwarded keyword (non-blocking)
1085
+ try {
1086
+ await jmapClient.request([
1087
+ [
1088
+ 'Email/set',
1089
+ {
1090
+ accountId: session.accountId,
1091
+ update: {
1092
+ [originalEmailId]: { 'keywords/$forwarded': true },
1093
+ },
1094
+ },
1095
+ 'markForwarded',
1096
+ ],
1097
+ ], SUBMISSION_USING);
1098
+ }
1099
+ catch (markError) {
1100
+ // Log warning but don't fail the forward
1101
+ logger.warn({ error: markError, originalEmailId }, 'Failed to mark original email as forwarded');
1102
+ }
1103
+ logger.debug({
1104
+ emailId: createdEmail.id,
1105
+ submissionId: createdSubmission.id,
1106
+ attachmentCount: attachments.length,
1107
+ }, 'forward_email success');
1108
+ return {
1109
+ content: [
1110
+ {
1111
+ type: 'text',
1112
+ text: JSON.stringify({
1113
+ success: true,
1114
+ emailId: createdEmail.id,
1115
+ submissionId: createdSubmission.id,
1116
+ }),
1117
+ },
1118
+ ],
1119
+ };
1120
+ }
1121
+ catch (error) {
1122
+ logger.error({ error }, 'Exception in forward_email');
1123
+ return {
1124
+ isError: true,
1125
+ content: [
1126
+ {
1127
+ type: 'text',
1128
+ text: `Error forwarding email: ${error instanceof Error ? error.message : String(error)}`,
1129
+ },
1130
+ ],
1131
+ };
1132
+ }
1133
+ });
1134
+ logger.debug('Email sending tools registered: send_email, reply_email, forward_email');
1135
+ }
1136
+ /**
1137
+ * Escape HTML special characters.
1138
+ * @param text Text to escape
1139
+ * @returns HTML-escaped text
1140
+ */
1141
+ function escapeHtml(text) {
1142
+ return text
1143
+ .replace(/&/g, '&amp;')
1144
+ .replace(/</g, '&lt;')
1145
+ .replace(/>/g, '&gt;')
1146
+ .replace(/"/g, '&quot;')
1147
+ .replace(/'/g, '&#039;');
681
1148
  }
682
1149
  //# sourceMappingURL=email-sending.js.map