bn-google-workspace-mcp-server 0.0.1

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 (75) hide show
  1. package/README.md +718 -0
  2. package/dist/debug-middleware.d.ts +12 -0
  3. package/dist/debug-middleware.d.ts.map +1 -0
  4. package/dist/debug-middleware.js +36 -0
  5. package/dist/debug-middleware.js.map +1 -0
  6. package/dist/google-api-client.d.ts +46 -0
  7. package/dist/google-api-client.d.ts.map +1 -0
  8. package/dist/google-api-client.js +76 -0
  9. package/dist/google-api-client.js.map +1 -0
  10. package/dist/helpers.d.ts +40 -0
  11. package/dist/helpers.d.ts.map +1 -0
  12. package/dist/helpers.js +171 -0
  13. package/dist/helpers.js.map +1 -0
  14. package/dist/index.d.ts +9 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +166 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/schemas.d.ts +303 -0
  19. package/dist/schemas.d.ts.map +1 -0
  20. package/dist/schemas.js +611 -0
  21. package/dist/schemas.js.map +1 -0
  22. package/dist/tool-loader.d.ts +35 -0
  23. package/dist/tool-loader.d.ts.map +1 -0
  24. package/dist/tool-loader.js +121 -0
  25. package/dist/tool-loader.js.map +1 -0
  26. package/dist/tool-registry.d.ts +44 -0
  27. package/dist/tool-registry.d.ts.map +1 -0
  28. package/dist/tool-registry.js +56 -0
  29. package/dist/tool-registry.js.map +1 -0
  30. package/dist/tools/calendar.d.ts +44 -0
  31. package/dist/tools/calendar.d.ts.map +1 -0
  32. package/dist/tools/calendar.js +76 -0
  33. package/dist/tools/calendar.js.map +1 -0
  34. package/dist/tools/chat.d.ts +29 -0
  35. package/dist/tools/chat.d.ts.map +1 -0
  36. package/dist/tools/chat.js +42 -0
  37. package/dist/tools/chat.js.map +1 -0
  38. package/dist/tools/docs.d.ts +29 -0
  39. package/dist/tools/docs.d.ts.map +1 -0
  40. package/dist/tools/docs.js +63 -0
  41. package/dist/tools/docs.js.map +1 -0
  42. package/dist/tools/drive.d.ts +45 -0
  43. package/dist/tools/drive.d.ts.map +1 -0
  44. package/dist/tools/drive.js +135 -0
  45. package/dist/tools/drive.js.map +1 -0
  46. package/dist/tools/forms.d.ts +30 -0
  47. package/dist/tools/forms.d.ts.map +1 -0
  48. package/dist/tools/forms.js +46 -0
  49. package/dist/tools/forms.js.map +1 -0
  50. package/dist/tools/gmail.d.ts +55 -0
  51. package/dist/tools/gmail.d.ts.map +1 -0
  52. package/dist/tools/gmail.js +112 -0
  53. package/dist/tools/gmail.js.map +1 -0
  54. package/dist/tools/index.d.ts +13 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +22 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/sheets.d.ts +40 -0
  59. package/dist/tools/sheets.d.ts.map +1 -0
  60. package/dist/tools/sheets.js +64 -0
  61. package/dist/tools/sheets.js.map +1 -0
  62. package/dist/tools/slides.d.ts +32 -0
  63. package/dist/tools/slides.d.ts.map +1 -0
  64. package/dist/tools/slides.js +46 -0
  65. package/dist/tools/slides.js.map +1 -0
  66. package/dist/tools/tasks.d.ts +43 -0
  67. package/dist/tools/tasks.d.ts.map +1 -0
  68. package/dist/tools/tasks.js +69 -0
  69. package/dist/tools/tasks.js.map +1 -0
  70. package/dist/types.d.ts +110 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +2 -0
  73. package/dist/types.js.map +1 -0
  74. package/package.json +54 -0
  75. package/tools.json +379 -0
@@ -0,0 +1,611 @@
1
+ /**
2
+ * Zod schemas for all Google Workspace MCP tools
3
+ * Each schema includes comprehensive .describe() annotations for LLM understanding
4
+ *
5
+ * These descriptions are designed to help LLMs understand:
6
+ * - When to use each tool
7
+ * - What parameters are available and their exact syntax
8
+ * - Examples of common use cases
9
+ * - Relationships between tools (e.g., get IDs from list tools to use in detail tools)
10
+ */
11
+ import { z } from "zod";
12
+ // ============================================================================
13
+ // GMAIL TOOLS (4 tools)
14
+ // ============================================================================
15
+ /**
16
+ * Schema for gmail_list_labels tool
17
+ * Lists all Gmail labels in the user's mailbox
18
+ */
19
+ export const GmailListLabelsSchema = z.object({}).describe("List all Gmail labels in the user's mailbox. Use this tool to discover available labels before filtering emails by label. Returns both system labels (INBOX, SENT, DRAFT, SPAM, TRASH, STARRED, IMPORTANT, CATEGORY_PERSONAL, CATEGORY_SOCIAL, CATEGORY_PROMOTIONS, CATEGORY_UPDATES, CATEGORY_FORUMS) and custom user-created labels. The returned label IDs can be used with gmail_search_messages using the 'label:' operator.");
20
+ /**
21
+ * Schema for gmail_search_messages tool
22
+ * Search Gmail messages using Gmail search operators
23
+ */
24
+ export const GmailSearchMessagesSchema = z.object({
25
+ query: z
26
+ .string()
27
+ .optional()
28
+ .describe(`Gmail search query using Gmail's powerful search operators. Leave empty to list recent messages.
29
+
30
+ SEARCH OPERATORS (combine multiple with spaces for AND logic, use OR for alternatives):
31
+
32
+ **Sender/Recipient:**
33
+ - from:sender@example.com - Messages from specific sender
34
+ - to:recipient@example.com - Messages sent to specific recipient
35
+ - cc:user@example.com - Messages where user is CC'd
36
+ - bcc:user@example.com - Messages where user is BCC'd
37
+ - deliveredto:me@example.com - Delivered to specific address
38
+
39
+ **Labels & Categories:**
40
+ - label:INBOX - Messages in inbox
41
+ - label:SENT - Sent messages
42
+ - label:STARRED - Starred messages
43
+ - label:IMPORTANT - Important messages
44
+ - label:custom-label - Messages with custom label (use exact label name)
45
+ - category:primary - Primary inbox category
46
+ - category:social - Social category
47
+ - category:promotions - Promotions category
48
+ - category:updates - Updates category
49
+ - category:forums - Forums category
50
+ - in:anywhere - Search all mail including spam and trash
51
+
52
+ **Status:**
53
+ - is:unread - Unread messages
54
+ - is:read - Read messages
55
+ - is:starred - Starred messages
56
+ - is:important - Marked important
57
+ - is:snoozed - Snoozed messages
58
+
59
+ **Attachments:**
60
+ - has:attachment - Has any attachment
61
+ - has:drive - Has Google Drive attachment
62
+ - has:document - Has Google Docs attachment
63
+ - has:spreadsheet - Has Google Sheets attachment
64
+ - has:presentation - Has Google Slides attachment
65
+ - has:youtube - Has YouTube video
66
+ - filename:pdf - Has attachment with specific extension
67
+ - filename:report.xlsx - Has attachment with specific filename
68
+
69
+ **Content:**
70
+ - subject:meeting - Word in subject line
71
+ - "exact phrase" - Exact phrase match (use quotes)
72
+ - word1 word2 - Both words anywhere in message (AND)
73
+ - word1 OR word2 - Either word (must use uppercase OR)
74
+ - -word - Exclude messages containing word
75
+ - +word - Exact word match (no synonyms)
76
+
77
+ **Size:**
78
+ - larger:10M - Larger than 10 megabytes
79
+ - smaller:1M - Smaller than 1 megabyte
80
+ - size:5M - Approximately 5 megabytes
81
+
82
+ **Dates:**
83
+ - after:2024/01/15 - Messages after date (YYYY/MM/DD)
84
+ - before:2024/12/31 - Messages before date
85
+ - older_than:7d - Older than 7 days
86
+ - newer_than:3d - Newer than 3 days
87
+ - older_than:1m - Older than 1 month
88
+ - older_than:1y - Older than 1 year
89
+
90
+ **Thread:**
91
+ - in:inbox - In inbox (not archived)
92
+ - in:trash - In trash
93
+ - in:spam - In spam folder
94
+ - in:sent - In sent folder
95
+ - in:draft - Draft messages
96
+ - in:chats - Chat messages
97
+
98
+ **EXAMPLE QUERIES:**
99
+ - "from:boss@company.com is:unread" - Unread emails from boss
100
+ - "has:attachment filename:pdf after:2024/01/01" - PDFs received this year
101
+ - "subject:invoice from:accounting@company.com" - Invoices from accounting
102
+ - "is:starred label:important" - Starred and important messages
103
+ - "larger:5M has:attachment" - Large attachments
104
+ - "from:@amazon.com subject:order" - Amazon order confirmations
105
+ - "to:me -category:promotions newer_than:7d" - Recent non-promotional emails to me`),
106
+ maxResults: z
107
+ .number()
108
+ .int()
109
+ .positive()
110
+ .max(500)
111
+ .optional()
112
+ .default(10)
113
+ .describe("Maximum number of messages to return (1-500, default: 10). Note: For performance, only the first 5 messages include detailed headers (subject, from, snippet). For full message content including body text, use gmail_get_message_content with the returned message ID."),
114
+ });
115
+ /**
116
+ * Schema for gmail_get_message_content tool
117
+ * Get detailed information about a specific Gmail message
118
+ */
119
+ export const GmailGetMessageContentSchema = z.object({
120
+ messageId: z
121
+ .string()
122
+ .describe("The unique Gmail message ID (alphanumeric string like '18d4a2b3c4d5e6f7'). IMPORTANT: First use gmail_search_messages to find messages and obtain their IDs. This tool returns the complete message including: full headers (Subject, From, To, Date, CC, BCC), complete body content (plain text extracted from the message), thread ID for related messages, and all metadata."),
123
+ });
124
+ /**
125
+ * Schema for gmail_send_message tool
126
+ * Send an email via Gmail
127
+ */
128
+ export const GmailSendMessageSchema = z.object({
129
+ to: z
130
+ .string()
131
+ .describe("Recipient email address in standard format. Examples: 'user@example.com' for single recipient. For multiple recipients, send separate messages or use comma-separated addresses."),
132
+ subject: z
133
+ .string()
134
+ .describe("Email subject line. Plain text only (no HTML tags). Best practices: Keep under 60 characters for full visibility in email clients. Avoid spam trigger words in all caps. Be specific and descriptive."),
135
+ body: z
136
+ .string()
137
+ .describe("Email body content in plain text format. Line breaks are preserved. For basic formatting, use plain text conventions: *asterisks* for emphasis, - or * for bullet points, numbered lists with 1. 2. 3., and clear paragraph breaks with double newlines. HTML is not supported in this version."),
138
+ });
139
+ // ============================================================================
140
+ // DRIVE TOOLS (3 tools)
141
+ // ============================================================================
142
+ /**
143
+ * Schema for drive_list_files tool
144
+ * List Google Drive files
145
+ */
146
+ export const DriveListFilesSchema = z.object({
147
+ query: z
148
+ .string()
149
+ .optional()
150
+ .describe(`Google Drive search query to filter files. Leave empty to list all recent files.
151
+
152
+ SEARCH SYNTAX (Google Drive Query Language):
153
+
154
+ **By Name:**
155
+ - name contains 'budget' - Files with 'budget' in name
156
+ - name = 'Quarterly Report' - Exact file name match
157
+ - fullText contains 'deadline' - Search file contents (Google Docs, Sheets, Slides, PDFs)
158
+
159
+ **By File Type (mimeType):**
160
+ - mimeType = 'application/vnd.google-apps.document' - Google Docs
161
+ - mimeType = 'application/vnd.google-apps.spreadsheet' - Google Sheets
162
+ - mimeType = 'application/vnd.google-apps.presentation' - Google Slides
163
+ - mimeType = 'application/vnd.google-apps.folder' - Folders
164
+ - mimeType = 'application/pdf' - PDF files
165
+ - mimeType contains 'image/' - All image files
166
+ - mimeType contains 'video/' - All video files
167
+ - mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' - Word docs (.docx)
168
+ - mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' - Excel files (.xlsx)
169
+
170
+ **By Location:**
171
+ - 'FOLDER_ID' in parents - Files in specific folder (get folder ID from URL or previous search)
172
+ - 'root' in parents - Files in My Drive root
173
+ - sharedWithMe = true - Files shared with me
174
+ - not 'FOLDER_ID' in parents - Files NOT in specific folder
175
+
176
+ **By Owner/Sharing:**
177
+ - 'user@example.com' in owners - Files owned by specific user
178
+ - 'user@example.com' in writers - Files user can edit
179
+ - 'user@example.com' in readers - Files user can view
180
+
181
+ **By Date:**
182
+ - modifiedTime > '2024-01-01T00:00:00' - Modified after date (RFC 3339)
183
+ - createdTime > '2024-06-01T00:00:00' - Created after date
184
+ - viewedByMeTime > '2024-01-01T00:00:00' - Viewed by me after date
185
+ - modifiedTime >= '2024-01-01' and modifiedTime < '2024-02-01' - Modified in date range
186
+
187
+ **By Status:**
188
+ - starred = true - Starred files
189
+ - trashed = true - Files in trash
190
+ - trashed = false - Files not in trash (default behavior)
191
+
192
+ **Combining Conditions:**
193
+ - Use 'and' to combine: name contains 'report' and mimeType = 'application/vnd.google-apps.document'
194
+ - Use 'or' for alternatives: mimeType = 'application/pdf' or mimeType contains 'image/'
195
+ - Use 'not' for negation: not mimeType = 'application/vnd.google-apps.folder'
196
+
197
+ **EXAMPLE QUERIES:**
198
+ - "name contains 'Q4' and mimeType = 'application/vnd.google-apps.spreadsheet'" - Q4 spreadsheets
199
+ - "fullText contains 'project deadline'" - Files mentioning project deadline
200
+ - "modifiedTime > '2024-12-01T00:00:00' and mimeType = 'application/vnd.google-apps.document'" - Recent Google Docs
201
+ - "sharedWithMe = true and mimeType contains 'image/'" - Images shared with me
202
+ - "starred = true" - All starred files
203
+ - "'root' in parents and mimeType = 'application/vnd.google-apps.folder'" - Folders in My Drive root
204
+
205
+ **SIMPLE SEARCH (if you don't need query syntax):**
206
+ Just enter a search term like 'budget' and it will be automatically converted to: name contains 'budget'`),
207
+ maxResults: z
208
+ .number()
209
+ .int()
210
+ .positive()
211
+ .max(1000)
212
+ .optional()
213
+ .default(10)
214
+ .describe("Maximum number of files to return (1-1000, default: 10). Results are sorted by most recently modified. Returns file ID, name, MIME type, modification time, size, and web view link for each file."),
215
+ });
216
+ /**
217
+ * Schema for drive_get_file_content tool
218
+ * Get Google Drive file content
219
+ */
220
+ export const DriveGetFileContentSchema = z.object({
221
+ fileId: z
222
+ .string()
223
+ .describe(`The unique Google Drive file ID. How to obtain:
224
+
225
+ 1. **From drive_list_files**: Search for files and use the returned 'id' field
226
+ 2. **From URL**: Extract from the file URL pattern:
227
+ - Google Docs: docs.google.com/document/d/{fileId}/edit
228
+ - Google Sheets: docs.google.com/spreadsheets/d/{fileId}/edit
229
+ - Google Slides: docs.google.com/presentation/d/{fileId}/edit
230
+ - Google Drive: drive.google.com/file/d/{fileId}/view
231
+
232
+ **Supported file types for content reading:**
233
+ - Text files (.txt, .md, .csv, .json, .xml, .html, .css, .js, etc.)
234
+ - Google Docs (exported as plain text)
235
+ - PDF files (text extraction)
236
+
237
+ **Not directly readable** (use specific tools instead):
238
+ - Google Sheets → Use sheets_read_values tool
239
+ - Google Slides → Use slides_get_presentation tool
240
+ - Google Docs → Use docs_get_document tool for better formatting
241
+ - Binary files (images, videos, archives)`),
242
+ });
243
+ /**
244
+ * Schema for drive_create_file tool
245
+ * Create a new file in Google Drive
246
+ */
247
+ export const DriveCreateFileSchema = z.object({
248
+ name: z
249
+ .string()
250
+ .describe("Filename including extension. Examples: 'meeting-notes.txt', 'report.md', 'data.csv', 'config.json'. The extension determines how the file is handled. Avoid special characters: < > : \" / \\ | ? * as they may cause issues."),
251
+ content: z
252
+ .string()
253
+ .describe("Text content for the file. The file is created as plain text (MIME type: text/plain). For structured data, format appropriately: use CSV format for tabular data, JSON for structured objects, Markdown for formatted documents."),
254
+ parentFolderId: z
255
+ .string()
256
+ .optional()
257
+ .describe("Google Drive folder ID where the file should be created. If omitted, file is created in 'My Drive' root. To get folder ID: use drive_list_files with query \"mimeType = 'application/vnd.google-apps.folder'\" or extract from folder URL: drive.google.com/drive/folders/{folderId}"),
258
+ });
259
+ // ============================================================================
260
+ // CALENDAR TOOLS (3 tools)
261
+ // ============================================================================
262
+ /**
263
+ * Schema for calendar_list_events tool
264
+ * List Google Calendar events
265
+ */
266
+ export const CalendarListEventsSchema = z.object({
267
+ maxResults: z
268
+ .number()
269
+ .int()
270
+ .positive()
271
+ .max(2500)
272
+ .optional()
273
+ .default(10)
274
+ .describe("Maximum number of upcoming events to return (1-2500, default: 10). Events are sorted chronologically by start time. Only future events from the current moment are returned. For past events, you would need to specify a timeMin parameter (not yet supported in this version)."),
275
+ calendarId: z
276
+ .string()
277
+ .optional()
278
+ .default("primary")
279
+ .describe(`Calendar to list events from. Options:
280
+
281
+ - 'primary' (default) - User's main/default calendar
282
+ - Specific calendar ID - Use the ID returned from calendar_list_calendars
283
+
284
+ **Common calendar IDs:**
285
+ - primary - User's primary calendar
286
+ - user@example.com - Calendar for specific Google account
287
+ - calendar_id@group.calendar.google.com - Shared/secondary calendars
288
+ - addressbook#contacts@group.v.calendar.google.com - Contacts' birthdays
289
+ - en.usa#holiday@group.v.calendar.google.com - US Holidays
290
+
291
+ First use calendar_list_calendars to discover available calendars and their IDs.`),
292
+ });
293
+ /**
294
+ * Schema for calendar_list_calendars tool
295
+ * List all calendars accessible to the user
296
+ */
297
+ export const CalendarListCalendarsSchema = z.object({}).describe("List all Google Calendars accessible to the user. Returns calendar ID, name, description, time zone, and whether it's the primary calendar. Use this to discover: user's own calendars, shared team calendars, subscribed calendars (holidays, sports, etc.), and resource calendars (meeting rooms). The returned calendar IDs can be used with calendar_list_events and calendar_create_event.");
298
+ /**
299
+ * Schema for calendar_create_event tool
300
+ * Create a new calendar event
301
+ */
302
+ export const CalendarCreateEventSchema = z.object({
303
+ summary: z
304
+ .string()
305
+ .describe("Event title displayed on the calendar. Best practices: Be descriptive but concise (e.g., 'Q4 Planning Meeting' not just 'Meeting'). Include key context like project name or team if relevant."),
306
+ startTime: z
307
+ .string()
308
+ .describe(`Event start time. Two formats supported:
309
+
310
+ **For timed events (specific time):**
311
+ ISO 8601 format with timezone offset or UTC:
312
+ - '2024-12-25T09:00:00-05:00' (with timezone offset, EST)
313
+ - '2024-12-25T14:00:00Z' (UTC)
314
+ - '2024-12-25T09:00:00+01:00' (with timezone offset, CET)
315
+
316
+ **For all-day events:**
317
+ Date only format:
318
+ - '2024-12-25' (starts at midnight in calendar's timezone)
319
+
320
+ **Timezone offset reference:**
321
+ - UTC/GMT: +00:00 or Z
322
+ - US Eastern: -05:00 (EST) or -04:00 (EDT)
323
+ - US Central: -06:00 (CST) or -05:00 (CDT)
324
+ - US Pacific: -08:00 (PST) or -07:00 (PDT)
325
+ - Europe Central: +01:00 (CET) or +02:00 (CEST)
326
+ - Asia Tokyo: +09:00 (JST)`),
327
+ endTime: z
328
+ .string()
329
+ .describe(`Event end time. Must be after startTime and use the same format:
330
+
331
+ **For timed events:** ISO 8601 format matching startTime's format
332
+ - Example: '2024-12-25T10:00:00-05:00' (1-hour meeting)
333
+
334
+ **For all-day events:** Date format (YYYY-MM-DD)
335
+ - IMPORTANT: The end date is exclusive. For a single all-day event on Dec 25th, use:
336
+ startTime: '2024-12-25', endTime: '2024-12-26'
337
+ - For a 3-day event (Dec 25-27):
338
+ startTime: '2024-12-25', endTime: '2024-12-28'`),
339
+ description: z
340
+ .string()
341
+ .optional()
342
+ .describe("Event description/notes. Appears in the event details when opened. Plain text format. Good for: meeting agenda, dial-in information, links to documents, preparation notes, or any additional context attendees need."),
343
+ calendarId: z
344
+ .string()
345
+ .optional()
346
+ .default("primary")
347
+ .describe("Calendar to create the event in. Default: 'primary' (user's main calendar). Use calendar_list_calendars to find other calendar IDs for shared or secondary calendars."),
348
+ });
349
+ // ============================================================================
350
+ // DOCS TOOLS (2 tools)
351
+ // ============================================================================
352
+ /**
353
+ * Schema for docs_get_document tool
354
+ * Get Google Docs document content
355
+ */
356
+ export const DocsGetDocumentSchema = z.object({
357
+ documentId: z
358
+ .string()
359
+ .describe(`The unique Google Docs document ID. How to obtain:
360
+
361
+ 1. **From drive_list_files**: Search for Google Docs using query "mimeType = 'application/vnd.google-apps.document'" and use the returned file ID
362
+ 2. **From document URL**: Extract the ID from the URL pattern:
363
+ docs.google.com/document/d/{documentId}/edit
364
+
365
+ **Example URL:** docs.google.com/document/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
366
+ **Document ID:** 1AbCdEfGhIjKlMnOpQrStUvWxYz
367
+
368
+ Returns: Document title and full text content extracted from all paragraphs. Note: Complex formatting (tables, images, drawings) may not be fully represented in the extracted text.`),
369
+ });
370
+ /**
371
+ * Schema for docs_create_document tool
372
+ * Create a new Google Docs document
373
+ */
374
+ export const DocsCreateDocumentSchema = z.object({
375
+ title: z
376
+ .string()
377
+ .describe("Title for the new Google Doc. This becomes the document name in Google Drive and appears at the top of the document. Choose a descriptive name for easy discovery later."),
378
+ content: z
379
+ .string()
380
+ .optional()
381
+ .describe("Initial text content to add to the document. Plain text format - the content is inserted at the beginning of the document. If omitted, creates an empty document. For complex formatting, create the document first, then use Google Docs directly to format."),
382
+ });
383
+ // ============================================================================
384
+ // SHEETS TOOLS (3 tools)
385
+ // ============================================================================
386
+ /**
387
+ * Schema for sheets_get_spreadsheet tool
388
+ * Get Google Sheets spreadsheet information
389
+ */
390
+ export const SheetsGetSpreadsheetSchema = z.object({
391
+ spreadsheetId: z
392
+ .string()
393
+ .describe(`The unique Google Sheets spreadsheet ID. How to obtain:
394
+
395
+ 1. **From drive_list_files**: Search using query "mimeType = 'application/vnd.google-apps.spreadsheet'" and use the returned file ID
396
+ 2. **From spreadsheet URL**: Extract from the URL pattern:
397
+ docs.google.com/spreadsheets/d/{spreadsheetId}/edit
398
+
399
+ **Example URL:** docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit#gid=0
400
+ **Spreadsheet ID:** 1AbCdEfGhIjKlMnOpQrStUvWxYz
401
+
402
+ Returns: Spreadsheet title and list of all sheets (tabs) with their sheet IDs and names. Use sheet names with sheets_read_values to read data from specific sheets.`),
403
+ });
404
+ /**
405
+ * Schema for sheets_read_values tool
406
+ * Read values from a Google Sheets range
407
+ */
408
+ export const SheetsReadValuesSchema = z.object({
409
+ spreadsheetId: z
410
+ .string()
411
+ .describe("The spreadsheet ID (see sheets_get_spreadsheet for how to obtain). Required to identify which spreadsheet to read from."),
412
+ range: z
413
+ .string()
414
+ .describe(`Cell range to read in A1 notation. Returns values as a 2D array (rows × columns).
415
+
416
+ **A1 NOTATION SYNTAX:**
417
+
418
+ **Basic ranges:**
419
+ - 'A1' - Single cell A1
420
+ - 'A1:C3' - Rectangle from A1 to C3 (3 rows × 3 columns)
421
+ - 'A:A' - Entire column A
422
+ - '1:1' - Entire row 1
423
+ - 'A:C' - Columns A through C
424
+ - '1:5' - Rows 1 through 5
425
+
426
+ **With sheet name (required for multi-sheet spreadsheets):**
427
+ - 'Sheet1!A1:C10' - Range in sheet named "Sheet1"
428
+ - 'Sales Data!A:B' - Columns A-B in sheet named "Sales Data"
429
+ - "'Sheet Name With Spaces'!A1:B5" - Use quotes for sheet names with spaces
430
+
431
+ **Open-ended ranges:**
432
+ - 'A1:A' - Column A starting from row 1 to end of data
433
+ - 'A1:1' - Row 1 starting from column A to end of data
434
+ - 'Sheet1!A:A' - Entire column A in Sheet1
435
+
436
+ **EXAMPLE SCENARIOS:**
437
+ - Read headers: 'Sheet1!1:1' (first row)
438
+ - Read first column: 'Sheet1!A:A'
439
+ - Read data table: 'Sheet1!A1:D100' (adjust range to your data)
440
+ - Read all data: 'Sheet1!A:Z' (reads columns A-Z with data)
441
+
442
+ **TIPS:**
443
+ - First use sheets_get_spreadsheet to see available sheet names
444
+ - Start with a larger range than needed - empty cells return empty strings
445
+ - Row 1 typically contains headers in most spreadsheets`),
446
+ });
447
+ /**
448
+ * Schema for sheets_create_spreadsheet tool
449
+ * Create a new Google Sheets spreadsheet
450
+ */
451
+ export const SheetsCreateSpreadsheetSchema = z.object({
452
+ title: z
453
+ .string()
454
+ .describe("Title for the new spreadsheet. This becomes the filename in Google Drive. The spreadsheet is created with one empty sheet named 'Sheet1'. After creation, use the Google Sheets UI or API to add data and additional sheets."),
455
+ });
456
+ // ============================================================================
457
+ // SLIDES TOOLS (2 tools)
458
+ // ============================================================================
459
+ /**
460
+ * Schema for slides_get_presentation tool
461
+ * Get Google Slides presentation information
462
+ */
463
+ export const SlidesGetPresentationSchema = z.object({
464
+ presentationId: z
465
+ .string()
466
+ .describe(`The unique Google Slides presentation ID. How to obtain:
467
+
468
+ 1. **From drive_list_files**: Search using query "mimeType = 'application/vnd.google-apps.presentation'" and use the returned file ID
469
+ 2. **From presentation URL**: Extract from the URL pattern:
470
+ docs.google.com/presentation/d/{presentationId}/edit
471
+
472
+ **Example URL:** docs.google.com/presentation/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
473
+ **Presentation ID:** 1AbCdEfGhIjKlMnOpQrStUvWxYz
474
+
475
+ Returns: Presentation title, slide count, and list of slides with their object IDs and layout references. Note: Full slide content (text, images, shapes) requires additional API calls not yet implemented in this version.`),
476
+ });
477
+ /**
478
+ * Schema for slides_create_presentation tool
479
+ * Create a new Google Slides presentation
480
+ */
481
+ export const SlidesCreatePresentationSchema = z.object({
482
+ title: z
483
+ .string()
484
+ .describe("Title for the new presentation. This becomes the filename in Google Drive and the presentation title. Creates a blank presentation with a single blank slide. Use the Google Slides UI to add content and additional slides."),
485
+ });
486
+ // ============================================================================
487
+ // TASKS TOOLS (3 tools)
488
+ // ============================================================================
489
+ /**
490
+ * Schema for tasks_list_task_lists tool
491
+ * List all Google Tasks task lists
492
+ */
493
+ export const TasksListTaskListsSchema = z.object({}).describe("List all Google Tasks task lists for the user. Every Google account has at least one task list. Returns task list IDs, titles, and last updated timestamps. Use the returned task list ID with tasks_list_tasks to view tasks or tasks_create_task to add tasks. The special ID '@default' can be used to reference the user's default task list without calling this tool first.");
494
+ /**
495
+ * Schema for tasks_list_tasks tool
496
+ * List tasks from a specific task list
497
+ */
498
+ export const TasksListTasksSchema = z.object({
499
+ taskListId: z
500
+ .string()
501
+ .describe(`The task list ID to retrieve tasks from. Options:
502
+
503
+ - '@default' - User's default/primary task list (use this if you don't need a specific list)
504
+ - Specific task list ID - Obtained from tasks_list_task_lists results
505
+
506
+ Returns all tasks in the list with: task ID, title, completion status (needsAction or completed), notes/description if any, due date if set, and last update timestamp. Tasks are returned in the order they appear in the list.`),
507
+ });
508
+ /**
509
+ * Schema for tasks_create_task tool
510
+ * Create a new task in a task list
511
+ */
512
+ export const TasksCreateTaskSchema = z.object({
513
+ taskListId: z
514
+ .string()
515
+ .describe("The task list ID to add the task to. Use '@default' for the user's default task list, or a specific ID from tasks_list_task_lists."),
516
+ title: z
517
+ .string()
518
+ .describe("Task title - the main task description. Keep it concise and actionable (e.g., 'Review Q4 budget proposal' rather than 'Budget'). This is the primary text shown in the task list."),
519
+ notes: z
520
+ .string()
521
+ .optional()
522
+ .describe("Additional notes or details about the task. Use for: context, sub-tasks listed as text, links to relevant resources, or any information needed to complete the task. Displayed when viewing task details."),
523
+ due: z
524
+ .string()
525
+ .optional()
526
+ .describe(`Due date in RFC 3339 timestamp format. Only the date portion is used (time is ignored by Google Tasks).
527
+
528
+ **Format:** YYYY-MM-DDTHH:MM:SS.000Z
529
+
530
+ **Examples:**
531
+ - '2024-12-31T00:00:00.000Z' - Due December 31, 2024
532
+ - '2025-01-15T00:00:00.000Z' - Due January 15, 2025
533
+
534
+ **Note:** Setting a time is not meaningful - Google Tasks only tracks the date. The task will appear as due on that calendar date.`),
535
+ });
536
+ // ============================================================================
537
+ // FORMS TOOLS (2 tools)
538
+ // ============================================================================
539
+ /**
540
+ * Schema for forms_create_form tool
541
+ * Create a new Google Form
542
+ */
543
+ export const FormsCreateFormSchema = z.object({
544
+ title: z
545
+ .string()
546
+ .describe("Title for the new Google Form. This appears at the top of the form and as the filename in Google Drive. Creates an empty form with no questions. Use the Google Forms UI at the returned edit URL to add questions, sections, and configure settings."),
547
+ });
548
+ /**
549
+ * Schema for forms_get_form tool
550
+ * Get Google Form information
551
+ */
552
+ export const FormsGetFormSchema = z.object({
553
+ formId: z
554
+ .string()
555
+ .describe(`The unique Google Forms form ID. How to obtain:
556
+
557
+ 1. **From drive_list_files**: Search using query "mimeType = 'application/vnd.google-apps.form'" and use the returned file ID
558
+ 2. **From form URL**: Extract from the URL pattern:
559
+ - Edit URL: docs.google.com/forms/d/{formId}/edit
560
+ - View URL: docs.google.com/forms/d/{formId}/viewform
561
+
562
+ **Example URL:** docs.google.com/forms/d/1AbCdEfGhIjKlMnOpQrStUvWxYz/edit
563
+ **Form ID:** 1AbCdEfGhIjKlMnOpQrStUvWxYz
564
+
565
+ Returns: Form title, document title, description, and the responder URI (the URL to share with people who should fill out the form).`),
566
+ });
567
+ // ============================================================================
568
+ // CHAT TOOLS (2 tools)
569
+ // ============================================================================
570
+ /**
571
+ * Schema for chat_list_spaces tool
572
+ * List Google Chat spaces
573
+ */
574
+ export const ChatListSpacesSchema = z.object({}).describe("List all Google Chat spaces accessible to the user. Returns spaces including: direct message conversations (DMs), group conversations, and named spaces (rooms). For each space, returns the space resource name (spaces/{spaceId}), display name, and space type (DIRECT_MESSAGE, GROUP_CHAT, or SPACE). Use the space resource name with chat_send_message to send messages. Note: Requires the user's Google Workspace account to have Google Chat enabled.");
575
+ /**
576
+ * Schema for chat_send_message tool
577
+ * Send a message to a Google Chat space
578
+ */
579
+ export const ChatSendMessageSchema = z.object({
580
+ spaceName: z
581
+ .string()
582
+ .describe(`The Google Chat space resource name. Format: 'spaces/{spaceId}'
583
+
584
+ **How to obtain:**
585
+ 1. Use chat_list_spaces to list available spaces
586
+ 2. Use the 'name' field from the results (e.g., 'spaces/AAAA1234567')
587
+
588
+ **Space types you can message:**
589
+ - Direct messages (DMs) with individuals
590
+ - Group conversations
591
+ - Named spaces (rooms) where you're a member
592
+
593
+ The space name is NOT the display name - it's the technical resource identifier.`),
594
+ text: z
595
+ .string()
596
+ .describe(`Message text to send. Plain text with optional basic formatting:
597
+
598
+ **Formatting options:**
599
+ - *bold text* - Surround with asterisks
600
+ - _italic text_ - Surround with underscores
601
+ - ~strikethrough~ - Surround with tildes
602
+ - \`inline code\` - Surround with backticks
603
+ - \`\`\`code block\`\`\` - Triple backticks for code blocks
604
+
605
+ **Best practices:**
606
+ - Keep messages concise and actionable
607
+ - Use formatting sparingly for emphasis
608
+ - Break long content into multiple messages if needed
609
+ - @mentions are not supported via this API`),
610
+ });
611
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Tool configuration loader
3
+ * Loads tool definitions from tools.json and validates them
4
+ *
5
+ * Supports loading from (in priority order):
6
+ * 1. Custom path via TOOLS_CONFIG_PATH environment variable
7
+ * 2. tools.json in current working directory (for development)
8
+ * 3. tools.json in package installation directory (for npx/installed usage)
9
+ */
10
+ export interface ToolDefinition {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: string;
15
+ properties: Record<string, unknown>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ export interface ToolsConfig {
20
+ [toolName: string]: ToolDefinition;
21
+ }
22
+ /**
23
+ * Load tool definitions from tools.json
24
+ * Uses caching in production, always reloads in development
25
+ */
26
+ export declare function loadToolDefinitions(forceReload?: boolean): ToolDefinition[];
27
+ /**
28
+ * Get a specific tool definition by name
29
+ */
30
+ export declare function getToolDefinition(toolName: string): ToolDefinition | undefined;
31
+ /**
32
+ * Clear the tool cache (useful for testing or forced reloads)
33
+ */
34
+ export declare function clearToolCache(): void;
35
+ //# sourceMappingURL=tool-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-loader.d.ts","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC;CACpC;AAmDD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,UAAQ,GAAG,cAAc,EAAE,CAwDzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG9E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}