gmail-mcp-imap 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.
@@ -0,0 +1,596 @@
1
+ import Imap from "imap";
2
+ import { simpleParser } from "mailparser";
3
+ import nodemailer from "nodemailer";
4
+ // Gmail categories
5
+ const GMAIL_CATEGORIES = ["primary", "social", "promotions", "updates", "forums"];
6
+ export class GmailClient {
7
+ config;
8
+ smtpTransport = null;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ // Create IMAP connection
13
+ createImapConnection() {
14
+ return new Imap({
15
+ user: this.config.email,
16
+ password: this.config.appPassword,
17
+ host: "imap.gmail.com",
18
+ port: 993,
19
+ tls: true,
20
+ tlsOptions: { rejectUnauthorized: false },
21
+ });
22
+ }
23
+ // Initialize SMTP transport
24
+ getSmtpTransport() {
25
+ if (!this.smtpTransport) {
26
+ this.smtpTransport = nodemailer.createTransport({
27
+ host: "smtp.gmail.com",
28
+ port: 465,
29
+ secure: true,
30
+ auth: {
31
+ user: this.config.email,
32
+ pass: this.config.appPassword,
33
+ },
34
+ });
35
+ }
36
+ return this.smtpTransport;
37
+ }
38
+ // Helper to run IMAP operations
39
+ runImapOperation(operation) {
40
+ return new Promise((resolve, reject) => {
41
+ const imap = this.createImapConnection();
42
+ imap.once("ready", () => {
43
+ operation(imap, resolve, reject);
44
+ });
45
+ imap.once("error", (err) => {
46
+ reject(err);
47
+ });
48
+ imap.connect();
49
+ });
50
+ }
51
+ // Get emails by Gmail category using X-GM-RAW
52
+ async getEmailsByCategory(category, limit = 10, dateFilter) {
53
+ return this.runImapOperation((imap, resolve, reject) => {
54
+ imap.openBox("INBOX", true, (err) => {
55
+ if (err) {
56
+ imap.end();
57
+ reject(err);
58
+ return;
59
+ }
60
+ // Build search query with category and optional date filters
61
+ let searchQuery = `category:${category}`;
62
+ if (dateFilter?.after) {
63
+ searchQuery += ` after:${dateFilter.after}`;
64
+ }
65
+ if (dateFilter?.before) {
66
+ searchQuery += ` before:${dateFilter.before}`;
67
+ }
68
+ // Use X-GM-RAW for Gmail category search
69
+ imap.search([["X-GM-RAW", searchQuery]], (err, uids) => {
70
+ if (err) {
71
+ imap.end();
72
+ reject(err);
73
+ return;
74
+ }
75
+ if (!uids || uids.length === 0) {
76
+ imap.end();
77
+ resolve([]);
78
+ return;
79
+ }
80
+ // Get the most recent emails (last N)
81
+ const recentUids = uids.slice(-limit);
82
+ const emails = [];
83
+ const fetch = imap.fetch(recentUids, {
84
+ bodies: ["HEADER.FIELDS (FROM TO SUBJECT DATE)"],
85
+ struct: true,
86
+ });
87
+ fetch.on("message", (msg) => {
88
+ let uid = 0;
89
+ let headers = {};
90
+ const flags = [];
91
+ msg.on("body", (stream) => {
92
+ let buffer = "";
93
+ stream.on("data", (chunk) => {
94
+ buffer += chunk.toString("utf8");
95
+ });
96
+ stream.once("end", () => {
97
+ headers = Imap.parseHeader(buffer);
98
+ });
99
+ });
100
+ msg.once("attributes", (attrs) => {
101
+ uid = attrs.uid;
102
+ if (attrs.flags) {
103
+ flags.push(...attrs.flags);
104
+ }
105
+ });
106
+ msg.once("end", () => {
107
+ emails.push({
108
+ id: uid.toString(),
109
+ uid,
110
+ subject: headers.subject?.[0] || "(No Subject)",
111
+ from: headers.from?.[0] || "Unknown",
112
+ to: headers.to?.[0] || "",
113
+ date: headers.date?.[0] || "",
114
+ snippet: "",
115
+ labels: [],
116
+ isRead: flags.includes("\\Seen"),
117
+ isStarred: flags.includes("\\Flagged"),
118
+ });
119
+ });
120
+ });
121
+ fetch.once("error", (err) => {
122
+ imap.end();
123
+ reject(err);
124
+ });
125
+ fetch.once("end", () => {
126
+ imap.end();
127
+ // Return in reverse order (most recent first)
128
+ resolve(emails.reverse());
129
+ });
130
+ });
131
+ });
132
+ });
133
+ }
134
+ // Get emails from a specific label/folder
135
+ async getEmailsByLabel(label, limit = 10) {
136
+ return this.runImapOperation((imap, resolve, reject) => {
137
+ // Try to open the label as a mailbox
138
+ const mailboxPath = label.startsWith("[Gmail]") ? label : label;
139
+ imap.openBox(mailboxPath, true, (err) => {
140
+ if (err) {
141
+ imap.end();
142
+ reject(err);
143
+ return;
144
+ }
145
+ imap.search(["ALL"], (err, uids) => {
146
+ if (err) {
147
+ imap.end();
148
+ reject(err);
149
+ return;
150
+ }
151
+ if (!uids || uids.length === 0) {
152
+ imap.end();
153
+ resolve([]);
154
+ return;
155
+ }
156
+ const recentUids = uids.slice(-limit);
157
+ const emails = [];
158
+ const fetch = imap.fetch(recentUids, {
159
+ bodies: ["HEADER.FIELDS (FROM TO SUBJECT DATE)"],
160
+ struct: true,
161
+ });
162
+ fetch.on("message", (msg) => {
163
+ let uid = 0;
164
+ let headers = {};
165
+ const flags = [];
166
+ msg.on("body", (stream) => {
167
+ let buffer = "";
168
+ stream.on("data", (chunk) => {
169
+ buffer += chunk.toString("utf8");
170
+ });
171
+ stream.once("end", () => {
172
+ headers = Imap.parseHeader(buffer);
173
+ });
174
+ });
175
+ msg.once("attributes", (attrs) => {
176
+ uid = attrs.uid;
177
+ if (attrs.flags) {
178
+ flags.push(...attrs.flags);
179
+ }
180
+ });
181
+ msg.once("end", () => {
182
+ emails.push({
183
+ id: uid.toString(),
184
+ uid,
185
+ subject: headers.subject?.[0] || "(No Subject)",
186
+ from: headers.from?.[0] || "Unknown",
187
+ to: headers.to?.[0] || "",
188
+ date: headers.date?.[0] || "",
189
+ snippet: "",
190
+ labels: [],
191
+ isRead: flags.includes("\\Seen"),
192
+ isStarred: flags.includes("\\Flagged"),
193
+ });
194
+ });
195
+ });
196
+ fetch.once("error", (err) => {
197
+ imap.end();
198
+ reject(err);
199
+ });
200
+ fetch.once("end", () => {
201
+ imap.end();
202
+ resolve(emails.reverse());
203
+ });
204
+ });
205
+ });
206
+ });
207
+ }
208
+ // Search emails using X-GM-RAW (Gmail search syntax)
209
+ async searchEmails(query, limit = 10) {
210
+ return this.runImapOperation((imap, resolve, reject) => {
211
+ imap.openBox("INBOX", true, (err) => {
212
+ if (err) {
213
+ imap.end();
214
+ reject(err);
215
+ return;
216
+ }
217
+ // Use X-GM-RAW for Gmail search syntax
218
+ imap.search([["X-GM-RAW", query]], (err, uids) => {
219
+ if (err) {
220
+ imap.end();
221
+ reject(err);
222
+ return;
223
+ }
224
+ if (!uids || uids.length === 0) {
225
+ imap.end();
226
+ resolve([]);
227
+ return;
228
+ }
229
+ const recentUids = uids.slice(-limit);
230
+ const emails = [];
231
+ const fetch = imap.fetch(recentUids, {
232
+ bodies: ["HEADER.FIELDS (FROM TO SUBJECT DATE)"],
233
+ struct: true,
234
+ });
235
+ fetch.on("message", (msg) => {
236
+ let uid = 0;
237
+ let headers = {};
238
+ const flags = [];
239
+ msg.on("body", (stream) => {
240
+ let buffer = "";
241
+ stream.on("data", (chunk) => {
242
+ buffer += chunk.toString("utf8");
243
+ });
244
+ stream.once("end", () => {
245
+ headers = Imap.parseHeader(buffer);
246
+ });
247
+ });
248
+ msg.once("attributes", (attrs) => {
249
+ uid = attrs.uid;
250
+ if (attrs.flags) {
251
+ flags.push(...attrs.flags);
252
+ }
253
+ });
254
+ msg.once("end", () => {
255
+ emails.push({
256
+ id: uid.toString(),
257
+ uid,
258
+ subject: headers.subject?.[0] || "(No Subject)",
259
+ from: headers.from?.[0] || "Unknown",
260
+ to: headers.to?.[0] || "",
261
+ date: headers.date?.[0] || "",
262
+ snippet: "",
263
+ labels: [],
264
+ isRead: flags.includes("\\Seen"),
265
+ isStarred: flags.includes("\\Flagged"),
266
+ });
267
+ });
268
+ });
269
+ fetch.once("error", (err) => {
270
+ imap.end();
271
+ reject(err);
272
+ });
273
+ fetch.once("end", () => {
274
+ imap.end();
275
+ resolve(emails.reverse());
276
+ });
277
+ });
278
+ });
279
+ });
280
+ }
281
+ // Get full email content by UID
282
+ async getEmailContent(uid) {
283
+ return this.runImapOperation((imap, resolve, reject) => {
284
+ imap.openBox("INBOX", true, (err) => {
285
+ if (err) {
286
+ imap.end();
287
+ reject(err);
288
+ return;
289
+ }
290
+ const fetch = imap.fetch([uid], { bodies: "" });
291
+ fetch.on("message", (msg) => {
292
+ let emailContent = null;
293
+ const flags = [];
294
+ msg.on("body", (stream) => {
295
+ simpleParser(stream, (err, parsed) => {
296
+ if (err) {
297
+ return;
298
+ }
299
+ emailContent = {
300
+ id: uid.toString(),
301
+ uid,
302
+ subject: parsed.subject || "(No Subject)",
303
+ from: parsed.from?.text || "Unknown",
304
+ to: Array.isArray(parsed.to) ? parsed.to.map(a => a.text).join(", ") : parsed.to?.text || "",
305
+ date: parsed.date?.toISOString() || "",
306
+ snippet: (parsed.text || "").substring(0, 200),
307
+ labels: [],
308
+ isRead: flags.includes("\\Seen"),
309
+ isStarred: flags.includes("\\Flagged"),
310
+ body: parsed.text || "",
311
+ attachments: (parsed.attachments || []).map((att) => ({
312
+ filename: att.filename || "unknown",
313
+ contentType: att.contentType || "application/octet-stream",
314
+ size: att.size || 0,
315
+ })),
316
+ };
317
+ });
318
+ });
319
+ msg.once("attributes", (attrs) => {
320
+ if (attrs.flags) {
321
+ flags.push(...attrs.flags);
322
+ }
323
+ });
324
+ msg.once("end", () => {
325
+ // Wait a bit for parsing to complete
326
+ setTimeout(() => {
327
+ imap.end();
328
+ resolve(emailContent);
329
+ }, 100);
330
+ });
331
+ });
332
+ fetch.once("error", (err) => {
333
+ imap.end();
334
+ reject(err);
335
+ });
336
+ fetch.once("end", () => {
337
+ // Handled in message end
338
+ });
339
+ });
340
+ });
341
+ }
342
+ // List all labels/folders
343
+ async listLabels() {
344
+ return this.runImapOperation((imap, resolve, reject) => {
345
+ imap.getBoxes((err, boxes) => {
346
+ if (err) {
347
+ imap.end();
348
+ reject(err);
349
+ return;
350
+ }
351
+ const labels = [];
352
+ const extractLabels = (boxObj, prefix = "") => {
353
+ for (const name in boxObj) {
354
+ const fullPath = prefix ? `${prefix}/${name}` : name;
355
+ labels.push(fullPath);
356
+ if (boxObj[name].children) {
357
+ extractLabels(boxObj[name].children, fullPath);
358
+ }
359
+ }
360
+ };
361
+ extractLabels(boxes);
362
+ imap.end();
363
+ resolve(labels);
364
+ });
365
+ });
366
+ }
367
+ // Send email
368
+ async sendEmail(to, subject, body, options) {
369
+ try {
370
+ const transport = this.getSmtpTransport();
371
+ const mailOptions = {
372
+ from: this.config.email,
373
+ to,
374
+ subject,
375
+ [options?.html ? "html" : "text"]: body,
376
+ };
377
+ if (options?.cc)
378
+ mailOptions.cc = options.cc;
379
+ if (options?.bcc)
380
+ mailOptions.bcc = options.bcc;
381
+ if (options?.replyTo)
382
+ mailOptions.replyTo = options.replyTo;
383
+ const result = await transport.sendMail(mailOptions);
384
+ return {
385
+ success: true,
386
+ messageId: result.messageId,
387
+ };
388
+ }
389
+ catch (error) {
390
+ return {
391
+ success: false,
392
+ error: error instanceof Error ? error.message : "Unknown error",
393
+ };
394
+ }
395
+ }
396
+ // Reply to an email
397
+ async replyEmail(uid, body, options) {
398
+ const original = await this.getEmailContent(uid);
399
+ if (!original) {
400
+ return { success: false, error: "Original email not found" };
401
+ }
402
+ const subject = original.subject.startsWith("Re:")
403
+ ? original.subject
404
+ : `Re: ${original.subject}`;
405
+ // Extract email address from "Name <email>" format
406
+ const fromMatch = original.from.match(/<(.+)>/) || [null, original.from];
407
+ const replyTo = fromMatch[1] || original.from;
408
+ return this.sendEmail(replyTo, subject, body, {
409
+ html: options?.html,
410
+ replyTo: replyTo,
411
+ });
412
+ }
413
+ // Mark email as read/unread
414
+ async markAsRead(uid, read = true) {
415
+ return this.runImapOperation((imap, resolve, reject) => {
416
+ imap.openBox("INBOX", false, (err) => {
417
+ if (err) {
418
+ imap.end();
419
+ reject(err);
420
+ return;
421
+ }
422
+ const operation = read ? imap.addFlags.bind(imap) : imap.delFlags.bind(imap);
423
+ operation([uid], ["\\Seen"], (err) => {
424
+ imap.end();
425
+ if (err) {
426
+ reject(err);
427
+ }
428
+ else {
429
+ resolve(true);
430
+ }
431
+ });
432
+ });
433
+ });
434
+ }
435
+ // Star/unstar email
436
+ async starEmail(uid, starred = true) {
437
+ return this.runImapOperation((imap, resolve, reject) => {
438
+ imap.openBox("INBOX", false, (err) => {
439
+ if (err) {
440
+ imap.end();
441
+ reject(err);
442
+ return;
443
+ }
444
+ const operation = starred ? imap.addFlags.bind(imap) : imap.delFlags.bind(imap);
445
+ operation([uid], ["\\Flagged"], (err) => {
446
+ imap.end();
447
+ if (err) {
448
+ reject(err);
449
+ }
450
+ else {
451
+ resolve(true);
452
+ }
453
+ });
454
+ });
455
+ });
456
+ }
457
+ // Delete email (move to trash)
458
+ async deleteEmail(uid) {
459
+ return this.runImapOperation((imap, resolve, reject) => {
460
+ imap.openBox("INBOX", false, (err) => {
461
+ if (err) {
462
+ imap.end();
463
+ reject(err);
464
+ return;
465
+ }
466
+ imap.move([uid], "[Gmail]/Trash", (err) => {
467
+ imap.end();
468
+ if (err) {
469
+ reject(err);
470
+ }
471
+ else {
472
+ resolve(true);
473
+ }
474
+ });
475
+ });
476
+ });
477
+ }
478
+ // Apply label to email
479
+ async applyLabel(uid, label) {
480
+ return this.runImapOperation((imap, resolve, reject) => {
481
+ imap.openBox("INBOX", false, (err) => {
482
+ if (err) {
483
+ imap.end();
484
+ reject(err);
485
+ return;
486
+ }
487
+ imap.copy([uid], label, (err) => {
488
+ imap.end();
489
+ if (err) {
490
+ reject(err);
491
+ }
492
+ else {
493
+ resolve(true);
494
+ }
495
+ });
496
+ });
497
+ });
498
+ }
499
+ // Download attachment from email
500
+ async downloadAttachment(uid, filename) {
501
+ return this.runImapOperation((imap, resolve, reject) => {
502
+ imap.openBox("INBOX", true, (err) => {
503
+ if (err) {
504
+ imap.end();
505
+ reject(err);
506
+ return;
507
+ }
508
+ const fetch = imap.fetch([uid], { bodies: "" });
509
+ fetch.on("message", (msg) => {
510
+ let attachmentData = null;
511
+ msg.on("body", (stream) => {
512
+ simpleParser(stream, (err, parsed) => {
513
+ if (err) {
514
+ return;
515
+ }
516
+ // Find the attachment by filename
517
+ const attachment = (parsed.attachments || []).find((att) => att.filename === filename || att.filename?.toLowerCase() === filename.toLowerCase());
518
+ if (attachment) {
519
+ attachmentData = {
520
+ filename: attachment.filename || "unknown",
521
+ contentType: attachment.contentType || "application/octet-stream",
522
+ size: attachment.size || 0,
523
+ content: attachment.content.toString("base64"),
524
+ };
525
+ }
526
+ });
527
+ });
528
+ msg.once("end", () => {
529
+ // Wait a bit for parsing to complete
530
+ setTimeout(() => {
531
+ imap.end();
532
+ resolve(attachmentData);
533
+ }, 100);
534
+ });
535
+ });
536
+ fetch.once("error", (err) => {
537
+ imap.end();
538
+ reject(err);
539
+ });
540
+ fetch.once("end", () => {
541
+ // Handled in message end
542
+ });
543
+ });
544
+ });
545
+ }
546
+ // List all attachments from an email
547
+ async listAttachments(uid) {
548
+ return this.runImapOperation((imap, resolve, reject) => {
549
+ imap.openBox("INBOX", true, (err) => {
550
+ if (err) {
551
+ imap.end();
552
+ reject(err);
553
+ return;
554
+ }
555
+ const fetch = imap.fetch([uid], { bodies: "" });
556
+ fetch.on("message", (msg) => {
557
+ let attachments = [];
558
+ msg.on("body", (stream) => {
559
+ simpleParser(stream, (err, parsed) => {
560
+ if (err) {
561
+ return;
562
+ }
563
+ attachments = (parsed.attachments || []).map((att) => ({
564
+ filename: att.filename || "unknown",
565
+ contentType: att.contentType || "application/octet-stream",
566
+ size: att.size || 0,
567
+ }));
568
+ });
569
+ });
570
+ msg.once("end", () => {
571
+ // Wait a bit for parsing to complete
572
+ setTimeout(() => {
573
+ imap.end();
574
+ resolve(attachments);
575
+ }, 100);
576
+ });
577
+ });
578
+ fetch.once("error", (err) => {
579
+ imap.end();
580
+ reject(err);
581
+ });
582
+ fetch.once("end", () => {
583
+ // Handled in message end
584
+ });
585
+ });
586
+ });
587
+ }
588
+ // Close connections
589
+ async disconnect() {
590
+ if (this.smtpTransport) {
591
+ this.smtpTransport.close();
592
+ this.smtpTransport = null;
593
+ }
594
+ }
595
+ }
596
+ //# sourceMappingURL=gmail-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-client.js","sourceRoot":"","sources":["../src/gmail-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}