@n24q02m/better-email-mcp 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 (97) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/bin/cli.mjs +13 -0
  4. package/build/scripts/start-server.d.ts +6 -0
  5. package/build/scripts/start-server.d.ts.map +1 -0
  6. package/build/scripts/start-server.js +21 -0
  7. package/build/scripts/start-server.js.map +1 -0
  8. package/build/src/docs/attachments.md +48 -0
  9. package/build/src/docs/folders.md +45 -0
  10. package/build/src/docs/messages.md +92 -0
  11. package/build/src/docs/send.md +52 -0
  12. package/build/src/init-server.d.ts +40 -0
  13. package/build/src/init-server.d.ts.map +1 -0
  14. package/build/src/init-server.js +57 -0
  15. package/build/src/init-server.js.map +1 -0
  16. package/build/src/tools/composite/attachments.d.ts +17 -0
  17. package/build/src/tools/composite/attachments.d.ts.map +1 -0
  18. package/build/src/tools/composite/attachments.js +77 -0
  19. package/build/src/tools/composite/attachments.js.map +1 -0
  20. package/build/src/tools/composite/attachments.test.d.ts +2 -0
  21. package/build/src/tools/composite/attachments.test.d.ts.map +1 -0
  22. package/build/src/tools/composite/attachments.test.js +138 -0
  23. package/build/src/tools/composite/attachments.test.js.map +1 -0
  24. package/build/src/tools/composite/folders.d.ts +14 -0
  25. package/build/src/tools/composite/folders.d.ts.map +1 -0
  26. package/build/src/tools/composite/folders.js +57 -0
  27. package/build/src/tools/composite/folders.js.map +1 -0
  28. package/build/src/tools/composite/folders.test.d.ts +2 -0
  29. package/build/src/tools/composite/folders.test.d.ts.map +1 -0
  30. package/build/src/tools/composite/folders.test.js +61 -0
  31. package/build/src/tools/composite/folders.test.js.map +1 -0
  32. package/build/src/tools/composite/messages.d.ts +20 -0
  33. package/build/src/tools/composite/messages.d.ts.map +1 -0
  34. package/build/src/tools/composite/messages.js +244 -0
  35. package/build/src/tools/composite/messages.js.map +1 -0
  36. package/build/src/tools/composite/messages.test.d.ts +2 -0
  37. package/build/src/tools/composite/messages.test.d.ts.map +1 -0
  38. package/build/src/tools/composite/messages.test.js +217 -0
  39. package/build/src/tools/composite/messages.test.js.map +1 -0
  40. package/build/src/tools/composite/send.d.ts +21 -0
  41. package/build/src/tools/composite/send.d.ts.map +1 -0
  42. package/build/src/tools/composite/send.js +127 -0
  43. package/build/src/tools/composite/send.js.map +1 -0
  44. package/build/src/tools/composite/send.test.d.ts +2 -0
  45. package/build/src/tools/composite/send.test.d.ts.map +1 -0
  46. package/build/src/tools/composite/send.test.js +232 -0
  47. package/build/src/tools/composite/send.test.js.map +1 -0
  48. package/build/src/tools/helpers/config.d.ts +33 -0
  49. package/build/src/tools/helpers/config.d.ts.map +1 -0
  50. package/build/src/tools/helpers/config.js +167 -0
  51. package/build/src/tools/helpers/config.js.map +1 -0
  52. package/build/src/tools/helpers/config.test.d.ts +2 -0
  53. package/build/src/tools/helpers/config.test.d.ts.map +1 -0
  54. package/build/src/tools/helpers/config.test.js +141 -0
  55. package/build/src/tools/helpers/config.test.js.map +1 -0
  56. package/build/src/tools/helpers/errors.d.ts +34 -0
  57. package/build/src/tools/helpers/errors.d.ts.map +1 -0
  58. package/build/src/tools/helpers/errors.js +152 -0
  59. package/build/src/tools/helpers/errors.js.map +1 -0
  60. package/build/src/tools/helpers/errors.test.d.ts +2 -0
  61. package/build/src/tools/helpers/errors.test.d.ts.map +1 -0
  62. package/build/src/tools/helpers/errors.test.js +203 -0
  63. package/build/src/tools/helpers/errors.test.js.map +1 -0
  64. package/build/src/tools/helpers/html-utils.d.ts +10 -0
  65. package/build/src/tools/helpers/html-utils.d.ts.map +1 -0
  66. package/build/src/tools/helpers/html-utils.js +29 -0
  67. package/build/src/tools/helpers/html-utils.js.map +1 -0
  68. package/build/src/tools/helpers/html-utils.test.d.ts +2 -0
  69. package/build/src/tools/helpers/html-utils.test.d.ts.map +1 -0
  70. package/build/src/tools/helpers/html-utils.test.js +103 -0
  71. package/build/src/tools/helpers/html-utils.test.js.map +1 -0
  72. package/build/src/tools/helpers/imap-client.d.ts +90 -0
  73. package/build/src/tools/helpers/imap-client.d.ts.map +1 -0
  74. package/build/src/tools/helpers/imap-client.js +321 -0
  75. package/build/src/tools/helpers/imap-client.js.map +1 -0
  76. package/build/src/tools/helpers/imap-client.test.d.ts +2 -0
  77. package/build/src/tools/helpers/imap-client.test.d.ts.map +1 -0
  78. package/build/src/tools/helpers/imap-client.test.js +401 -0
  79. package/build/src/tools/helpers/imap-client.test.js.map +1 -0
  80. package/build/src/tools/helpers/smtp-client.d.ts +38 -0
  81. package/build/src/tools/helpers/smtp-client.d.ts.map +1 -0
  82. package/build/src/tools/helpers/smtp-client.js +124 -0
  83. package/build/src/tools/helpers/smtp-client.js.map +1 -0
  84. package/build/src/tools/helpers/smtp-client.test.d.ts +2 -0
  85. package/build/src/tools/helpers/smtp-client.test.d.ts.map +1 -0
  86. package/build/src/tools/helpers/smtp-client.test.js +210 -0
  87. package/build/src/tools/helpers/smtp-client.test.js.map +1 -0
  88. package/build/src/tools/registry.d.ts +11 -0
  89. package/build/src/tools/registry.d.ts.map +1 -0
  90. package/build/src/tools/registry.js +262 -0
  91. package/build/src/tools/registry.js.map +1 -0
  92. package/build/src/tools/registry.test.d.ts +2 -0
  93. package/build/src/tools/registry.test.d.ts.map +1 -0
  94. package/build/src/tools/registry.test.js +135 -0
  95. package/build/src/tools/registry.test.js.map +1 -0
  96. package/build/tsconfig.tsbuildinfo +1 -0
  97. package/package.json +81 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * IMAP Client Manager
3
+ * Manages connections to multiple IMAP servers with connection pooling
4
+ */
5
+ import type { AccountConfig } from './config.js';
6
+ export interface EmailSummary {
7
+ account_id: string;
8
+ account_email: string;
9
+ uid: number;
10
+ message_id?: string;
11
+ subject: string;
12
+ from: string;
13
+ to: string;
14
+ date: string;
15
+ flags: string[];
16
+ snippet: string;
17
+ }
18
+ export interface EmailDetail {
19
+ account_id: string;
20
+ account_email: string;
21
+ uid: number;
22
+ message_id?: string;
23
+ in_reply_to?: string;
24
+ references?: string;
25
+ subject: string;
26
+ from: string;
27
+ to: string;
28
+ cc?: string;
29
+ bcc?: string;
30
+ date: string;
31
+ flags: string[];
32
+ body_text: string;
33
+ attachments: AttachmentInfo[];
34
+ }
35
+ export interface AttachmentInfo {
36
+ filename: string;
37
+ content_type: string;
38
+ size: number;
39
+ content_id?: string;
40
+ }
41
+ export interface FolderInfo {
42
+ name: string;
43
+ path: string;
44
+ flags: string[];
45
+ delimiter: string;
46
+ children?: FolderInfo[];
47
+ }
48
+ /**
49
+ * Search emails across one or multiple accounts
50
+ */
51
+ export declare function searchEmails(accounts: AccountConfig[], query: string, folder: string, limit: number): Promise<EmailSummary[]>;
52
+ /**
53
+ * Read a single email by UID
54
+ */
55
+ export declare function readEmail(account: AccountConfig, uid: number, folder: string): Promise<EmailDetail>;
56
+ /**
57
+ * Modify email flags (mark read/unread, flag/unflag)
58
+ */
59
+ export declare function modifyFlags(account: AccountConfig, uids: number[], folder: string, flags: string[], action: 'add' | 'remove'): Promise<{
60
+ success: boolean;
61
+ modified: number;
62
+ }>;
63
+ /**
64
+ * Move emails to another folder
65
+ */
66
+ export declare function moveEmails(account: AccountConfig, uids: number[], fromFolder: string, toFolder: string): Promise<{
67
+ success: boolean;
68
+ moved: number;
69
+ }>;
70
+ /**
71
+ * Delete (trash) emails
72
+ */
73
+ export declare function trashEmails(account: AccountConfig, uids: number[], folder: string): Promise<{
74
+ success: boolean;
75
+ trashed: number;
76
+ }>;
77
+ /**
78
+ * List mailbox folders
79
+ */
80
+ export declare function listFolders(account: AccountConfig): Promise<FolderInfo[]>;
81
+ /**
82
+ * Get attachment content by filename
83
+ */
84
+ export declare function getAttachment(account: AccountConfig, uid: number, folder: string, filename: string): Promise<{
85
+ filename: string;
86
+ content_type: string;
87
+ size: number;
88
+ content_base64: string;
89
+ }>;
90
+ //# sourceMappingURL=imap-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imap-client.d.ts","sourceRoot":"","sources":["../../../../src/tools/helpers/imap-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * IMAP Client Manager
3
+ * Manages connections to multiple IMAP servers with connection pooling
4
+ */
5
+ import { ImapFlow } from 'imapflow';
6
+ import { simpleParser } from 'mailparser';
7
+ import { EmailMCPError } from './errors.js';
8
+ import { htmlToCleanText } from './html-utils.js';
9
+ /**
10
+ * Create an ImapFlow client for the given account
11
+ */
12
+ function createClient(account) {
13
+ return new ImapFlow({
14
+ host: account.imap.host,
15
+ port: account.imap.port,
16
+ secure: account.imap.secure,
17
+ auth: {
18
+ user: account.email,
19
+ pass: account.password
20
+ },
21
+ logger: false
22
+ });
23
+ }
24
+ /**
25
+ * Execute an operation with an IMAP connection (auto-connect/disconnect)
26
+ */
27
+ async function withConnection(account, fn) {
28
+ const client = createClient(account);
29
+ try {
30
+ await client.connect();
31
+ return await fn(client);
32
+ }
33
+ finally {
34
+ try {
35
+ await client.logout();
36
+ }
37
+ catch {
38
+ // Ignore logout errors
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Build IMAP search criteria from query string
44
+ */
45
+ function buildSearchCriteria(query) {
46
+ const upper = query.toUpperCase().trim();
47
+ // Simple keyword shortcuts
48
+ if (upper === 'UNREAD' || upper === 'UNSEEN')
49
+ return { seen: false };
50
+ if (upper === 'READ' || upper === 'SEEN')
51
+ return { seen: true };
52
+ if (upper === 'FLAGGED' || upper === 'STARRED')
53
+ return { flagged: true };
54
+ if (upper === 'UNFLAGGED' || upper === 'UNSTARRED')
55
+ return { flagged: false };
56
+ if (upper === 'ALL' || upper === '*')
57
+ return {};
58
+ // Date-based: SINCE YYYY-MM-DD
59
+ const sinceMatch = query.match(/^SINCE\s+(\d{4}-\d{2}-\d{2})$/i);
60
+ if (sinceMatch)
61
+ return { since: new Date(sinceMatch[1]) };
62
+ // From filter: FROM email@example.com
63
+ const fromMatch = query.match(/^FROM\s+(.+)$/i);
64
+ if (fromMatch)
65
+ return { from: fromMatch[1] };
66
+ // Subject filter: SUBJECT keyword
67
+ const subjectMatch = query.match(/^SUBJECT\s+(.+)$/i);
68
+ if (subjectMatch)
69
+ return { subject: subjectMatch[1] };
70
+ // Compound: UNREAD SINCE 2024-01-01
71
+ const compoundUnreadSince = query.match(/^UNREAD\s+SINCE\s+(\d{4}-\d{2}-\d{2})$/i);
72
+ if (compoundUnreadSince)
73
+ return { seen: false, since: new Date(compoundUnreadSince[1]) };
74
+ // Compound: UNREAD FROM x
75
+ const compoundUnreadFrom = query.match(/^UNREAD\s+FROM\s+(.+)$/i);
76
+ if (compoundUnreadFrom)
77
+ return { seen: false, from: compoundUnreadFrom[1] };
78
+ // Default: treat as subject search
79
+ return { subject: query };
80
+ }
81
+ /**
82
+ * Extract a short snippet from email body
83
+ */
84
+ function extractSnippet(text, maxLength = 200) {
85
+ const cleaned = text.replace(/\s+/g, ' ').trim();
86
+ if (cleaned.length <= maxLength)
87
+ return cleaned;
88
+ return `${cleaned.substring(0, maxLength)}...`;
89
+ }
90
+ /**
91
+ * Format email address from parsed address object
92
+ */
93
+ function formatAddress(addr) {
94
+ if (!addr)
95
+ return '';
96
+ if (typeof addr === 'string')
97
+ return addr;
98
+ if (addr.text)
99
+ return addr.text;
100
+ if (Array.isArray(addr.value)) {
101
+ return addr.value.map((a) => (a.name ? `${a.name} <${a.address}>` : a.address)).join(', ');
102
+ }
103
+ return '';
104
+ }
105
+ // ============================================================================
106
+ // Public API
107
+ // ============================================================================
108
+ /**
109
+ * Search emails across one or multiple accounts
110
+ */
111
+ export async function searchEmails(accounts, query, folder, limit) {
112
+ const results = [];
113
+ const criteria = buildSearchCriteria(query);
114
+ for (const account of accounts) {
115
+ try {
116
+ const emails = await withConnection(account, async (client) => {
117
+ const lock = await client.getMailboxLock(folder);
118
+ try {
119
+ const summaries = [];
120
+ let count = 0;
121
+ for await (const msg of client.fetch(criteria, {
122
+ uid: true,
123
+ flags: true,
124
+ envelope: true,
125
+ bodyStructure: true,
126
+ source: { start: 0, maxLength: 500 }
127
+ })) {
128
+ if (count >= limit)
129
+ break;
130
+ const snippet = msg.source ? extractSnippet(msg.source.toString('utf-8')) : '';
131
+ summaries.push({
132
+ account_id: account.id,
133
+ account_email: account.email,
134
+ uid: msg.uid,
135
+ message_id: msg.envelope?.messageId,
136
+ subject: msg.envelope?.subject || '(No subject)',
137
+ from: msg.envelope?.from?.[0]
138
+ ? `${msg.envelope.from[0].name || ''} <${msg.envelope.from[0].address || ''}>`.trim()
139
+ : '',
140
+ to: msg.envelope?.to?.map((a) => a.address).join(', ') || '',
141
+ date: msg.envelope?.date?.toISOString() || '',
142
+ flags: Array.from(msg.flags || []),
143
+ snippet
144
+ });
145
+ count++;
146
+ }
147
+ return summaries;
148
+ }
149
+ finally {
150
+ lock.release();
151
+ }
152
+ });
153
+ results.push(...emails);
154
+ }
155
+ catch (error) {
156
+ // Include error info but continue with other accounts
157
+ results.push({
158
+ account_id: account.id,
159
+ account_email: account.email,
160
+ uid: 0,
161
+ subject: `[ERROR] ${error.message}`,
162
+ from: '',
163
+ to: '',
164
+ date: '',
165
+ flags: [],
166
+ snippet: `Failed to search ${account.email}: ${error.message}`
167
+ });
168
+ }
169
+ }
170
+ return results;
171
+ }
172
+ /**
173
+ * Read a single email by UID
174
+ */
175
+ export async function readEmail(account, uid, folder) {
176
+ return withConnection(account, async (client) => {
177
+ const lock = await client.getMailboxLock(folder);
178
+ try {
179
+ const fetchResult = await client.fetchOne(`${uid}`, {
180
+ uid: true,
181
+ flags: true,
182
+ source: true
183
+ });
184
+ if (!fetchResult || !fetchResult.source) {
185
+ throw new EmailMCPError(`Email UID ${uid} not found in ${folder}`, 'NOT_FOUND', 'Check the UID and folder');
186
+ }
187
+ const msg = fetchResult;
188
+ const parsed = await simpleParser(msg.source);
189
+ const bodyText = parsed.text || (parsed.html ? htmlToCleanText(parsed.html) : '(Empty body)');
190
+ return {
191
+ account_id: account.id,
192
+ account_email: account.email,
193
+ uid: msg.uid,
194
+ message_id: parsed.messageId,
195
+ in_reply_to: parsed.inReplyTo,
196
+ references: Array.isArray(parsed.references) ? parsed.references.join(' ') : parsed.references,
197
+ subject: parsed.subject || '(No subject)',
198
+ from: formatAddress(parsed.from),
199
+ to: formatAddress(parsed.to),
200
+ cc: formatAddress(parsed.cc),
201
+ bcc: formatAddress(parsed.bcc),
202
+ date: parsed.date?.toISOString() || '',
203
+ flags: Array.from(msg.flags || []),
204
+ body_text: bodyText,
205
+ attachments: (parsed.attachments || []).map((att) => ({
206
+ filename: att.filename || 'unnamed',
207
+ content_type: att.contentType || 'application/octet-stream',
208
+ size: att.size || 0,
209
+ content_id: att.contentId
210
+ }))
211
+ };
212
+ }
213
+ finally {
214
+ lock.release();
215
+ }
216
+ });
217
+ }
218
+ /**
219
+ * Modify email flags (mark read/unread, flag/unflag)
220
+ */
221
+ export async function modifyFlags(account, uids, folder, flags, action) {
222
+ return withConnection(account, async (client) => {
223
+ const lock = await client.getMailboxLock(folder);
224
+ try {
225
+ const uidStr = uids.join(',');
226
+ if (action === 'add') {
227
+ await client.messageFlagsAdd({ uid: uidStr }, flags);
228
+ }
229
+ else {
230
+ await client.messageFlagsRemove({ uid: uidStr }, flags);
231
+ }
232
+ return { success: true, modified: uids.length };
233
+ }
234
+ finally {
235
+ lock.release();
236
+ }
237
+ });
238
+ }
239
+ /**
240
+ * Move emails to another folder
241
+ */
242
+ export async function moveEmails(account, uids, fromFolder, toFolder) {
243
+ return withConnection(account, async (client) => {
244
+ const lock = await client.getMailboxLock(fromFolder);
245
+ try {
246
+ const uidStr = uids.join(',');
247
+ await client.messageMove({ uid: uidStr }, toFolder);
248
+ return { success: true, moved: uids.length };
249
+ }
250
+ finally {
251
+ lock.release();
252
+ }
253
+ });
254
+ }
255
+ /**
256
+ * Delete (trash) emails
257
+ */
258
+ export async function trashEmails(account, uids, folder) {
259
+ return withConnection(account, async (client) => {
260
+ const lock = await client.getMailboxLock(folder);
261
+ try {
262
+ const uidStr = uids.join(',');
263
+ await client.messageDelete({ uid: uidStr });
264
+ return { success: true, trashed: uids.length };
265
+ }
266
+ finally {
267
+ lock.release();
268
+ }
269
+ });
270
+ }
271
+ /**
272
+ * List mailbox folders
273
+ */
274
+ export async function listFolders(account) {
275
+ return withConnection(account, async (client) => {
276
+ const mailboxes = await client.list();
277
+ return mailboxes.map((mb) => ({
278
+ name: mb.name,
279
+ path: mb.path,
280
+ flags: Array.from(mb.flags || []),
281
+ delimiter: mb.delimiter || '/',
282
+ children: mb.folders
283
+ ? Array.from(mb.folders).map(([, child]) => ({
284
+ name: child.name,
285
+ path: child.path,
286
+ flags: Array.from(child.flags || []),
287
+ delimiter: child.delimiter || '/'
288
+ }))
289
+ : undefined
290
+ }));
291
+ });
292
+ }
293
+ /**
294
+ * Get attachment content by filename
295
+ */
296
+ export async function getAttachment(account, uid, folder, filename) {
297
+ return withConnection(account, async (client) => {
298
+ const lock = await client.getMailboxLock(folder);
299
+ try {
300
+ const fetchResult = await client.fetchOne(`${uid}`, { uid: true, source: true });
301
+ if (!fetchResult || !fetchResult.source) {
302
+ throw new EmailMCPError(`Email UID ${uid} not found`, 'NOT_FOUND', 'Check the UID and folder');
303
+ }
304
+ const parsed = await simpleParser(fetchResult.source);
305
+ const attachment = parsed.attachments?.find((att) => att.filename?.toLowerCase() === filename.toLowerCase());
306
+ if (!attachment) {
307
+ throw new EmailMCPError(`Attachment "${filename}" not found`, 'ATTACHMENT_NOT_FOUND', `Available: ${parsed.attachments?.map((a) => a.filename).join(', ') || 'none'}`);
308
+ }
309
+ return {
310
+ filename: attachment.filename || 'unnamed',
311
+ content_type: attachment.contentType || 'application/octet-stream',
312
+ size: attachment.size || 0,
313
+ content_base64: attachment.content.toString('base64')
314
+ };
315
+ }
316
+ finally {
317
+ lock.release();
318
+ }
319
+ });
320
+ }
321
+ //# sourceMappingURL=imap-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imap-client.js","sourceRoot":"","sources":["../../../../src/tools/helpers/imap-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=imap-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imap-client.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/helpers/imap-client.test.ts"],"names":[],"mappings":""}