google-workspace-mcp-server 1.1.0 → 1.2.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,472 @@
1
+ import { getGmailClient, handleGoogleError } from "../services/google-auth.js";
2
+ import { ListMessagesSchema, GetMessageSchema, ListThreadsSchema, GetThreadSchema, ListLabelsSchema } from "../schemas/gmail.js";
3
+ import { ResponseFormat } from "../constants.js";
4
+ function getHeader(headers, name) {
5
+ const value = headers?.find(h => h.name?.toLowerCase() === name.toLowerCase())?.value;
6
+ return value ?? undefined;
7
+ }
8
+ function decodeBase64(data) {
9
+ return Buffer.from(data.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf-8");
10
+ }
11
+ function extractBody(payload) {
12
+ if (!payload)
13
+ return "";
14
+ if (payload.body?.data) {
15
+ return decodeBase64(payload.body.data);
16
+ }
17
+ if (payload.parts) {
18
+ // Prefer plain text
19
+ for (const part of payload.parts) {
20
+ if (part.mimeType === "text/plain" && part.body?.data) {
21
+ return decodeBase64(part.body.data);
22
+ }
23
+ }
24
+ // Fall back to HTML stripped
25
+ for (const part of payload.parts) {
26
+ if (part.mimeType === "text/html" && part.body?.data) {
27
+ const html = decodeBase64(part.body.data);
28
+ return html.replace(/<[^>]*>/g, "").replace(/\s+/g, " ").trim();
29
+ }
30
+ }
31
+ // Recurse into nested parts
32
+ for (const part of payload.parts) {
33
+ const nested = extractBody(part);
34
+ if (nested)
35
+ return nested;
36
+ }
37
+ }
38
+ return "";
39
+ }
40
+ function formatMessageForMarkdown(msg) {
41
+ const lines = [
42
+ `### ${msg.subject || "(no subject)"}`,
43
+ `- **From**: ${msg.from || "Unknown"}`,
44
+ `- **To**: ${msg.to || "Unknown"}`,
45
+ `- **Date**: ${msg.date || "Unknown"}`,
46
+ `- **ID**: \`${msg.id}\``
47
+ ];
48
+ if (msg.labels && msg.labels.length > 0) {
49
+ lines.push(`- **Labels**: ${msg.labels.join(", ")}`);
50
+ }
51
+ if (msg.snippet) {
52
+ lines.push(`- **Preview**: ${msg.snippet}`);
53
+ }
54
+ return lines.join("\n");
55
+ }
56
+ export function registerGmailTools(server) {
57
+ server.registerTool("gmail_list_messages", {
58
+ title: "List Gmail Messages",
59
+ description: `List messages from Gmail with optional search filters.
60
+
61
+ Args:
62
+ - query (string, optional): Gmail search query (e.g., 'from:boss@company.com is:unread', 'subject:invoice after:2024/01/01')
63
+ - max_results (number): Maximum messages to return, 1-100 (default: 10)
64
+ - label_ids (string[]): Filter by labels like 'INBOX', 'UNREAD', 'STARRED', 'SENT'
65
+ - page_token (string, optional): Token for pagination
66
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
67
+
68
+ Returns:
69
+ List of message summaries with ID, subject, from, date, and snippet.
70
+
71
+ Examples:
72
+ - Unread emails: query="is:unread"
73
+ - From specific sender: query="from:notifications@github.com"
74
+ - Recent with attachment: query="has:attachment newer_than:7d"`,
75
+ inputSchema: ListMessagesSchema,
76
+ annotations: {
77
+ readOnlyHint: true,
78
+ destructiveHint: false,
79
+ idempotentHint: true,
80
+ openWorldHint: true
81
+ }
82
+ }, async (params) => {
83
+ try {
84
+ const gmail = getGmailClient();
85
+ // Build params object, only including defined values
86
+ const listParams = {
87
+ userId: "me",
88
+ maxResults: params.max_results
89
+ };
90
+ if (params.query) {
91
+ listParams.q = params.query;
92
+ }
93
+ if (params.label_ids && params.label_ids.length > 0) {
94
+ listParams.labelIds = params.label_ids;
95
+ }
96
+ if (params.page_token) {
97
+ listParams.pageToken = params.page_token;
98
+ }
99
+ const response = await gmail.users.messages.list(listParams);
100
+ const messageIds = response.data.messages || [];
101
+ // Fetch details for each message
102
+ const messages = await Promise.all(messageIds.map(async (msg) => {
103
+ const detail = await gmail.users.messages.get({
104
+ userId: "me",
105
+ id: msg.id,
106
+ format: "metadata",
107
+ metadataHeaders: ["From", "To", "Subject", "Date"]
108
+ });
109
+ const headers = detail.data.payload?.headers;
110
+ return {
111
+ id: msg.id || "",
112
+ threadId: msg.threadId || "",
113
+ from: getHeader(headers, "From"),
114
+ to: getHeader(headers, "To"),
115
+ subject: getHeader(headers, "Subject"),
116
+ date: getHeader(headers, "Date"),
117
+ snippet: detail.data.snippet || "",
118
+ labels: detail.data.labelIds || []
119
+ };
120
+ }));
121
+ const output = {
122
+ messages,
123
+ result_count: messages.length,
124
+ next_page_token: response.data.nextPageToken || null
125
+ };
126
+ let textOutput;
127
+ if (params.response_format === ResponseFormat.MARKDOWN) {
128
+ if (messages.length === 0) {
129
+ textOutput = params.query
130
+ ? `No messages found matching "${params.query}".`
131
+ : "No messages found.";
132
+ }
133
+ else {
134
+ const lines = [
135
+ "# Gmail Messages",
136
+ "",
137
+ `Found ${messages.length} message(s)${output.next_page_token ? " (more available)" : ""}.`,
138
+ ""
139
+ ];
140
+ for (const msg of messages) {
141
+ lines.push(formatMessageForMarkdown(msg), "");
142
+ }
143
+ if (output.next_page_token) {
144
+ lines.push(`*Use page_token="${output.next_page_token}" to load more messages.*`);
145
+ }
146
+ textOutput = lines.join("\n");
147
+ }
148
+ }
149
+ else {
150
+ textOutput = JSON.stringify(output, null, 2);
151
+ }
152
+ return {
153
+ content: [{ type: "text", text: textOutput }],
154
+ structuredContent: output
155
+ };
156
+ }
157
+ catch (error) {
158
+ return {
159
+ content: [{ type: "text", text: handleGoogleError(error) }]
160
+ };
161
+ }
162
+ });
163
+ server.registerTool("gmail_get_message", {
164
+ title: "Get Gmail Message",
165
+ description: `Get the full content of a specific Gmail message.
166
+
167
+ Args:
168
+ - message_id (string): The message ID to retrieve
169
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
170
+
171
+ Returns:
172
+ Full message content including headers and body text.`,
173
+ inputSchema: GetMessageSchema,
174
+ annotations: {
175
+ readOnlyHint: true,
176
+ destructiveHint: false,
177
+ idempotentHint: true,
178
+ openWorldHint: true
179
+ }
180
+ }, async (params) => {
181
+ try {
182
+ const gmail = getGmailClient();
183
+ const response = await gmail.users.messages.get({
184
+ userId: "me",
185
+ id: params.message_id,
186
+ format: "full"
187
+ });
188
+ const headers = response.data.payload?.headers;
189
+ const body = extractBody(response.data.payload);
190
+ const output = {
191
+ id: response.data.id || "",
192
+ threadId: response.data.threadId || "",
193
+ from: getHeader(headers, "From"),
194
+ to: getHeader(headers, "To"),
195
+ cc: getHeader(headers, "Cc"),
196
+ subject: getHeader(headers, "Subject"),
197
+ date: getHeader(headers, "Date"),
198
+ labels: response.data.labelIds || [],
199
+ body
200
+ };
201
+ let textOutput;
202
+ if (params.response_format === ResponseFormat.MARKDOWN) {
203
+ textOutput = [
204
+ `# ${output.subject || "(no subject)"}`,
205
+ "",
206
+ `**From**: ${output.from || "Unknown"}`,
207
+ `**To**: ${output.to || "Unknown"}`,
208
+ output.cc ? `**CC**: ${output.cc}` : null,
209
+ `**Date**: ${output.date || "Unknown"}`,
210
+ `**Labels**: ${output.labels.join(", ") || "None"}`,
211
+ "",
212
+ "---",
213
+ "",
214
+ output.body || "(no body content)"
215
+ ].filter(line => line !== null).join("\n");
216
+ }
217
+ else {
218
+ textOutput = JSON.stringify(output, null, 2);
219
+ }
220
+ return {
221
+ content: [{ type: "text", text: textOutput }],
222
+ structuredContent: output
223
+ };
224
+ }
225
+ catch (error) {
226
+ return {
227
+ content: [{ type: "text", text: handleGoogleError(error) }]
228
+ };
229
+ }
230
+ });
231
+ server.registerTool("gmail_list_threads", {
232
+ title: "List Gmail Threads",
233
+ description: `List conversation threads from Gmail.
234
+
235
+ Args:
236
+ - query (string, optional): Gmail search query to filter threads
237
+ - max_results (number): Maximum threads to return, 1-100 (default: 10)
238
+ - label_ids (string[]): Filter by labels
239
+ - page_token (string, optional): Token for pagination
240
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
241
+
242
+ Returns:
243
+ List of threads with message count and snippet.`,
244
+ inputSchema: ListThreadsSchema,
245
+ annotations: {
246
+ readOnlyHint: true,
247
+ destructiveHint: false,
248
+ idempotentHint: true,
249
+ openWorldHint: true
250
+ }
251
+ }, async (params) => {
252
+ try {
253
+ const gmail = getGmailClient();
254
+ // Build params object, only including defined values
255
+ const listParams = {
256
+ userId: "me",
257
+ maxResults: params.max_results
258
+ };
259
+ if (params.query) {
260
+ listParams.q = params.query;
261
+ }
262
+ if (params.label_ids && params.label_ids.length > 0) {
263
+ listParams.labelIds = params.label_ids;
264
+ }
265
+ if (params.page_token) {
266
+ listParams.pageToken = params.page_token;
267
+ }
268
+ const response = await gmail.users.threads.list(listParams);
269
+ const threadIds = response.data.threads || [];
270
+ // Fetch details for each thread
271
+ const threads = await Promise.all(threadIds.map(async (thread) => {
272
+ const detail = await gmail.users.threads.get({
273
+ userId: "me",
274
+ id: thread.id,
275
+ format: "metadata",
276
+ metadataHeaders: ["From", "Subject", "Date"]
277
+ });
278
+ const firstMessage = detail.data.messages?.[0];
279
+ const lastMessage = detail.data.messages?.[detail.data.messages.length - 1];
280
+ const headers = firstMessage?.payload?.headers;
281
+ return {
282
+ id: thread.id || "",
283
+ subject: getHeader(headers, "Subject") || "(no subject)",
284
+ from: getHeader(headers, "From") || "Unknown",
285
+ date: getHeader(lastMessage?.payload?.headers, "Date") || "",
286
+ snippet: thread.snippet || "",
287
+ messageCount: detail.data.messages?.length || 0
288
+ };
289
+ }));
290
+ const output = {
291
+ threads,
292
+ result_count: threads.length,
293
+ next_page_token: response.data.nextPageToken || null
294
+ };
295
+ let textOutput;
296
+ if (params.response_format === ResponseFormat.MARKDOWN) {
297
+ if (threads.length === 0) {
298
+ textOutput = "No threads found.";
299
+ }
300
+ else {
301
+ const lines = [
302
+ "# Gmail Threads",
303
+ "",
304
+ `Found ${threads.length} thread(s)${output.next_page_token ? " (more available)" : ""}.`,
305
+ ""
306
+ ];
307
+ for (const thread of threads) {
308
+ lines.push(`### ${thread.subject}`, `- **From**: ${thread.from}`, `- **Messages**: ${thread.messageCount}`, `- **Last activity**: ${thread.date}`, `- **ID**: \`${thread.id}\``, `- **Preview**: ${thread.snippet}`, "");
309
+ }
310
+ if (output.next_page_token) {
311
+ lines.push(`*Use page_token="${output.next_page_token}" to load more threads.*`);
312
+ }
313
+ textOutput = lines.join("\n");
314
+ }
315
+ }
316
+ else {
317
+ textOutput = JSON.stringify(output, null, 2);
318
+ }
319
+ return {
320
+ content: [{ type: "text", text: textOutput }],
321
+ structuredContent: output
322
+ };
323
+ }
324
+ catch (error) {
325
+ return {
326
+ content: [{ type: "text", text: handleGoogleError(error) }]
327
+ };
328
+ }
329
+ });
330
+ server.registerTool("gmail_get_thread", {
331
+ title: "Get Gmail Thread",
332
+ description: `Get all messages in a conversation thread.
333
+
334
+ Args:
335
+ - thread_id (string): The thread ID to retrieve
336
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
337
+
338
+ Returns:
339
+ All messages in the thread with full content.`,
340
+ inputSchema: GetThreadSchema,
341
+ annotations: {
342
+ readOnlyHint: true,
343
+ destructiveHint: false,
344
+ idempotentHint: true,
345
+ openWorldHint: true
346
+ }
347
+ }, async (params) => {
348
+ try {
349
+ const gmail = getGmailClient();
350
+ const response = await gmail.users.threads.get({
351
+ userId: "me",
352
+ id: params.thread_id,
353
+ format: "full"
354
+ });
355
+ const messages = (response.data.messages || []).map(msg => {
356
+ const headers = msg.payload?.headers;
357
+ return {
358
+ id: msg.id || "",
359
+ from: getHeader(headers, "From"),
360
+ to: getHeader(headers, "To"),
361
+ subject: getHeader(headers, "Subject"),
362
+ date: getHeader(headers, "Date"),
363
+ body: extractBody(msg.payload)
364
+ };
365
+ });
366
+ const output = {
367
+ id: response.data.id || "",
368
+ messageCount: messages.length,
369
+ messages
370
+ };
371
+ let textOutput;
372
+ if (params.response_format === ResponseFormat.MARKDOWN) {
373
+ const firstSubject = messages[0]?.subject || "(no subject)";
374
+ const lines = [
375
+ `# Thread: ${firstSubject}`,
376
+ "",
377
+ `${messages.length} message(s) in this thread.`,
378
+ ""
379
+ ];
380
+ for (let i = 0; i < messages.length; i++) {
381
+ const msg = messages[i];
382
+ lines.push(`## Message ${i + 1}`, "", `**From**: ${msg.from || "Unknown"}`, `**To**: ${msg.to || "Unknown"}`, `**Date**: ${msg.date || "Unknown"}`, "", msg.body || "(no body content)", "", "---", "");
383
+ }
384
+ textOutput = lines.join("\n");
385
+ }
386
+ else {
387
+ textOutput = JSON.stringify(output, null, 2);
388
+ }
389
+ return {
390
+ content: [{ type: "text", text: textOutput }],
391
+ structuredContent: output
392
+ };
393
+ }
394
+ catch (error) {
395
+ return {
396
+ content: [{ type: "text", text: handleGoogleError(error) }]
397
+ };
398
+ }
399
+ });
400
+ server.registerTool("gmail_list_labels", {
401
+ title: "List Gmail Labels",
402
+ description: `List all labels (folders) in Gmail.
403
+
404
+ Args:
405
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
406
+
407
+ Returns:
408
+ List of all labels with their IDs and types.`,
409
+ inputSchema: ListLabelsSchema,
410
+ annotations: {
411
+ readOnlyHint: true,
412
+ destructiveHint: false,
413
+ idempotentHint: true,
414
+ openWorldHint: true
415
+ }
416
+ }, async (params) => {
417
+ try {
418
+ const gmail = getGmailClient();
419
+ const response = await gmail.users.labels.list({
420
+ userId: "me"
421
+ });
422
+ const labels = (response.data.labels || []).map(label => ({
423
+ id: label.id || "",
424
+ name: label.name || "",
425
+ type: label.type || "user"
426
+ }));
427
+ // Sort: system labels first, then user labels alphabetically
428
+ labels.sort((a, b) => {
429
+ if (a.type === "system" && b.type !== "system")
430
+ return -1;
431
+ if (a.type !== "system" && b.type === "system")
432
+ return 1;
433
+ return a.name.localeCompare(b.name);
434
+ });
435
+ const output = { labels };
436
+ let textOutput;
437
+ if (params.response_format === ResponseFormat.MARKDOWN) {
438
+ const systemLabels = labels.filter(l => l.type === "system");
439
+ const userLabels = labels.filter(l => l.type !== "system");
440
+ const lines = [
441
+ "# Gmail Labels",
442
+ "",
443
+ "## System Labels",
444
+ ""
445
+ ];
446
+ for (const label of systemLabels) {
447
+ lines.push(`- **${label.name}** (\`${label.id}\`)`);
448
+ }
449
+ if (userLabels.length > 0) {
450
+ lines.push("", "## User Labels", "");
451
+ for (const label of userLabels) {
452
+ lines.push(`- **${label.name}** (\`${label.id}\`)`);
453
+ }
454
+ }
455
+ textOutput = lines.join("\n");
456
+ }
457
+ else {
458
+ textOutput = JSON.stringify(output, null, 2);
459
+ }
460
+ return {
461
+ content: [{ type: "text", text: textOutput }],
462
+ structuredContent: output
463
+ };
464
+ }
465
+ catch (error) {
466
+ return {
467
+ content: [{ type: "text", text: handleGoogleError(error) }]
468
+ };
469
+ }
470
+ });
471
+ }
472
+ //# sourceMappingURL=gmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/tools/gmail.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -38,4 +38,51 @@ export interface FileData {
38
38
  webViewLink?: string;
39
39
  owners?: string[];
40
40
  }
41
+ export interface MessageData {
42
+ id: string;
43
+ threadId: string;
44
+ from?: string;
45
+ to?: string;
46
+ subject?: string;
47
+ date?: string;
48
+ snippet?: string;
49
+ labels?: string[];
50
+ body?: string;
51
+ }
52
+ export interface ThreadData {
53
+ id: string;
54
+ subject: string;
55
+ from: string;
56
+ date: string;
57
+ snippet: string;
58
+ messageCount: number;
59
+ }
60
+ export interface LabelData {
61
+ id: string;
62
+ name: string;
63
+ type: string;
64
+ }
65
+ export interface CalendarData {
66
+ id: string;
67
+ summary: string;
68
+ description?: string;
69
+ primary: boolean;
70
+ accessRole: string;
71
+ backgroundColor?: string;
72
+ }
73
+ export interface EventData {
74
+ id: string;
75
+ summary: string;
76
+ description?: string;
77
+ location?: string;
78
+ start: string;
79
+ end: string;
80
+ startFormatted: string;
81
+ endFormatted: string;
82
+ status: string;
83
+ htmlLink?: string;
84
+ attendees?: string[];
85
+ organizer?: string;
86
+ isAllDay?: boolean;
87
+ }
41
88
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "google-workspace-mcp-server",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server for Google Workspace API integration (Docs, Sheets, and Drive Comments)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",