google-workspace-mcp-server 1.1.1 → 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,323 @@
1
+ import { getCalendarClient, handleGoogleError } from "../services/google-auth.js";
2
+ import { ListCalendarsSchema, ListEventsSchema, GetEventSchema } from "../schemas/calendar.js";
3
+ import { ResponseFormat } from "../constants.js";
4
+ function formatDateTime(dateTime, date) {
5
+ if (dateTime) {
6
+ const d = new Date(dateTime);
7
+ return d.toLocaleString();
8
+ }
9
+ if (date) {
10
+ return `${date} (all day)`;
11
+ }
12
+ return "Unknown";
13
+ }
14
+ function formatEventForMarkdown(event) {
15
+ const lines = [
16
+ `### ${event.summary || "(no title)"}`,
17
+ `- **When**: ${event.startFormatted} → ${event.endFormatted}`,
18
+ `- **ID**: \`${event.id}\``
19
+ ];
20
+ if (event.location) {
21
+ lines.push(`- **Location**: ${event.location}`);
22
+ }
23
+ if (event.status && event.status !== "confirmed") {
24
+ lines.push(`- **Status**: ${event.status}`);
25
+ }
26
+ if (event.attendees && event.attendees.length > 0) {
27
+ lines.push(`- **Attendees**: ${event.attendees.join(", ")}`);
28
+ }
29
+ if (event.description) {
30
+ const shortDesc = event.description.length > 200
31
+ ? event.description.substring(0, 200) + "..."
32
+ : event.description;
33
+ lines.push(`- **Description**: ${shortDesc}`);
34
+ }
35
+ return lines.join("\n");
36
+ }
37
+ export function registerCalendarTools(server) {
38
+ server.registerTool("calendar_list_calendars", {
39
+ title: "List Calendars",
40
+ description: `List all calendars accessible to the user.
41
+
42
+ Args:
43
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
44
+
45
+ Returns:
46
+ List of calendars with their IDs, names, and access roles.`,
47
+ inputSchema: ListCalendarsSchema,
48
+ annotations: {
49
+ readOnlyHint: true,
50
+ destructiveHint: false,
51
+ idempotentHint: true,
52
+ openWorldHint: true
53
+ }
54
+ }, async (params) => {
55
+ try {
56
+ const calendar = getCalendarClient();
57
+ const response = await calendar.calendarList.list();
58
+ const calendars = (response.data.items || []).map(cal => ({
59
+ id: cal.id || "",
60
+ summary: cal.summary || "",
61
+ description: cal.description || undefined,
62
+ primary: cal.primary || false,
63
+ accessRole: cal.accessRole || "reader",
64
+ backgroundColor: cal.backgroundColor || undefined
65
+ }));
66
+ // Sort: primary first, then alphabetically
67
+ calendars.sort((a, b) => {
68
+ if (a.primary && !b.primary)
69
+ return -1;
70
+ if (!a.primary && b.primary)
71
+ return 1;
72
+ return a.summary.localeCompare(b.summary);
73
+ });
74
+ const output = { calendars };
75
+ let textOutput;
76
+ if (params.response_format === ResponseFormat.MARKDOWN) {
77
+ const lines = [
78
+ "# Your Calendars",
79
+ "",
80
+ `Found ${calendars.length} calendar(s).`,
81
+ ""
82
+ ];
83
+ for (const cal of calendars) {
84
+ lines.push(`### ${cal.summary}${cal.primary ? " ⭐ (Primary)" : ""}`, `- **ID**: \`${cal.id}\``, `- **Access**: ${cal.accessRole}`);
85
+ if (cal.description) {
86
+ lines.push(`- **Description**: ${cal.description}`);
87
+ }
88
+ lines.push("");
89
+ }
90
+ textOutput = lines.join("\n");
91
+ }
92
+ else {
93
+ textOutput = JSON.stringify(output, null, 2);
94
+ }
95
+ return {
96
+ content: [{ type: "text", text: textOutput }],
97
+ structuredContent: output
98
+ };
99
+ }
100
+ catch (error) {
101
+ return {
102
+ content: [{ type: "text", text: handleGoogleError(error) }]
103
+ };
104
+ }
105
+ });
106
+ server.registerTool("calendar_list_events", {
107
+ title: "List Calendar Events",
108
+ description: `List events from a calendar within an optional time range.
109
+
110
+ Args:
111
+ - calendar_id (string): Calendar ID (default: 'primary' for main calendar)
112
+ - time_min (string, optional): Start of time range in ISO 8601 format (e.g., '2024-01-01T00:00:00Z')
113
+ - time_max (string, optional): End of time range in ISO 8601 format
114
+ - max_results (number): Maximum events to return, 1-250 (default: 10)
115
+ - query (string, optional): Free text search to filter events
116
+ - single_events (boolean): Expand recurring events into instances (default: true)
117
+ - order_by ('startTime' | 'updated'): Sort order (default: 'startTime')
118
+ - page_token (string, optional): Token for pagination
119
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
120
+
121
+ Returns:
122
+ List of events with title, time, location, and attendees.
123
+
124
+ Examples:
125
+ - Today's events: time_min="2024-01-15T00:00:00Z", time_max="2024-01-16T00:00:00Z"
126
+ - Search meetings: query="standup"
127
+ - Next 7 days: time_min=(now), time_max=(now + 7 days)`,
128
+ inputSchema: ListEventsSchema,
129
+ annotations: {
130
+ readOnlyHint: true,
131
+ destructiveHint: false,
132
+ idempotentHint: true,
133
+ openWorldHint: true
134
+ }
135
+ }, async (params) => {
136
+ try {
137
+ const calendar = getCalendarClient();
138
+ // Default to showing future events if no time range specified
139
+ const timeMin = params.time_min || new Date().toISOString();
140
+ const response = await calendar.events.list({
141
+ calendarId: params.calendar_id,
142
+ timeMin,
143
+ timeMax: params.time_max,
144
+ maxResults: params.max_results,
145
+ q: params.query,
146
+ singleEvents: params.single_events,
147
+ orderBy: params.order_by,
148
+ pageToken: params.page_token
149
+ });
150
+ const events = (response.data.items || []).map(event => ({
151
+ id: event.id || "",
152
+ summary: event.summary || "(no title)",
153
+ description: event.description || undefined,
154
+ location: event.location || undefined,
155
+ start: event.start?.dateTime || event.start?.date || "",
156
+ end: event.end?.dateTime || event.end?.date || "",
157
+ startFormatted: formatDateTime(event.start?.dateTime, event.start?.date),
158
+ endFormatted: formatDateTime(event.end?.dateTime, event.end?.date),
159
+ status: event.status || "confirmed",
160
+ htmlLink: event.htmlLink || undefined,
161
+ attendees: event.attendees?.map(a => a.email || a.displayName || "Unknown") || [],
162
+ organizer: event.organizer?.email || event.organizer?.displayName || undefined,
163
+ isAllDay: !event.start?.dateTime
164
+ }));
165
+ const output = {
166
+ events,
167
+ result_count: events.length,
168
+ next_page_token: response.data.nextPageToken || null
169
+ };
170
+ let textOutput;
171
+ if (params.response_format === ResponseFormat.MARKDOWN) {
172
+ if (events.length === 0) {
173
+ textOutput = params.query
174
+ ? `No events found matching "${params.query}".`
175
+ : "No events found in the specified time range.";
176
+ }
177
+ else {
178
+ const lines = [
179
+ "# Calendar Events",
180
+ "",
181
+ `Found ${events.length} event(s)${output.next_page_token ? " (more available)" : ""}.`,
182
+ ""
183
+ ];
184
+ for (const event of events) {
185
+ lines.push(formatEventForMarkdown(event), "");
186
+ }
187
+ if (output.next_page_token) {
188
+ lines.push(`*Use page_token="${output.next_page_token}" to load more events.*`);
189
+ }
190
+ textOutput = lines.join("\n");
191
+ }
192
+ }
193
+ else {
194
+ textOutput = JSON.stringify(output, null, 2);
195
+ }
196
+ return {
197
+ content: [{ type: "text", text: textOutput }],
198
+ structuredContent: output
199
+ };
200
+ }
201
+ catch (error) {
202
+ return {
203
+ content: [{ type: "text", text: handleGoogleError(error) }]
204
+ };
205
+ }
206
+ });
207
+ server.registerTool("calendar_get_event", {
208
+ title: "Get Calendar Event",
209
+ description: `Get detailed information about a specific calendar event.
210
+
211
+ Args:
212
+ - calendar_id (string): Calendar ID (default: 'primary')
213
+ - event_id (string): The event ID to retrieve
214
+ - response_format ('markdown' | 'json'): Output format (default: 'markdown')
215
+
216
+ Returns:
217
+ Full event details including description, attendees, and conference info.`,
218
+ inputSchema: GetEventSchema,
219
+ annotations: {
220
+ readOnlyHint: true,
221
+ destructiveHint: false,
222
+ idempotentHint: true,
223
+ openWorldHint: true
224
+ }
225
+ }, async (params) => {
226
+ try {
227
+ const calendar = getCalendarClient();
228
+ const response = await calendar.events.get({
229
+ calendarId: params.calendar_id,
230
+ eventId: params.event_id
231
+ });
232
+ const event = response.data;
233
+ const output = {
234
+ id: event.id || "",
235
+ summary: event.summary || "(no title)",
236
+ description: event.description || undefined,
237
+ location: event.location || undefined,
238
+ start: event.start?.dateTime || event.start?.date || "",
239
+ end: event.end?.dateTime || event.end?.date || "",
240
+ startFormatted: formatDateTime(event.start?.dateTime, event.start?.date),
241
+ endFormatted: formatDateTime(event.end?.dateTime, event.end?.date),
242
+ status: event.status || "confirmed",
243
+ htmlLink: event.htmlLink || undefined,
244
+ attendees: event.attendees?.map(a => ({
245
+ email: a.email || "",
246
+ displayName: a.displayName || undefined,
247
+ responseStatus: a.responseStatus || "needsAction",
248
+ organizer: a.organizer || false
249
+ })) || [],
250
+ organizer: {
251
+ email: event.organizer?.email || "",
252
+ displayName: event.organizer?.displayName || undefined
253
+ },
254
+ created: event.created || undefined,
255
+ updated: event.updated || undefined,
256
+ recurrence: event.recurrence || undefined,
257
+ conferenceData: event.conferenceData ? {
258
+ type: event.conferenceData.conferenceSolution?.name || "Unknown",
259
+ entryPoints: event.conferenceData.entryPoints?.map(ep => ({
260
+ type: ep.entryPointType || "",
261
+ uri: ep.uri || ""
262
+ })) || []
263
+ } : undefined
264
+ };
265
+ let textOutput;
266
+ if (params.response_format === ResponseFormat.MARKDOWN) {
267
+ const lines = [
268
+ `# ${output.summary}`,
269
+ "",
270
+ `**When**: ${output.startFormatted} → ${output.endFormatted}`,
271
+ `**Status**: ${output.status}`
272
+ ];
273
+ if (output.location) {
274
+ lines.push(`**Location**: ${output.location}`);
275
+ }
276
+ if (output.organizer.email) {
277
+ lines.push(`**Organizer**: ${output.organizer.displayName || output.organizer.email}`);
278
+ }
279
+ if (output.htmlLink) {
280
+ lines.push(`**Link**: ${output.htmlLink}`);
281
+ }
282
+ if (output.conferenceData) {
283
+ lines.push("", "## Conference Info", "");
284
+ lines.push(`**Type**: ${output.conferenceData.type}`);
285
+ for (const ep of output.conferenceData.entryPoints) {
286
+ lines.push(`- ${ep.type}: ${ep.uri}`);
287
+ }
288
+ }
289
+ if (output.attendees.length > 0) {
290
+ lines.push("", "## Attendees", "");
291
+ for (const attendee of output.attendees) {
292
+ const status = attendee.responseStatus === "accepted" ? "✓" :
293
+ attendee.responseStatus === "declined" ? "✗" :
294
+ attendee.responseStatus === "tentative" ? "?" : "•";
295
+ const name = attendee.displayName || attendee.email;
296
+ const role = attendee.organizer ? " (organizer)" : "";
297
+ lines.push(`- ${status} ${name}${role}`);
298
+ }
299
+ }
300
+ if (output.description) {
301
+ lines.push("", "## Description", "", output.description);
302
+ }
303
+ if (output.recurrence) {
304
+ lines.push("", "## Recurrence", "", output.recurrence.join("\n"));
305
+ }
306
+ textOutput = lines.join("\n");
307
+ }
308
+ else {
309
+ textOutput = JSON.stringify(output, null, 2);
310
+ }
311
+ return {
312
+ content: [{ type: "text", text: textOutput }],
313
+ structuredContent: output
314
+ };
315
+ }
316
+ catch (error) {
317
+ return {
318
+ content: [{ type: "text", text: handleGoogleError(error) }]
319
+ };
320
+ }
321
+ });
322
+ }
323
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/tools/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGmailTools(server: McpServer): void;
3
+ //# sourceMappingURL=gmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/tools/gmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8EzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqf1D"}