@node2flow/google-calendar-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.
@@ -0,0 +1,475 @@
1
+ /**
2
+ * Google Calendar API v3 Client — OAuth 2.0 refresh token pattern
3
+ */
4
+ export class CalendarClient {
5
+ config;
6
+ accessToken = null;
7
+ tokenExpiry = 0;
8
+ static BASE = 'https://www.googleapis.com/calendar/v3';
9
+ static TOKEN_URL = 'https://oauth2.googleapis.com/token';
10
+ constructor(config) {
11
+ this.config = config;
12
+ }
13
+ // ========== OAuth ==========
14
+ async getAccessToken() {
15
+ if (this.accessToken && Date.now() < this.tokenExpiry) {
16
+ return this.accessToken;
17
+ }
18
+ const res = await fetch(CalendarClient.TOKEN_URL, {
19
+ method: 'POST',
20
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
21
+ body: new URLSearchParams({
22
+ client_id: this.config.clientId,
23
+ client_secret: this.config.clientSecret,
24
+ refresh_token: this.config.refreshToken,
25
+ grant_type: 'refresh_token',
26
+ }),
27
+ });
28
+ if (!res.ok) {
29
+ const text = await res.text();
30
+ throw new Error(`Token refresh failed (${res.status}): ${text}`);
31
+ }
32
+ const data = (await res.json());
33
+ this.accessToken = data.access_token;
34
+ this.tokenExpiry = Date.now() + (data.expires_in - 60) * 1000;
35
+ return this.accessToken;
36
+ }
37
+ async request(path, options = {}) {
38
+ const token = await this.getAccessToken();
39
+ const url = `${CalendarClient.BASE}${path}`;
40
+ const res = await fetch(url, {
41
+ ...options,
42
+ headers: {
43
+ Authorization: `Bearer ${token}`,
44
+ 'Content-Type': 'application/json',
45
+ ...options.headers,
46
+ },
47
+ });
48
+ if (!res.ok) {
49
+ const text = await res.text();
50
+ throw new Error(`Calendar API error (${res.status}): ${text}`);
51
+ }
52
+ const contentType = res.headers.get('content-type') || '';
53
+ if (contentType.includes('application/json')) {
54
+ return res.json();
55
+ }
56
+ return {};
57
+ }
58
+ // ========== Events (10) ==========
59
+ async listEvents(opts) {
60
+ const params = new URLSearchParams();
61
+ if (opts.timeMin)
62
+ params.set('timeMin', opts.timeMin);
63
+ if (opts.timeMax)
64
+ params.set('timeMax', opts.timeMax);
65
+ if (opts.q)
66
+ params.set('q', opts.q);
67
+ if (opts.maxResults)
68
+ params.set('maxResults', String(opts.maxResults));
69
+ if (opts.pageToken)
70
+ params.set('pageToken', opts.pageToken);
71
+ if (opts.singleEvents !== undefined)
72
+ params.set('singleEvents', String(opts.singleEvents));
73
+ if (opts.orderBy)
74
+ params.set('orderBy', opts.orderBy);
75
+ if (opts.timeZone)
76
+ params.set('timeZone', opts.timeZone);
77
+ if (opts.showDeleted !== undefined)
78
+ params.set('showDeleted', String(opts.showDeleted));
79
+ const qs = params.toString();
80
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events${qs ? `?${qs}` : ''}`);
81
+ }
82
+ async getEvent(opts) {
83
+ const params = new URLSearchParams();
84
+ if (opts.timeZone)
85
+ params.set('timeZone', opts.timeZone);
86
+ const qs = params.toString();
87
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}${qs ? `?${qs}` : ''}`);
88
+ }
89
+ async createEvent(opts) {
90
+ const payload = {};
91
+ if (opts.summary)
92
+ payload.summary = opts.summary;
93
+ if (opts.description)
94
+ payload.description = opts.description;
95
+ if (opts.location)
96
+ payload.location = opts.location;
97
+ if (opts.colorId)
98
+ payload.colorId = opts.colorId;
99
+ if (opts.visibility)
100
+ payload.visibility = opts.visibility;
101
+ if (opts.transparency)
102
+ payload.transparency = opts.transparency;
103
+ if (opts.recurrence)
104
+ payload.recurrence = opts.recurrence;
105
+ // Start time
106
+ if (opts.startDate) {
107
+ payload.start = { date: opts.startDate };
108
+ }
109
+ else if (opts.startDateTime) {
110
+ const start = { dateTime: opts.startDateTime };
111
+ if (opts.startTimeZone)
112
+ start.timeZone = opts.startTimeZone;
113
+ payload.start = start;
114
+ }
115
+ // End time
116
+ if (opts.endDate) {
117
+ payload.end = { date: opts.endDate };
118
+ }
119
+ else if (opts.endDateTime) {
120
+ const end = { dateTime: opts.endDateTime };
121
+ if (opts.endTimeZone)
122
+ end.timeZone = opts.endTimeZone;
123
+ payload.end = end;
124
+ }
125
+ if (opts.attendees) {
126
+ payload.attendees = opts.attendees.map(email => ({ email }));
127
+ }
128
+ if (opts.reminders) {
129
+ payload.reminders = opts.reminders;
130
+ }
131
+ const params = new URLSearchParams();
132
+ if (opts.sendUpdates)
133
+ params.set('sendUpdates', opts.sendUpdates);
134
+ if (opts.conferenceDataVersion !== undefined)
135
+ params.set('conferenceDataVersion', String(opts.conferenceDataVersion));
136
+ const qs = params.toString();
137
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events${qs ? `?${qs}` : ''}`, {
138
+ method: 'POST',
139
+ body: JSON.stringify(payload),
140
+ });
141
+ }
142
+ async updateEvent(opts) {
143
+ const payload = {};
144
+ if (opts.summary !== undefined)
145
+ payload.summary = opts.summary;
146
+ if (opts.description !== undefined)
147
+ payload.description = opts.description;
148
+ if (opts.location !== undefined)
149
+ payload.location = opts.location;
150
+ if (opts.colorId !== undefined)
151
+ payload.colorId = opts.colorId;
152
+ if (opts.visibility !== undefined)
153
+ payload.visibility = opts.visibility;
154
+ if (opts.transparency !== undefined)
155
+ payload.transparency = opts.transparency;
156
+ if (opts.recurrence !== undefined)
157
+ payload.recurrence = opts.recurrence;
158
+ if (opts.startDate) {
159
+ payload.start = { date: opts.startDate };
160
+ }
161
+ else if (opts.startDateTime) {
162
+ const start = { dateTime: opts.startDateTime };
163
+ if (opts.startTimeZone)
164
+ start.timeZone = opts.startTimeZone;
165
+ payload.start = start;
166
+ }
167
+ if (opts.endDate) {
168
+ payload.end = { date: opts.endDate };
169
+ }
170
+ else if (opts.endDateTime) {
171
+ const end = { dateTime: opts.endDateTime };
172
+ if (opts.endTimeZone)
173
+ end.timeZone = opts.endTimeZone;
174
+ payload.end = end;
175
+ }
176
+ if (opts.attendees) {
177
+ payload.attendees = opts.attendees.map(email => ({ email }));
178
+ }
179
+ if (opts.reminders) {
180
+ payload.reminders = opts.reminders;
181
+ }
182
+ const params = new URLSearchParams();
183
+ if (opts.sendUpdates)
184
+ params.set('sendUpdates', opts.sendUpdates);
185
+ const qs = params.toString();
186
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}${qs ? `?${qs}` : ''}`, {
187
+ method: 'PUT',
188
+ body: JSON.stringify(payload),
189
+ });
190
+ }
191
+ async patchEvent(opts) {
192
+ const payload = {};
193
+ if (opts.summary !== undefined)
194
+ payload.summary = opts.summary;
195
+ if (opts.description !== undefined)
196
+ payload.description = opts.description;
197
+ if (opts.location !== undefined)
198
+ payload.location = opts.location;
199
+ if (opts.colorId !== undefined)
200
+ payload.colorId = opts.colorId;
201
+ if (opts.visibility !== undefined)
202
+ payload.visibility = opts.visibility;
203
+ if (opts.transparency !== undefined)
204
+ payload.transparency = opts.transparency;
205
+ if (opts.startDate) {
206
+ payload.start = { date: opts.startDate };
207
+ }
208
+ else if (opts.startDateTime) {
209
+ const start = { dateTime: opts.startDateTime };
210
+ if (opts.startTimeZone)
211
+ start.timeZone = opts.startTimeZone;
212
+ payload.start = start;
213
+ }
214
+ if (opts.endDate) {
215
+ payload.end = { date: opts.endDate };
216
+ }
217
+ else if (opts.endDateTime) {
218
+ const end = { dateTime: opts.endDateTime };
219
+ if (opts.endTimeZone)
220
+ end.timeZone = opts.endTimeZone;
221
+ payload.end = end;
222
+ }
223
+ if (opts.attendees) {
224
+ payload.attendees = opts.attendees.map(email => ({ email }));
225
+ }
226
+ const params = new URLSearchParams();
227
+ if (opts.sendUpdates)
228
+ params.set('sendUpdates', opts.sendUpdates);
229
+ const qs = params.toString();
230
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}${qs ? `?${qs}` : ''}`, {
231
+ method: 'PATCH',
232
+ body: JSON.stringify(payload),
233
+ });
234
+ }
235
+ async deleteEvent(opts) {
236
+ const params = new URLSearchParams();
237
+ if (opts.sendUpdates)
238
+ params.set('sendUpdates', opts.sendUpdates);
239
+ const qs = params.toString();
240
+ await this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}${qs ? `?${qs}` : ''}`, {
241
+ method: 'DELETE',
242
+ });
243
+ }
244
+ async quickAdd(opts) {
245
+ const params = new URLSearchParams({ text: opts.text });
246
+ if (opts.sendUpdates)
247
+ params.set('sendUpdates', opts.sendUpdates);
248
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/quickAdd?${params.toString()}`, {
249
+ method: 'POST',
250
+ });
251
+ }
252
+ async moveEvent(opts) {
253
+ const params = new URLSearchParams({ destination: opts.destination });
254
+ if (opts.sendUpdates)
255
+ params.set('sendUpdates', opts.sendUpdates);
256
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}/move?${params.toString()}`, {
257
+ method: 'POST',
258
+ });
259
+ }
260
+ async listInstances(opts) {
261
+ const params = new URLSearchParams();
262
+ if (opts.timeMin)
263
+ params.set('timeMin', opts.timeMin);
264
+ if (opts.timeMax)
265
+ params.set('timeMax', opts.timeMax);
266
+ if (opts.maxResults)
267
+ params.set('maxResults', String(opts.maxResults));
268
+ if (opts.pageToken)
269
+ params.set('pageToken', opts.pageToken);
270
+ if (opts.timeZone)
271
+ params.set('timeZone', opts.timeZone);
272
+ const qs = params.toString();
273
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/${encodeURIComponent(opts.eventId)}/instances${qs ? `?${qs}` : ''}`);
274
+ }
275
+ async importEvent(opts) {
276
+ const payload = {
277
+ iCalUID: opts.iCalUID,
278
+ };
279
+ if (opts.summary)
280
+ payload.summary = opts.summary;
281
+ if (opts.description)
282
+ payload.description = opts.description;
283
+ if (opts.location)
284
+ payload.location = opts.location;
285
+ if (opts.startDate) {
286
+ payload.start = { date: opts.startDate };
287
+ }
288
+ else if (opts.startDateTime) {
289
+ const start = { dateTime: opts.startDateTime };
290
+ if (opts.startTimeZone)
291
+ start.timeZone = opts.startTimeZone;
292
+ payload.start = start;
293
+ }
294
+ if (opts.endDate) {
295
+ payload.end = { date: opts.endDate };
296
+ }
297
+ else if (opts.endDateTime) {
298
+ const end = { dateTime: opts.endDateTime };
299
+ if (opts.endTimeZone)
300
+ end.timeZone = opts.endTimeZone;
301
+ payload.end = end;
302
+ }
303
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/events/import`, {
304
+ method: 'POST',
305
+ body: JSON.stringify(payload),
306
+ });
307
+ }
308
+ // ========== CalendarList (5) ==========
309
+ async listCalendars(opts) {
310
+ const params = new URLSearchParams();
311
+ if (opts.maxResults)
312
+ params.set('maxResults', String(opts.maxResults));
313
+ if (opts.pageToken)
314
+ params.set('pageToken', opts.pageToken);
315
+ if (opts.showDeleted !== undefined)
316
+ params.set('showDeleted', String(opts.showDeleted));
317
+ if (opts.showHidden !== undefined)
318
+ params.set('showHidden', String(opts.showHidden));
319
+ const qs = params.toString();
320
+ return this.request(`/users/me/calendarList${qs ? `?${qs}` : ''}`);
321
+ }
322
+ async getCalendarEntry(opts) {
323
+ return this.request(`/users/me/calendarList/${encodeURIComponent(opts.calendarId)}`);
324
+ }
325
+ async addCalendar(opts) {
326
+ const payload = { id: opts.id };
327
+ if (opts.colorId)
328
+ payload.colorId = opts.colorId;
329
+ if (opts.summaryOverride)
330
+ payload.summaryOverride = opts.summaryOverride;
331
+ if (opts.hidden !== undefined)
332
+ payload.hidden = opts.hidden;
333
+ if (opts.selected !== undefined)
334
+ payload.selected = opts.selected;
335
+ return this.request('/users/me/calendarList', {
336
+ method: 'POST',
337
+ body: JSON.stringify(payload),
338
+ });
339
+ }
340
+ async updateCalendarEntry(opts) {
341
+ const payload = {};
342
+ if (opts.colorId !== undefined)
343
+ payload.colorId = opts.colorId;
344
+ if (opts.summaryOverride !== undefined)
345
+ payload.summaryOverride = opts.summaryOverride;
346
+ if (opts.hidden !== undefined)
347
+ payload.hidden = opts.hidden;
348
+ if (opts.selected !== undefined)
349
+ payload.selected = opts.selected;
350
+ if (opts.defaultReminders)
351
+ payload.defaultReminders = opts.defaultReminders;
352
+ return this.request(`/users/me/calendarList/${encodeURIComponent(opts.calendarId)}`, {
353
+ method: 'PUT',
354
+ body: JSON.stringify(payload),
355
+ });
356
+ }
357
+ async removeCalendar(opts) {
358
+ await this.request(`/users/me/calendarList/${encodeURIComponent(opts.calendarId)}`, {
359
+ method: 'DELETE',
360
+ });
361
+ }
362
+ // ========== Calendars (5) ==========
363
+ async getCalendar(opts) {
364
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}`);
365
+ }
366
+ async createCalendar(opts) {
367
+ const payload = { summary: opts.summary };
368
+ if (opts.description)
369
+ payload.description = opts.description;
370
+ if (opts.location)
371
+ payload.location = opts.location;
372
+ if (opts.timeZone)
373
+ payload.timeZone = opts.timeZone;
374
+ return this.request('/calendars', {
375
+ method: 'POST',
376
+ body: JSON.stringify(payload),
377
+ });
378
+ }
379
+ async updateCalendar(opts) {
380
+ const payload = {};
381
+ if (opts.summary !== undefined)
382
+ payload.summary = opts.summary;
383
+ if (opts.description !== undefined)
384
+ payload.description = opts.description;
385
+ if (opts.location !== undefined)
386
+ payload.location = opts.location;
387
+ if (opts.timeZone !== undefined)
388
+ payload.timeZone = opts.timeZone;
389
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}`, {
390
+ method: 'PUT',
391
+ body: JSON.stringify(payload),
392
+ });
393
+ }
394
+ async deleteCalendar(opts) {
395
+ await this.request(`/calendars/${encodeURIComponent(opts.calendarId)}`, {
396
+ method: 'DELETE',
397
+ });
398
+ }
399
+ async clearCalendar(opts) {
400
+ await this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/clear`, {
401
+ method: 'POST',
402
+ });
403
+ }
404
+ // ========== ACL (5) ==========
405
+ async listAcl(opts) {
406
+ const params = new URLSearchParams();
407
+ if (opts.maxResults)
408
+ params.set('maxResults', String(opts.maxResults));
409
+ if (opts.pageToken)
410
+ params.set('pageToken', opts.pageToken);
411
+ if (opts.showDeleted !== undefined)
412
+ params.set('showDeleted', String(opts.showDeleted));
413
+ const qs = params.toString();
414
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/acl${qs ? `?${qs}` : ''}`);
415
+ }
416
+ async getAcl(opts) {
417
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/acl/${encodeURIComponent(opts.ruleId)}`);
418
+ }
419
+ async createAcl(opts) {
420
+ const payload = {
421
+ role: opts.role,
422
+ scope: { type: opts.scopeType, value: opts.scopeValue },
423
+ };
424
+ const params = new URLSearchParams();
425
+ if (opts.sendNotifications !== undefined)
426
+ params.set('sendNotifications', String(opts.sendNotifications));
427
+ const qs = params.toString();
428
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/acl${qs ? `?${qs}` : ''}`, {
429
+ method: 'POST',
430
+ body: JSON.stringify(payload),
431
+ });
432
+ }
433
+ async updateAcl(opts) {
434
+ const params = new URLSearchParams();
435
+ if (opts.sendNotifications !== undefined)
436
+ params.set('sendNotifications', String(opts.sendNotifications));
437
+ const qs = params.toString();
438
+ return this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/acl/${encodeURIComponent(opts.ruleId)}${qs ? `?${qs}` : ''}`, {
439
+ method: 'PUT',
440
+ body: JSON.stringify({ role: opts.role }),
441
+ });
442
+ }
443
+ async deleteAcl(opts) {
444
+ await this.request(`/calendars/${encodeURIComponent(opts.calendarId)}/acl/${encodeURIComponent(opts.ruleId)}`, {
445
+ method: 'DELETE',
446
+ });
447
+ }
448
+ // ========== Utility (3) ==========
449
+ async queryFreeBusy(opts) {
450
+ const payload = {
451
+ timeMin: opts.timeMin,
452
+ timeMax: opts.timeMax,
453
+ items: opts.calendarIds.map(id => ({ id })),
454
+ };
455
+ if (opts.timeZone)
456
+ payload.timeZone = opts.timeZone;
457
+ return this.request('/freeBusy', {
458
+ method: 'POST',
459
+ body: JSON.stringify(payload),
460
+ });
461
+ }
462
+ async getColors() {
463
+ return this.request('/colors');
464
+ }
465
+ async listSettings(opts) {
466
+ const params = new URLSearchParams();
467
+ if (opts.maxResults)
468
+ params.set('maxResults', String(opts.maxResults));
469
+ if (opts.pageToken)
470
+ params.set('pageToken', opts.pageToken);
471
+ const qs = params.toString();
472
+ return this.request(`/users/me/settings${qs ? `?${qs}` : ''}`);
473
+ }
474
+ }
475
+ //# sourceMappingURL=calendar-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-client.js","sourceRoot":"","sources":["../src/calendar-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Google Calendar MCP Server
4
+ *
5
+ * Community edition — connects directly to Google Calendar API v3.
6
+ *
7
+ * Usage (stdio - for Claude Desktop / Cursor / VS Code):
8
+ * GOOGLE_CLIENT_ID=xxx GOOGLE_CLIENT_SECRET=xxx GOOGLE_REFRESH_TOKEN=xxx npx @node2flow/google-calendar-mcp
9
+ *
10
+ * Usage (HTTP - Streamable HTTP transport):
11
+ * GOOGLE_CLIENT_ID=xxx GOOGLE_CLIENT_SECRET=xxx GOOGLE_REFRESH_TOKEN=xxx npx @node2flow/google-calendar-mcp --http
12
+ */
13
+ export default function createSmitheryServer(opts?: {
14
+ config?: {
15
+ GOOGLE_CLIENT_ID?: string;
16
+ GOOGLE_CLIENT_SECRET?: string;
17
+ GOOGLE_REFRESH_TOKEN?: string;
18
+ };
19
+ }): import("@modelcontextprotocol/sdk/server/mcp.js").McpServer;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AA2JH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAClD,MAAM,CAAC,EAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH,+DAMA"}