google-services-mcp 0.1.16 → 0.1.18

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 (52) hide show
  1. package/README.md +10 -9
  2. package/dist/auth/config.d.ts.map +1 -1
  3. package/dist/auth/config.js +1 -1
  4. package/dist/auth/config.js.map +1 -1
  5. package/dist/auth/manager.d.ts +1 -1
  6. package/dist/auth/manager.d.ts.map +1 -1
  7. package/dist/auth/manager.js +3 -3
  8. package/dist/auth/manager.js.map +1 -1
  9. package/dist/auth/oauth.d.ts.map +1 -1
  10. package/dist/auth/oauth.js +1 -1
  11. package/dist/auth/oauth.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +13 -4
  14. package/dist/cli.js.map +1 -1
  15. package/dist/main.js +1 -1
  16. package/dist/main.js.map +1 -1
  17. package/dist/server.js.map +1 -1
  18. package/dist/services/calendar.d.ts.map +1 -1
  19. package/dist/services/calendar.js.map +1 -1
  20. package/dist/services/contacts-tasks.d.ts.map +1 -1
  21. package/dist/services/contacts-tasks.js +4 -1
  22. package/dist/services/contacts-tasks.js.map +1 -1
  23. package/dist/services/docs.d.ts +7 -5
  24. package/dist/services/docs.d.ts.map +1 -1
  25. package/dist/services/docs.js +1 -3
  26. package/dist/services/docs.js.map +1 -1
  27. package/dist/services/drive.d.ts.map +1 -1
  28. package/dist/services/drive.js +13 -8
  29. package/dist/services/drive.js.map +1 -1
  30. package/dist/services/forms.d.ts +7 -5
  31. package/dist/services/forms.d.ts.map +1 -1
  32. package/dist/services/forms.js +2 -2
  33. package/dist/services/forms.js.map +1 -1
  34. package/dist/services/gmail.d.ts +11 -0
  35. package/dist/services/gmail.d.ts.map +1 -1
  36. package/dist/services/gmail.js +202 -24
  37. package/dist/services/gmail.js.map +1 -1
  38. package/dist/services/sheets.d.ts +5 -5
  39. package/dist/services/sheets.d.ts.map +1 -1
  40. package/dist/services/sheets.js.map +1 -1
  41. package/dist/services/slides.d.ts +9 -7
  42. package/dist/services/slides.d.ts.map +1 -1
  43. package/dist/services/slides.js +1 -3
  44. package/dist/services/slides.js.map +1 -1
  45. package/dist/services/youtube.d.ts +13 -8
  46. package/dist/services/youtube.d.ts.map +1 -1
  47. package/dist/services/youtube.js +8 -2
  48. package/dist/services/youtube.js.map +1 -1
  49. package/dist/tools/index.d.ts.map +1 -1
  50. package/dist/tools/index.js +143 -38
  51. package/dist/tools/index.js.map +1 -1
  52. package/package.json +6 -1
@@ -1,4 +1,4 @@
1
- import type { Auth } from "googleapis";
1
+ import type { Auth, youtube_v3 } from "googleapis";
2
2
  export interface SearchVideosArgs {
3
3
  query: string;
4
4
  maxResults?: number;
@@ -12,25 +12,30 @@ export declare function searchVideos(client: Auth.OAuth2Client, { query, maxResu
12
12
  title?: string;
13
13
  channelTitle?: string;
14
14
  }>>;
15
- export declare function getVideo(client: Auth.OAuth2Client, { videoId }: GetVideoArgs): Promise<any>;
15
+ export declare function getVideo(client: Auth.OAuth2Client, { videoId }: GetVideoArgs): Promise<youtube_v3.Schema$Video | null>;
16
16
  export declare function getMyVideos(client: Auth.OAuth2Client, { maxResults }: {
17
17
  maxResults?: number;
18
- }): Promise<any>;
18
+ }): Promise<{
19
+ uploadsPlaylistId: string | null;
20
+ videos: youtube_v3.Schema$PlaylistItem[];
21
+ }>;
19
22
  export declare function listPlaylists(client: Auth.OAuth2Client, { maxResults }: {
20
23
  maxResults?: number;
21
- }): Promise<any[]>;
22
- export declare function createPlaylist(client: Auth.OAuth2Client, { title, description, privacyStatus }: {
24
+ }): Promise<youtube_v3.Schema$Playlist[]>;
25
+ export declare function createPlaylist(client: Auth.OAuth2Client, { title, description, privacyStatus, }: {
23
26
  title: string;
24
27
  description?: string;
25
28
  privacyStatus?: string;
26
- }): Promise<any>;
29
+ }): Promise<youtube_v3.Schema$Playlist>;
27
30
  export declare function deletePlaylist(client: Auth.OAuth2Client, { playlistId }: {
28
31
  playlistId: string;
29
- }): Promise<any>;
32
+ }): Promise<{
33
+ deleted: boolean;
34
+ }>;
30
35
  export declare function addVideoToPlaylist(client: Auth.OAuth2Client, { playlistId, videoId }: {
31
36
  playlistId: string;
32
37
  videoId: string;
33
- }): Promise<any>;
38
+ }): Promise<youtube_v3.Schema$PlaylistItem>;
34
39
  export declare function listSubscriptions(client: Auth.OAuth2Client, { maxResults }: {
35
40
  maxResults?: number;
36
41
  }): Promise<Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,KAAK,EAAE,UAAe,EAAE,EAAE,gBAAgB,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAcrF;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAOjG;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,GAAG,CAAC,CAkBd;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,GAAG,EAAE,CAAC,CAQhB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,KAAK,EAAE,WAAW,EAAE,aAAkC,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1H,OAAO,CAAC,GAAG,CAAC,CAUd;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,GAAG,CAAC,CAId;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,GAAG,CAAC,CASd;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWxD"}
1
+ {"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,KAAK,EAAE,UAAe,EAAE,EAAE,gBAAgB,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAoBrF;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,OAAO,EAAE,EAAE,YAAY,GACxB,OAAO,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,CAOzC;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAA;CAAE,CAAC,CAoBzF;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAQvC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EACE,KAAK,EACL,WAAW,EACX,aAAkC,GACnC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAUrC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAI/B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CASzC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,IAAI,CAAC,YAAY,EACzB,EAAE,UAAe,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAWxD"}
@@ -9,7 +9,13 @@ export async function searchVideos(client, { query, maxResults = 10 }) {
9
9
  });
10
10
  return (res.data.items ?? []).map((item) => ({
11
11
  id: item.id?.videoId ?? item.id?.channelId ?? item.id?.playlistId ?? "",
12
- type: item.id?.videoId ? "video" : item.id?.channelId ? "channel" : item.id?.playlistId ? "playlist" : "unknown",
12
+ type: item.id?.videoId
13
+ ? "video"
14
+ : item.id?.channelId
15
+ ? "channel"
16
+ : item.id?.playlistId
17
+ ? "playlist"
18
+ : "unknown",
13
19
  title: item.snippet?.title ?? undefined,
14
20
  channelTitle: item.snippet?.channelTitle ?? undefined,
15
21
  }));
@@ -50,7 +56,7 @@ export async function listPlaylists(client, { maxResults = 25 }) {
50
56
  });
51
57
  return res.data.items ?? [];
52
58
  }
53
- export async function createPlaylist(client, { title, description, privacyStatus = "private" }) {
59
+ export async function createPlaylist(client, { title, description, privacyStatus = "private", }) {
54
60
  const yt = google.youtube({ version: "v3", auth: client });
55
61
  const res = await yt.playlists.insert({
56
62
  part: ["snippet", "status"],
@@ -1 +1 @@
1
- {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/services/youtube.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8GzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAstCrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0GzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA85CrD"}
@@ -1,15 +1,15 @@
1
1
  import { z } from "zod";
2
- import { ok, err } from "../util/result.js";
3
2
  import { authManager } from "../auth/manager.js";
4
- import { sendGmail, listGmailMessages, getGmailMessage, modifyGmailMessage, replyGmail, listGmailAttachments, getGmailAttachment, createGmailDraft, listGmailDrafts, getGmailDraft, sendGmailDraft, deleteGmailDraft, listGmailLabels, createGmailLabel, deleteGmailLabel, trashGmailMessage, untrashGmailMessage, deleteGmailMessage, } from "../services/gmail.js";
5
- import { listCalendars, listEvents, createEvent, getEvent, updateEvent, deleteEvent, createMeetLink, } from "../services/calendar.js";
6
- import { listDriveFiles, getDriveFile, uploadDriveFile, updateDriveFile, deleteDriveFile, shareDriveFile, downloadDriveFile, exportDriveFile, createDriveFolder, copyDriveFile, } from "../services/drive.js";
7
- import { listContacts, searchContacts, createContact, listTaskLists, listTasks, createTask, completeTask, deleteTask, } from "../services/contacts-tasks.js";
8
- import { getSpreadsheet, readSheetRange, writeSheetRange, appendSheetRange, createSpreadsheet, batchUpdateSheet, } from "../services/sheets.js";
9
- import { getDocument, getDocumentText, createDocument, insertText, replaceAllText, batchUpdateDocument, } from "../services/docs.js";
10
- import { getPresentation, getSlidePage, createPresentation, replaceAllText as replaceSlidesText, createSlide, deleteSlide, batchUpdatePresentation, } from "../services/slides.js";
11
- import { searchVideos, getVideo, getMyVideos, listPlaylists, createPlaylist, deletePlaylist, addVideoToPlaylist, listSubscriptions, } from "../services/youtube.js";
12
- import { getForm, getFormResponses, createForm, addQuestion, } from "../services/forms.js";
3
+ import { createEvent, createMeetLink, deleteEvent, getEvent, listCalendars, listEvents, updateEvent, } from "../services/calendar.js";
4
+ import { completeTask, createContact, createTask, deleteTask, listContacts, listTaskLists, listTasks, searchContacts, } from "../services/contacts-tasks.js";
5
+ import { batchUpdateDocument, createDocument, getDocument, getDocumentText, insertText, replaceAllText, } from "../services/docs.js";
6
+ import { copyDriveFile, createDriveFolder, deleteDriveFile, downloadDriveFile, exportDriveFile, getDriveFile, listDriveFiles, shareDriveFile, updateDriveFile, uploadDriveFile, } from "../services/drive.js";
7
+ import { addQuestion, createForm, getForm, getFormResponses } from "../services/forms.js";
8
+ import { createGmailDraft, createGmailLabel, deleteGmailDraft, deleteGmailLabel, deleteGmailMessage, getGmailAttachment, getGmailDraft, getGmailMessage, listGmailAttachments, listGmailDrafts, listGmailLabels, listGmailMessages, modifyGmailMessage, replyGmail, sendGmail, sendGmailDraft, trashGmailMessage, untrashGmailMessage, } from "../services/gmail.js";
9
+ import { appendSheetRange, batchUpdateSheet, createSpreadsheet, getSpreadsheet, readSheetRange, writeSheetRange, } from "../services/sheets.js";
10
+ import { batchUpdatePresentation, createPresentation, createSlide, deleteSlide, getPresentation, getSlidePage, replaceAllText as replaceSlidesText, } from "../services/slides.js";
11
+ import { addVideoToPlaylist, createPlaylist, deletePlaylist, getMyVideos, getVideo, listPlaylists, listSubscriptions, searchVideos, } from "../services/youtube.js";
12
+ import { err, ok } from "../util/result.js";
13
13
  /** Wrap a service call that resolves its own auth client. */
14
14
  async function withClient(account, fn) {
15
15
  try {
@@ -27,7 +27,10 @@ export function registerTools(server) {
27
27
  description: "Start the OAuth consent flow to connect a new Google account. Opens a browser for sign-in.",
28
28
  inputSchema: {
29
29
  name: z.string().describe("Nickname for the account (e.g. personal, work)."),
30
- openBrowser: z.boolean().optional().describe("Open a browser automatically (default true)."),
30
+ openBrowser: z
31
+ .boolean()
32
+ .optional()
33
+ .describe("Open a browser automatically (default true)."),
31
34
  },
32
35
  }, async ({ name, openBrowser }) => {
33
36
  try {
@@ -105,12 +108,32 @@ export function registerTools(server) {
105
108
  to: z.union([z.string(), z.array(z.string())]).describe("Recipient email(s)."),
106
109
  subject: z.string().describe("Subject line."),
107
110
  body: z.string().describe("Message body."),
108
- cc: z.union([z.string(), z.array(z.string())]).optional().describe("CC recipient(s)."),
109
- bcc: z.union([z.string(), z.array(z.string())]).optional().describe("BCC recipient(s)."),
111
+ cc: z
112
+ .union([z.string(), z.array(z.string())])
113
+ .optional()
114
+ .describe("CC recipient(s)."),
115
+ bcc: z
116
+ .union([z.string(), z.array(z.string())])
117
+ .optional()
118
+ .describe("BCC recipient(s)."),
110
119
  bodyType: z.enum(["text", "html"]).optional().describe("Body format (default text)."),
111
- account: z.string().optional().describe("Account nickname to use."),
112
- },
113
- }, async ({ to, subject, body, cc, bcc, bodyType, account }) => withClient(account, (client) => sendGmail(client, { to, subject, body, cc, bcc, bodyType })));
120
+ attachments: z
121
+ .array(z.object({
122
+ path: z.string().describe("Local filesystem path of the file to attach."),
123
+ filename: z
124
+ .string()
125
+ .optional()
126
+ .describe("Attachment filename shown to recipients (defaults to the basename of path)."),
127
+ mimeType: z
128
+ .string()
129
+ .optional()
130
+ .describe("MIME type override (defaults to a guess from the filename)."),
131
+ }))
132
+ .optional()
133
+ .describe("Local files to attach to the email."),
134
+ account: z.string().optional().describe("Account nickname to use."),
135
+ },
136
+ }, async ({ to, subject, body, cc, bcc, bodyType, attachments, account }) => withClient(account, (client) => sendGmail(client, { to, subject, body, cc, bcc, bodyType, attachments })));
114
137
  server.registerTool("google_gmail_list", {
115
138
  title: "List emails",
116
139
  description: "List messages from the inbox, newest first, with an optional Gmail search query.",
@@ -133,7 +156,10 @@ export function registerTools(server) {
133
156
  description: "Add or remove labels on a message (e.g. mark read/unread, star, archive).",
134
157
  inputSchema: {
135
158
  id: z.string().describe("Message ID."),
136
- addLabels: z.array(z.string()).optional().describe("Labels to add (e.g. STARRED, INBOX, TRASH)."),
159
+ addLabels: z
160
+ .array(z.string())
161
+ .optional()
162
+ .describe("Labels to add (e.g. STARRED, INBOX, TRASH)."),
137
163
  removeLabels: z.array(z.string()).optional().describe("Labels to remove (e.g. UNREAD)."),
138
164
  account: z.string().optional().describe("Account nickname to use."),
139
165
  },
@@ -146,9 +172,23 @@ export function registerTools(server) {
146
172
  messageId: z.string().describe("ID of the message being replied to."),
147
173
  body: z.string().describe("Reply body."),
148
174
  bodyType: z.enum(["text", "html"]).optional().describe("Body format (default text)."),
149
- account: z.string().optional().describe("Account nickname to use."),
150
- },
151
- }, async ({ threadId, messageId, body, bodyType, account }) => withClient(account, (client) => replyGmail(client, { threadId, messageId, body, bodyType })));
175
+ attachments: z
176
+ .array(z.object({
177
+ path: z.string().describe("Local filesystem path of the file to attach."),
178
+ filename: z
179
+ .string()
180
+ .optional()
181
+ .describe("Attachment filename shown to recipients (defaults to the basename of path)."),
182
+ mimeType: z
183
+ .string()
184
+ .optional()
185
+ .describe("MIME type override (defaults to a guess from the filename)."),
186
+ }))
187
+ .optional()
188
+ .describe("Local files to attach to the reply."),
189
+ account: z.string().optional().describe("Account nickname to use."),
190
+ },
191
+ }, async ({ threadId, messageId, body, bodyType, attachments, account }) => withClient(account, (client) => replyGmail(client, { threadId, messageId, body, bodyType, attachments })));
152
192
  server.registerTool("google_gmail_list_attachments", {
153
193
  title: "List email attachments",
154
194
  description: "List attachments on a message (metadata only, no bytes).",
@@ -163,7 +203,10 @@ export function registerTools(server) {
163
203
  inputSchema: {
164
204
  id: z.string().describe("Message ID."),
165
205
  attachmentId: z.string().describe("Attachment ID (from list_attachments)."),
166
- partId: z.string().optional().describe("Stable part ID (from list_attachments); preferred over attachmentId for lookup."),
206
+ partId: z
207
+ .string()
208
+ .optional()
209
+ .describe("Stable part ID (from list_attachments); preferred over attachmentId for lookup."),
167
210
  account: z.string().optional().describe("Account nickname to use."),
168
211
  },
169
212
  }, async ({ id, attachmentId, partId, account }) => withClient(account, (client) => getGmailAttachment(client, { id, attachmentId, partId })));
@@ -174,12 +217,32 @@ export function registerTools(server) {
174
217
  to: z.union([z.string(), z.array(z.string())]).describe("Recipient email(s)."),
175
218
  subject: z.string().describe("Subject line."),
176
219
  body: z.string().describe("Message body."),
177
- cc: z.union([z.string(), z.array(z.string())]).optional().describe("CC recipient(s)."),
178
- bcc: z.union([z.string(), z.array(z.string())]).optional().describe("BCC recipient(s)."),
220
+ cc: z
221
+ .union([z.string(), z.array(z.string())])
222
+ .optional()
223
+ .describe("CC recipient(s)."),
224
+ bcc: z
225
+ .union([z.string(), z.array(z.string())])
226
+ .optional()
227
+ .describe("BCC recipient(s)."),
179
228
  bodyType: z.enum(["text", "html"]).optional().describe("Body format (default text)."),
180
- account: z.string().optional().describe("Account nickname to use."),
181
- },
182
- }, async ({ to, subject, body, cc, bcc, bodyType, account }) => withClient(account, (client) => createGmailDraft(client, { to, subject, body, cc, bcc, bodyType })));
229
+ attachments: z
230
+ .array(z.object({
231
+ path: z.string().describe("Local filesystem path of the file to attach."),
232
+ filename: z
233
+ .string()
234
+ .optional()
235
+ .describe("Attachment filename shown to recipients (defaults to the basename of path)."),
236
+ mimeType: z
237
+ .string()
238
+ .optional()
239
+ .describe("MIME type override (defaults to a guess from the filename)."),
240
+ }))
241
+ .optional()
242
+ .describe("Local files to attach to the draft."),
243
+ account: z.string().optional().describe("Account nickname to use."),
244
+ },
245
+ }, async ({ to, subject, body, cc, bcc, bodyType, attachments, account }) => withClient(account, (client) => createGmailDraft(client, { to, subject, body, cc, bcc, bodyType, attachments })));
183
246
  server.registerTool("google_gmail_drafts_list", {
184
247
  title: "List email drafts",
185
248
  description: "List draft emails.",
@@ -355,7 +418,16 @@ export function registerTools(server) {
355
418
  calendarId: z.string().optional().describe("Calendar ID (default primary)."),
356
419
  account: z.string().optional().describe("Account nickname to use."),
357
420
  },
358
- }, async ({ eventId, summary, description, location, start, end, attendees, calendarId, account }) => withClient(account, (client) => updateEvent(client, { eventId, summary, description, location, start, end, attendees, calendarId })));
421
+ }, async ({ eventId, summary, description, location, start, end, attendees, calendarId, account, }) => withClient(account, (client) => updateEvent(client, {
422
+ eventId,
423
+ summary,
424
+ description,
425
+ location,
426
+ start,
427
+ end,
428
+ attendees,
429
+ calendarId,
430
+ })));
359
431
  server.registerTool("google_calendar_delete_event", {
360
432
  title: "Delete calendar event",
361
433
  description: "Delete an event by ID.",
@@ -397,7 +469,9 @@ export function registerTools(server) {
397
469
  description: "Create a file in Drive, optionally with text content (blank Google-native file if omitted).",
398
470
  inputSchema: {
399
471
  name: z.string().describe("File name."),
400
- mimeType: z.string().describe("MIME type (e.g. text/plain, application/vnd.google-apps.document)."),
472
+ mimeType: z
473
+ .string()
474
+ .describe("MIME type (e.g. text/plain, application/vnd.google-apps.document)."),
401
475
  content: z.string().optional().describe("Text content to upload."),
402
476
  parentFolderId: z.string().optional().describe("Parent folder ID."),
403
477
  account: z.string().optional().describe("Account nickname to use."),
@@ -438,7 +512,10 @@ export function registerTools(server) {
438
512
  fileId: z.string().describe("Drive file ID."),
439
513
  email: z.string().email().describe("Recipient email."),
440
514
  role: z.enum(["reader", "writer", "commenter"]).describe("Access role."),
441
- sendNotificationEmail: z.boolean().optional().describe("Email the recipient (default true)."),
515
+ sendNotificationEmail: z
516
+ .boolean()
517
+ .optional()
518
+ .describe("Email the recipient (default true)."),
442
519
  account: z.string().optional().describe("Account nickname to use."),
443
520
  },
444
521
  }, async ({ fileId, email, role, sendNotificationEmail, account }) => withClient(account, (client) => shareDriveFile(client, { fileId, email, role, sendNotificationEmail })));
@@ -564,7 +641,10 @@ export function registerTools(server) {
564
641
  description: "Get spreadsheet metadata and optionally cell values from a range.",
565
642
  inputSchema: {
566
643
  spreadsheetId: z.string().describe("Spreadsheet ID (from the URL)."),
567
- range: z.string().optional().describe("A1 range to also read values from, e.g. Sheet1!A1:B5."),
644
+ range: z
645
+ .string()
646
+ .optional()
647
+ .describe("A1 range to also read values from, e.g. Sheet1!A1:B5."),
568
648
  account: z.string().optional().describe("Account nickname to use."),
569
649
  },
570
650
  }, async ({ spreadsheetId, range, account }) => withClient(account, (client) => getSpreadsheet(client, { spreadsheetId, range })));
@@ -574,7 +654,10 @@ export function registerTools(server) {
574
654
  inputSchema: {
575
655
  spreadsheetId: z.string().describe("Spreadsheet ID."),
576
656
  range: z.string().describe("A1 notation, e.g. Sheet1!A1:C10."),
577
- majorDimension: z.enum(["ROWS", "COLUMNS"]).optional().describe("Read direction (default ROWS)."),
657
+ majorDimension: z
658
+ .enum(["ROWS", "COLUMNS"])
659
+ .optional()
660
+ .describe("Read direction (default ROWS)."),
578
661
  account: z.string().optional().describe("Account nickname to use."),
579
662
  },
580
663
  }, async ({ spreadsheetId, range, majorDimension, account }) => withClient(account, (client) => readSheetRange(client, { spreadsheetId, range, majorDimension })));
@@ -585,7 +668,10 @@ export function registerTools(server) {
585
668
  spreadsheetId: z.string().describe("Spreadsheet ID."),
586
669
  range: z.string().describe("A1 notation of the top-left cell, e.g. Sheet1!A1."),
587
670
  values: z.array(z.array(z.string())).describe("Rows of values to write."),
588
- valueInputOption: z.enum(["RAW", "USER_ENTERED"]).optional().describe("How to interpret values (default USER_ENTERED)."),
671
+ valueInputOption: z
672
+ .enum(["RAW", "USER_ENTERED"])
673
+ .optional()
674
+ .describe("How to interpret values (default USER_ENTERED)."),
589
675
  account: z.string().optional().describe("Account nickname to use."),
590
676
  },
591
677
  }, async ({ spreadsheetId, range, values, valueInputOption, account }) => withClient(account, (client) => writeSheetRange(client, { spreadsheetId, range, values, valueInputOption })));
@@ -596,7 +682,10 @@ export function registerTools(server) {
596
682
  spreadsheetId: z.string().describe("Spreadsheet ID."),
597
683
  range: z.string().describe("A1 range of the table to append to, e.g. Sheet1!A1."),
598
684
  values: z.array(z.array(z.string())).describe("Rows of values to append."),
599
- valueInputOption: z.enum(["RAW", "USER_ENTERED"]).optional().describe("How to interpret values (default USER_ENTERED)."),
685
+ valueInputOption: z
686
+ .enum(["RAW", "USER_ENTERED"])
687
+ .optional()
688
+ .describe("How to interpret values (default USER_ENTERED)."),
600
689
  account: z.string().optional().describe("Account nickname to use."),
601
690
  },
602
691
  }, async ({ spreadsheetId, range, values, valueInputOption, account }) => withClient(account, (client) => appendSheetRange(client, { spreadsheetId, range, values, valueInputOption })));
@@ -614,7 +703,9 @@ export function registerTools(server) {
614
703
  description: "Send raw Sheets batchUpdate requests (add/delete sheets, formatting, etc.).",
615
704
  inputSchema: {
616
705
  spreadsheetId: z.string().describe("Spreadsheet ID."),
617
- requests: z.array(z.record(z.string(), z.any())).describe("Sheets API batchUpdate requests."),
706
+ requests: z
707
+ .array(z.record(z.string(), z.any()))
708
+ .describe("Sheets API batchUpdate requests."),
618
709
  account: z.string().optional().describe("Account nickname to use."),
619
710
  },
620
711
  }, async ({ spreadsheetId, requests, account }) => withClient(account, (client) => batchUpdateSheet(client, { spreadsheetId, requests })));
@@ -649,7 +740,12 @@ export function registerTools(server) {
649
740
  inputSchema: {
650
741
  documentId: z.string().describe("Document ID."),
651
742
  text: z.string().describe("Text to insert."),
652
- index: z.number().int().min(0).optional().describe("Character index to insert at (default end of document)."),
743
+ index: z
744
+ .number()
745
+ .int()
746
+ .min(0)
747
+ .optional()
748
+ .describe("Character index to insert at (default end of document)."),
653
749
  account: z.string().optional().describe("Account nickname to use."),
654
750
  },
655
751
  }, async ({ documentId, text, index, account }) => withClient(account, (client) => insertText(client, { documentId, text, index })));
@@ -776,7 +872,10 @@ export function registerTools(server) {
776
872
  inputSchema: {
777
873
  title: z.string().describe("Playlist title."),
778
874
  description: z.string().optional().describe("Playlist description."),
779
- privacyStatus: z.enum(["private", "public", "unlisted"]).optional().describe("Privacy (default private)."),
875
+ privacyStatus: z
876
+ .enum(["private", "public", "unlisted"])
877
+ .optional()
878
+ .describe("Privacy (default private)."),
780
879
  account: z.string().optional().describe("Account nickname to use."),
781
880
  },
782
881
  }, async ({ title, description, privacyStatus, account }) => withClient(account, (client) => createPlaylist(client, { title, description, privacyStatus })));
@@ -838,9 +937,15 @@ export function registerTools(server) {
838
937
  formId: z.string().describe("Form ID."),
839
938
  title: z.string().describe("Question text."),
840
939
  description: z.string().optional().describe("Optional help text."),
841
- type: z.enum(["text", "multiple_choice"]).optional().describe("Question type (default text)."),
940
+ type: z
941
+ .enum(["text", "multiple_choice"])
942
+ .optional()
943
+ .describe("Question type (default text)."),
842
944
  options: z.array(z.string()).optional().describe("Choices for multiple_choice."),
843
- required: z.boolean().optional().describe("Whether the question is required (default false)."),
945
+ required: z
946
+ .boolean()
947
+ .optional()
948
+ .describe("Whether the question is required (default false)."),
844
949
  account: z.string().optional().describe("Account nickname to use."),
845
950
  },
846
951
  }, async ({ formId, title, description, type, options, required, account }) => withClient(account, (client) => addQuestion(client, { formId, title, description, type, options, required })));