@aaronsb/google-workspace-mcp 2.7.1 → 4.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.
- package/LICENSE +201 -21
- package/LICENSE-MIT +21 -0
- package/NOTICE +24 -0
- package/README.md +87 -57
- package/build/accounts/auth.d.ts +1 -1
- package/build/accounts/auth.js +1 -1
- package/build/accounts/oauth.js +3 -3
- package/build/accounts/oauth.js.map +1 -1
- package/build/accounts/token-service.js +1 -1
- package/build/accounts/token-service.js.map +1 -1
- package/build/coverage/analyze.d.ts +1 -1
- package/build/coverage/analyze.js +6 -4
- package/build/coverage/analyze.js.map +1 -1
- package/build/coverage/baseline.js +37 -20
- package/build/coverage/baseline.js.map +1 -1
- package/build/coverage/compare.d.ts +1 -1
- package/build/coverage/compare.js +19 -10
- package/build/coverage/compare.js.map +1 -1
- package/build/coverage/discover.d.ts +5 -5
- package/build/coverage/discover.js +71 -155
- package/build/coverage/discover.js.map +1 -1
- package/build/coverage/report.js +3 -3
- package/build/coverage/report.js.map +1 -1
- package/build/coverage/types.d.ts +19 -4
- package/build/executor/index.d.ts +0 -3
- package/build/executor/index.js +1 -2
- package/build/executor/index.js.map +1 -1
- package/build/factory/defaults.js +30 -4
- package/build/factory/defaults.js.map +1 -1
- package/build/factory/generator.d.ts +10 -4
- package/build/factory/generator.js +86 -96
- package/build/factory/generator.js.map +1 -1
- package/build/factory/manifest/README.md +4 -3
- package/build/factory/manifest/calendar.yaml +1 -11
- package/build/factory/manifest/docs.yaml +15 -6
- package/build/factory/manifest/drive.yaml +1 -5
- package/build/factory/manifest/gmail.yaml +32 -25
- package/build/factory/manifest/meet.yaml +1 -1
- package/build/factory/manifest/sheets.yaml +2 -5
- package/build/factory/manifest/tasks.yaml +40 -2
- package/build/factory/patches.js +2 -0
- package/build/factory/patches.js.map +1 -1
- package/build/factory/registry.d.ts +2 -3
- package/build/factory/registry.js +3 -9
- package/build/factory/registry.js.map +1 -1
- package/build/factory/safety.js +4 -4
- package/build/factory/safety.js.map +1 -1
- package/build/factory/types.d.ts +16 -15
- package/build/google/client.d.ts +45 -0
- package/build/google/client.js +232 -0
- package/build/google/client.js.map +1 -0
- package/build/google/descriptor.d.ts +40 -0
- package/build/google/descriptor.js +37 -0
- package/build/google/descriptor.js.map +1 -0
- package/build/google/descriptor.json +5271 -0
- package/build/google/errors.d.ts +45 -0
- package/build/google/errors.js +44 -0
- package/build/google/errors.js.map +1 -0
- package/build/google/methods.d.ts +37 -0
- package/build/google/methods.js +13 -0
- package/build/google/methods.js.map +1 -0
- package/build/index.js +30 -4
- package/build/index.js.map +1 -1
- package/build/node-floor.d.ts +16 -0
- package/build/node-floor.js +73 -0
- package/build/node-floor.js.map +1 -0
- package/build/server/formatting/markdown.d.ts +1 -1
- package/build/server/formatting/markdown.js +1 -1
- package/build/server/formatting/next-steps.js +1 -1
- package/build/server/formatting/next-steps.js.map +1 -1
- package/build/server/handlers/accounts.js +2 -2
- package/build/server/handlers/accounts.js.map +1 -1
- package/build/server/scratchpad/adapters/import-doc.js +15 -13
- package/build/server/scratchpad/adapters/import-doc.js.map +1 -1
- package/build/server/scratchpad/adapters/import-drive.js +16 -11
- package/build/server/scratchpad/adapters/import-drive.js.map +1 -1
- package/build/server/scratchpad/adapters/import-email.js +3 -15
- package/build/server/scratchpad/adapters/import-email.js.map +1 -1
- package/build/server/scratchpad/adapters/import-meet.js +5 -17
- package/build/server/scratchpad/adapters/import-meet.js.map +1 -1
- package/build/server/scratchpad/adapters/import-sheet.js +5 -6
- package/build/server/scratchpad/adapters/import-sheet.js.map +1 -1
- package/build/server/scratchpad/adapters/send-calendar.js +18 -13
- package/build/server/scratchpad/adapters/send-calendar.js.map +1 -1
- package/build/server/scratchpad/adapters/send-doc.js +22 -17
- package/build/server/scratchpad/adapters/send-doc.js.map +1 -1
- package/build/server/scratchpad/adapters/send-email-draft.d.ts +1 -1
- package/build/server/scratchpad/adapters/send-email-draft.js +17 -25
- package/build/server/scratchpad/adapters/send-email-draft.js.map +1 -1
- package/build/server/scratchpad/adapters/send-email.d.ts +2 -2
- package/build/server/scratchpad/adapters/send-email.js +21 -25
- package/build/server/scratchpad/adapters/send-email.js.map +1 -1
- package/build/server/scratchpad/adapters/send-sheet.js +10 -10
- package/build/server/scratchpad/adapters/send-sheet.js.map +1 -1
- package/build/server/scratchpad/adapters/send-task.js +9 -8
- package/build/server/scratchpad/adapters/send-task.js.map +1 -1
- package/build/server/scratchpad/handler.js +22 -28
- package/build/server/scratchpad/handler.js.map +1 -1
- package/build/server/scratchpad/manager.d.ts +1 -1
- package/build/server/server.js +13 -10
- package/build/server/server.js.map +1 -1
- package/build/server/session/tracker.js +21 -25
- package/build/server/session/tracker.js.map +1 -1
- package/build/server/tools.d.ts +1 -1
- package/build/server/tools.js +3 -3
- package/build/server/tools.js.map +1 -1
- package/build/services/calendar/patch.js +178 -68
- package/build/services/calendar/patch.js.map +1 -1
- package/build/services/docs/patch.d.ts +5 -3
- package/build/services/docs/patch.js +89 -19
- package/build/services/docs/patch.js.map +1 -1
- package/build/services/drive/patch.d.ts +1 -1
- package/build/services/drive/patch.js +115 -143
- package/build/services/drive/patch.js.map +1 -1
- package/build/services/gmail/attachments.js +10 -15
- package/build/services/gmail/attachments.js.map +1 -1
- package/build/services/gmail/mail.d.ts +34 -0
- package/build/services/gmail/mail.js +245 -0
- package/build/services/gmail/mail.js.map +1 -0
- package/build/services/gmail/mime.d.ts +45 -4
- package/build/services/gmail/mime.js +138 -4
- package/build/services/gmail/mime.js.map +1 -1
- package/build/services/gmail/patch.js +103 -53
- package/build/services/gmail/patch.js.map +1 -1
- package/build/services/meet/patch.js +24 -31
- package/build/services/meet/patch.js.map +1 -1
- package/build/services/sheets/patch.js +30 -35
- package/build/services/sheets/patch.js.map +1 -1
- package/build/services/tasks/patch.d.ts +18 -0
- package/build/services/tasks/patch.js +37 -0
- package/build/services/tasks/patch.js.map +1 -0
- package/build/version.d.ts +1 -1
- package/build/version.js +2 -2
- package/build/version.js.map +1 -1
- package/package.json +23 -12
- package/build/__helpers__/testSetup.d.ts +0 -1
- package/build/__helpers__/testSetup.js +0 -6
- package/build/__helpers__/testSetup.js.map +0 -1
- package/build/__tests__/accounts/credentials.test.d.ts +0 -1
- package/build/__tests__/accounts/credentials.test.js +0 -127
- package/build/__tests__/accounts/credentials.test.js.map +0 -1
- package/build/__tests__/accounts/oauth.test.d.ts +0 -1
- package/build/__tests__/accounts/oauth.test.js +0 -71
- package/build/__tests__/accounts/oauth.test.js.map +0 -1
- package/build/__tests__/accounts/registry.test.d.ts +0 -1
- package/build/__tests__/accounts/registry.test.js +0 -74
- package/build/__tests__/accounts/registry.test.js.map +0 -1
- package/build/__tests__/accounts/token-service.test.d.ts +0 -1
- package/build/__tests__/accounts/token-service.test.js +0 -126
- package/build/__tests__/accounts/token-service.test.js.map +0 -1
- package/build/__tests__/executor/errors.test.d.ts +0 -1
- package/build/__tests__/executor/errors.test.js +0 -42
- package/build/__tests__/executor/errors.test.js.map +0 -1
- package/build/__tests__/executor/gws.test.d.ts +0 -1
- package/build/__tests__/executor/gws.test.js +0 -187
- package/build/__tests__/executor/gws.test.js.map +0 -1
- package/build/__tests__/executor/paths.test.d.ts +0 -1
- package/build/__tests__/executor/paths.test.js +0 -60
- package/build/__tests__/executor/paths.test.js.map +0 -1
- package/build/__tests__/executor/resolve-binary.test.d.ts +0 -1
- package/build/__tests__/executor/resolve-binary.test.js +0 -58
- package/build/__tests__/executor/resolve-binary.test.js.map +0 -1
- package/build/__tests__/executor/workspace.test.d.ts +0 -1
- package/build/__tests__/executor/workspace.test.js +0 -143
- package/build/__tests__/executor/workspace.test.js.map +0 -1
- package/build/__tests__/factory/calendar-patch.test.d.ts +0 -5
- package/build/__tests__/factory/calendar-patch.test.js +0 -269
- package/build/__tests__/factory/calendar-patch.test.js.map +0 -1
- package/build/__tests__/factory/drive-patch.test.d.ts +0 -5
- package/build/__tests__/factory/drive-patch.test.js +0 -344
- package/build/__tests__/factory/drive-patch.test.js.map +0 -1
- package/build/__tests__/factory/generator.test.d.ts +0 -1
- package/build/__tests__/factory/generator.test.js +0 -240
- package/build/__tests__/factory/generator.test.js.map +0 -1
- package/build/__tests__/factory/patch-coverage.test.d.ts +0 -10
- package/build/__tests__/factory/patch-coverage.test.js +0 -182
- package/build/__tests__/factory/patch-coverage.test.js.map +0 -1
- package/build/__tests__/factory/safety.test.d.ts +0 -1
- package/build/__tests__/factory/safety.test.js +0 -107
- package/build/__tests__/factory/safety.test.js.map +0 -1
- package/build/__tests__/factory/sheets-patch.test.d.ts +0 -6
- package/build/__tests__/factory/sheets-patch.test.js +0 -498
- package/build/__tests__/factory/sheets-patch.test.js.map +0 -1
- package/build/__tests__/integration/executor.test.d.ts +0 -5
- package/build/__tests__/integration/executor.test.js +0 -38
- package/build/__tests__/integration/executor.test.js.map +0 -1
- package/build/__tests__/integration/handlers.test.d.ts +0 -6
- package/build/__tests__/integration/handlers.test.js +0 -95
- package/build/__tests__/integration/handlers.test.js.map +0 -1
- package/build/__tests__/integration/setup.d.ts +0 -19
- package/build/__tests__/integration/setup.js +0 -61
- package/build/__tests__/integration/setup.js.map +0 -1
- package/build/__tests__/server/formatting/html-sanitize.test.d.ts +0 -7
- package/build/__tests__/server/formatting/html-sanitize.test.js +0 -174
- package/build/__tests__/server/formatting/html-sanitize.test.js.map +0 -1
- package/build/__tests__/server/formatting/markdown.test.d.ts +0 -1
- package/build/__tests__/server/formatting/markdown.test.js +0 -259
- package/build/__tests__/server/formatting/markdown.test.js.map +0 -1
- package/build/__tests__/server/formatting/next-steps.test.d.ts +0 -1
- package/build/__tests__/server/formatting/next-steps.test.js +0 -42
- package/build/__tests__/server/formatting/next-steps.test.js.map +0 -1
- package/build/__tests__/server/handler.test.d.ts +0 -1
- package/build/__tests__/server/handler.test.js +0 -97
- package/build/__tests__/server/handler.test.js.map +0 -1
- package/build/__tests__/server/handlers/__mocks__/executor.d.ts +0 -173
- package/build/__tests__/server/handlers/__mocks__/executor.js +0 -135
- package/build/__tests__/server/handlers/__mocks__/executor.js.map +0 -1
- package/build/__tests__/server/handlers/accounts.test.d.ts +0 -1
- package/build/__tests__/server/handlers/accounts.test.js +0 -129
- package/build/__tests__/server/handlers/accounts.test.js.map +0 -1
- package/build/__tests__/server/handlers/calendar.test.d.ts +0 -1
- package/build/__tests__/server/handlers/calendar.test.js +0 -96
- package/build/__tests__/server/handlers/calendar.test.js.map +0 -1
- package/build/__tests__/server/handlers/drive.test.d.ts +0 -1
- package/build/__tests__/server/handlers/drive.test.js +0 -68
- package/build/__tests__/server/handlers/drive.test.js.map +0 -1
- package/build/__tests__/server/handlers/email.test.d.ts +0 -1
- package/build/__tests__/server/handlers/email.test.js +0 -99
- package/build/__tests__/server/handlers/email.test.js.map +0 -1
- package/build/__tests__/server/handlers/validate.test.d.ts +0 -1
- package/build/__tests__/server/handlers/validate.test.js +0 -88
- package/build/__tests__/server/handlers/validate.test.js.map +0 -1
- package/build/__tests__/server/queue.test.d.ts +0 -1
- package/build/__tests__/server/queue.test.js +0 -199
- package/build/__tests__/server/queue.test.js.map +0 -1
- package/build/__tests__/server/server.test.d.ts +0 -7
- package/build/__tests__/server/server.test.js +0 -135
- package/build/__tests__/server/server.test.js.map +0 -1
- package/build/__tests__/server/session/context.test.d.ts +0 -1
- package/build/__tests__/server/session/context.test.js +0 -101
- package/build/__tests__/server/session/context.test.js.map +0 -1
- package/build/__tests__/server/session/tracker.test.d.ts +0 -1
- package/build/__tests__/server/session/tracker.test.js +0 -146
- package/build/__tests__/server/session/tracker.test.js.map +0 -1
- package/build/__tests__/server/tools.test.d.ts +0 -1
- package/build/__tests__/server/tools.test.js +0 -91
- package/build/__tests__/server/tools.test.js.map +0 -1
- package/build/__tests__/services/gmail/mime.test.d.ts +0 -1
- package/build/__tests__/services/gmail/mime.test.js +0 -23
- package/build/__tests__/services/gmail/mime.test.js.map +0 -1
- package/build/__tests__/services/meet/patch.test.d.ts +0 -4
- package/build/__tests__/services/meet/patch.test.js +0 -374
- package/build/__tests__/services/meet/patch.test.js.map +0 -1
- package/build/executor/errors.d.ts +0 -15
- package/build/executor/errors.js +0 -37
- package/build/executor/errors.js.map +0 -1
- package/build/executor/gws.d.ts +0 -26
- package/build/executor/gws.js +0 -197
- package/build/executor/gws.js.map +0 -1
- package/build/server/handlers/calendar.d.ts +0 -2
- package/build/server/handlers/calendar.js +0 -97
- package/build/server/handlers/calendar.js.map +0 -1
- package/build/server/handlers/drive.d.ts +0 -2
- package/build/server/handlers/drive.js +0 -58
- package/build/server/handlers/drive.js.map +0 -1
- package/build/server/handlers/email.d.ts +0 -2
- package/build/server/handlers/email.js +0 -119
- package/build/server/handlers/email.js.map +0 -1
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.d.ts +0 -11
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.js +0 -187
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/docs-sync.test.d.ts +0 -16
- package/build/server/scratchpad/__tests__/docs-sync.test.js +0 -213
- package/build/server/scratchpad/__tests__/docs-sync.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/json-path.test.d.ts +0 -4
- package/build/server/scratchpad/__tests__/json-path.test.js +0 -121
- package/build/server/scratchpad/__tests__/json-path.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/manager.test.d.ts +0 -5
- package/build/server/scratchpad/__tests__/manager.test.js +0 -886
- package/build/server/scratchpad/__tests__/manager.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/validate.test.d.ts +0 -4
- package/build/server/scratchpad/__tests__/validate.test.js +0 -112
- package/build/server/scratchpad/__tests__/validate.test.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_email
|
|
2
2
|
description: "Search, read, send, forward, or manage emails in a Google Workspace account. Supports Gmail search syntax."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: gmail
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
# --- Core message operations ---
|
|
@@ -49,7 +49,6 @@ operations:
|
|
|
49
49
|
send:
|
|
50
50
|
type: action
|
|
51
51
|
description: "compose and send a new email (creates draft when attachments present, 35MB attachment limit via upload endpoint)"
|
|
52
|
-
helper: "+send"
|
|
53
52
|
params:
|
|
54
53
|
to:
|
|
55
54
|
type: string
|
|
@@ -63,6 +62,9 @@ operations:
|
|
|
63
62
|
type: string
|
|
64
63
|
description: "Email body text"
|
|
65
64
|
required: true
|
|
65
|
+
from:
|
|
66
|
+
type: string
|
|
67
|
+
description: "Sender email or RFC 2822 mailbox for a verified Gmail Send As alias"
|
|
66
68
|
cc:
|
|
67
69
|
type: string
|
|
68
70
|
description: "CC email(s), comma-separated"
|
|
@@ -78,17 +80,10 @@ operations:
|
|
|
78
80
|
draft:
|
|
79
81
|
type: boolean
|
|
80
82
|
description: "Save as draft instead of sending (default: false, forced true when attachments present)"
|
|
81
|
-
cli_args:
|
|
82
|
-
to: "--to"
|
|
83
|
-
subject: "--subject"
|
|
84
|
-
body: "--body"
|
|
85
|
-
cc: "--cc"
|
|
86
|
-
bcc: "--bcc"
|
|
87
83
|
|
|
88
84
|
reply:
|
|
89
85
|
type: action
|
|
90
|
-
description: "reply to a message (thread-aware)"
|
|
91
|
-
helper: "+reply"
|
|
86
|
+
description: "reply to a message (thread-aware, creates draft when attachments present)"
|
|
92
87
|
params:
|
|
93
88
|
messageId:
|
|
94
89
|
type: string
|
|
@@ -98,14 +93,19 @@ operations:
|
|
|
98
93
|
type: string
|
|
99
94
|
description: "Reply body text"
|
|
100
95
|
required: true
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
attachments:
|
|
97
|
+
type: string
|
|
98
|
+
description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
|
|
99
|
+
html:
|
|
100
|
+
type: boolean
|
|
101
|
+
description: "Treat body as HTML content (default: plain text)"
|
|
102
|
+
draft:
|
|
103
|
+
type: boolean
|
|
104
|
+
description: "Save as draft instead of sending (default: false, forced true when attachments present)"
|
|
104
105
|
|
|
105
106
|
replyAll:
|
|
106
107
|
type: action
|
|
107
|
-
description: "reply-all to a message (thread-aware, includes all recipients)"
|
|
108
|
-
helper: "+reply-all"
|
|
108
|
+
description: "reply-all to a message (thread-aware, includes all recipients, creates draft when attachments present)"
|
|
109
109
|
params:
|
|
110
110
|
messageId:
|
|
111
111
|
type: string
|
|
@@ -118,15 +118,19 @@ operations:
|
|
|
118
118
|
cc:
|
|
119
119
|
type: string
|
|
120
120
|
description: "Additional CC email(s), comma-separated"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
attachments:
|
|
122
|
+
type: string
|
|
123
|
+
description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
|
|
124
|
+
html:
|
|
125
|
+
type: boolean
|
|
126
|
+
description: "Treat body as HTML content (default: plain text)"
|
|
127
|
+
draft:
|
|
128
|
+
type: boolean
|
|
129
|
+
description: "Save as draft instead of sending (default: false, forced true when attachments present)"
|
|
125
130
|
|
|
126
131
|
forward:
|
|
127
132
|
type: action
|
|
128
133
|
description: "forward a message to new recipients (includes original attachments by default)"
|
|
129
|
-
helper: "+forward"
|
|
130
134
|
params:
|
|
131
135
|
messageId:
|
|
132
136
|
type: string
|
|
@@ -139,17 +143,20 @@ operations:
|
|
|
139
143
|
body:
|
|
140
144
|
type: string
|
|
141
145
|
description: "Optional note to prepend above forwarded message"
|
|
142
|
-
cli_args:
|
|
143
|
-
messageId: "--message-id"
|
|
144
|
-
to: "--to"
|
|
145
|
-
body: "--body"
|
|
146
146
|
|
|
147
147
|
# --- Inbox management ---
|
|
148
148
|
|
|
149
|
+
# triage is just a filtered list: messages.list with an unread query. The
|
|
150
|
+
# hydration walk (messages.get per id) is already done by gmailPatch.afterExecute,
|
|
151
|
+
# which also carries threadId and snippet.
|
|
149
152
|
triage:
|
|
150
153
|
type: list
|
|
151
154
|
description: "unread inbox summary (sender, subject, date)"
|
|
152
|
-
|
|
155
|
+
resource: users.messages.list
|
|
156
|
+
defaults:
|
|
157
|
+
userId: me
|
|
158
|
+
q: "is:unread in:inbox"
|
|
159
|
+
maxResults: 20
|
|
153
160
|
|
|
154
161
|
trash:
|
|
155
162
|
type: action
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_meet
|
|
2
2
|
description: "Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes. Requires Workspace Business Standard+ for transcripts/recordings."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: meet
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
# --- Conference records ---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_sheets
|
|
2
2
|
description: "Read, write, and manage Google Sheets spreadsheets."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: sheets
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
get:
|
|
@@ -26,7 +26,7 @@ operations:
|
|
|
26
26
|
read:
|
|
27
27
|
type: detail
|
|
28
28
|
description: "read cell values from a range; rendered rows are prefixed with their sheet row number (e.g. 'R3: …') since blank rows are otherwise invisible"
|
|
29
|
-
|
|
29
|
+
resource: spreadsheets.values.get
|
|
30
30
|
params:
|
|
31
31
|
spreadsheetId:
|
|
32
32
|
type: string
|
|
@@ -36,9 +36,6 @@ operations:
|
|
|
36
36
|
type: string
|
|
37
37
|
description: "Range to read (e.g. 'Sheet1!A1:D10' or just 'Sheet1')"
|
|
38
38
|
required: true
|
|
39
|
-
cli_args:
|
|
40
|
-
spreadsheetId: "--spreadsheet"
|
|
41
|
-
range: "--range"
|
|
42
39
|
|
|
43
40
|
append:
|
|
44
41
|
type: action
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_tasks
|
|
2
2
|
description: "Manage task lists and tasks in Google Tasks."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: tasks
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
# --- Task lists ---
|
|
@@ -22,10 +22,18 @@ operations:
|
|
|
22
22
|
required: true
|
|
23
23
|
maps_to: tasklist
|
|
24
24
|
|
|
25
|
+
# A TaskList's only meaningful field is its title, and it rides in the BODY —
|
|
26
|
+
# tasklists.insert declares no parameters. Without it this could only ever create
|
|
27
|
+
# nameless task lists, and did so without complaint.
|
|
25
28
|
createTaskList:
|
|
26
29
|
type: action
|
|
27
30
|
description: "create a new task list"
|
|
28
31
|
resource: tasklists.insert
|
|
32
|
+
params:
|
|
33
|
+
title:
|
|
34
|
+
type: string
|
|
35
|
+
description: "Task list name"
|
|
36
|
+
required: true
|
|
29
37
|
|
|
30
38
|
deleteTaskList:
|
|
31
39
|
type: action
|
|
@@ -75,6 +83,10 @@ operations:
|
|
|
75
83
|
required: true
|
|
76
84
|
maps_to: task
|
|
77
85
|
|
|
86
|
+
# title / notes / due are BODY fields (the Task resource). tasks.insert declares only
|
|
87
|
+
# `tasklist` (path) and `parent`/`previous` (query), so anything else goes in the body.
|
|
88
|
+
# Without them, `create` sent an empty Task and produced a BLANK task — no title, no
|
|
89
|
+
# content, no error. A titleless task is not a degraded task; it is a useless one.
|
|
78
90
|
create:
|
|
79
91
|
type: action
|
|
80
92
|
description: "create a new task"
|
|
@@ -85,10 +97,23 @@ operations:
|
|
|
85
97
|
description: "Task list ID"
|
|
86
98
|
required: true
|
|
87
99
|
maps_to: tasklist
|
|
100
|
+
title:
|
|
101
|
+
type: string
|
|
102
|
+
description: "Task title"
|
|
103
|
+
required: true
|
|
104
|
+
notes:
|
|
105
|
+
type: string
|
|
106
|
+
description: "Task notes / details"
|
|
107
|
+
due:
|
|
108
|
+
type: string
|
|
109
|
+
description: "Due date (RFC 3339, e.g. 2026-07-20T00:00:00.000Z — Google stores the date, not the time)"
|
|
88
110
|
|
|
111
|
+
# An `update` with no updatable fields could only ever PATCH an empty body, which
|
|
112
|
+
# Google Tasks answers with a 500 "Internal error encountered". So this operation did
|
|
113
|
+
# not merely fail to update — it failed EVERY time, and blamed Google while doing it.
|
|
89
114
|
update:
|
|
90
115
|
type: action
|
|
91
|
-
description: "update a task (patch semantics)"
|
|
116
|
+
description: "update a task (patch semantics — only the fields you pass are changed)"
|
|
92
117
|
resource: tasks.patch
|
|
93
118
|
params:
|
|
94
119
|
taskListId:
|
|
@@ -101,6 +126,19 @@ operations:
|
|
|
101
126
|
description: "Task ID"
|
|
102
127
|
required: true
|
|
103
128
|
maps_to: task
|
|
129
|
+
title:
|
|
130
|
+
type: string
|
|
131
|
+
description: "New task title"
|
|
132
|
+
notes:
|
|
133
|
+
type: string
|
|
134
|
+
description: "New task notes / details"
|
|
135
|
+
due:
|
|
136
|
+
type: string
|
|
137
|
+
description: "New due date (RFC 3339)"
|
|
138
|
+
status:
|
|
139
|
+
type: string
|
|
140
|
+
description: "Task status"
|
|
141
|
+
enum: [needsAction, completed]
|
|
104
142
|
|
|
105
143
|
complete:
|
|
106
144
|
type: action
|
package/build/factory/patches.js
CHANGED
|
@@ -8,6 +8,7 @@ import { drivePatch } from '../services/drive/patch.js';
|
|
|
8
8
|
import { docsPatch } from '../services/docs/patch.js';
|
|
9
9
|
import { meetPatch } from '../services/meet/patch.js';
|
|
10
10
|
import { sheetsPatch } from '../services/sheets/patch.js';
|
|
11
|
+
import { tasksPatch } from '../services/tasks/patch.js';
|
|
11
12
|
export const patches = {
|
|
12
13
|
gmail: gmailPatch,
|
|
13
14
|
calendar: calendarPatch,
|
|
@@ -15,5 +16,6 @@ export const patches = {
|
|
|
15
16
|
docs: docsPatch,
|
|
16
17
|
meet: meetPatch,
|
|
17
18
|
sheets: sheetsPatch,
|
|
19
|
+
tasks: tasksPatch,
|
|
18
20
|
};
|
|
19
21
|
//# sourceMappingURL=patches.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patches.js","sourceRoot":"","sources":["../../src/factory/patches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"patches.js","sourceRoot":"","sources":["../../src/factory/patches.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,MAAM,CAAC,MAAM,OAAO,GAAiC;IACnD,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;CAClB,CAAC"}
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Shared factory registry — single instance of manifest + generated tools.
|
|
3
3
|
* Both handler.ts and tools.ts import from here instead of loading independently.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* or mcpb where cwd is NOT the project root.
|
|
5
|
+
* generator.ts resolves the manifest relative to its own module directory, so
|
|
6
|
+
* this works under npx and .mcpb where cwd is NOT the project root.
|
|
8
7
|
*/
|
|
9
8
|
import type { GeneratedTool } from './types.js';
|
|
10
9
|
import type { Manifest } from './types.js';
|
|
@@ -2,17 +2,11 @@
|
|
|
2
2
|
* Shared factory registry — single instance of manifest + generated tools.
|
|
3
3
|
* Both handler.ts and tools.ts import from here instead of loading independently.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* or mcpb where cwd is NOT the project root.
|
|
5
|
+
* generator.ts resolves the manifest relative to its own module directory, so
|
|
6
|
+
* this works under npx and .mcpb where cwd is NOT the project root.
|
|
8
7
|
*/
|
|
9
|
-
import {
|
|
10
|
-
import { fileURLToPath } from 'node:url';
|
|
11
|
-
import { setModuleDir, loadManifest, generateTools } from './generator.js';
|
|
8
|
+
import { loadManifest, generateTools } from './generator.js';
|
|
12
9
|
import { patches } from './patches.js';
|
|
13
|
-
// Inject module directory so loadManifest can find the manifest directory
|
|
14
|
-
// relative to the built output (build/factory/registry.js → build/factory/manifest/)
|
|
15
|
-
setModuleDir(dirname(fileURLToPath(import.meta.url)));
|
|
16
10
|
export const manifest = loadManifest();
|
|
17
11
|
export const generatedTools = generateTools(manifest, patches);
|
|
18
12
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/factory/registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/factory/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,CAAC,MAAM,QAAQ,GAAa,YAAY,EAAE,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAoB,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
|
package/build/factory/safety.js
CHANGED
|
@@ -113,7 +113,7 @@ export const auditLog = {
|
|
|
113
113
|
applies: () => true,
|
|
114
114
|
evaluate: (_args, ctx, service) => {
|
|
115
115
|
if (!isReadOperation(ctx.operation)) {
|
|
116
|
-
process.stderr.write(`[
|
|
116
|
+
process.stderr.write(`[google-workspace-mcp] AUDIT: ${service}.${ctx.operation} account=${ctx.account} ` +
|
|
117
117
|
`args=${JSON.stringify(ctx.params)}\n`);
|
|
118
118
|
}
|
|
119
119
|
return { action: 'allow' };
|
|
@@ -126,7 +126,7 @@ let activePolicies = [];
|
|
|
126
126
|
export function configurePolicies(policies) {
|
|
127
127
|
activePolicies = policies;
|
|
128
128
|
if (policies.length > 0) {
|
|
129
|
-
process.stderr.write(`[
|
|
129
|
+
process.stderr.write(`[google-workspace-mcp] safety: ${policies.length} policy(ies) active: ` +
|
|
130
130
|
`${policies.map(p => p.name).join(', ')}\n`);
|
|
131
131
|
}
|
|
132
132
|
}
|
|
@@ -144,11 +144,11 @@ export function evaluatePolicies(args, ctx, service) {
|
|
|
144
144
|
continue;
|
|
145
145
|
const result = policy.evaluate(args, ctx, service);
|
|
146
146
|
if (result.action === 'block') {
|
|
147
|
-
process.stderr.write(`[
|
|
147
|
+
process.stderr.write(`[google-workspace-mcp] safety: BLOCKED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
|
|
148
148
|
return result;
|
|
149
149
|
}
|
|
150
150
|
if (result.action === 'downgrade' && result.replacementArgs) {
|
|
151
|
-
process.stderr.write(`[
|
|
151
|
+
process.stderr.write(`[google-workspace-mcp] safety: DOWNGRADED ${service}.${ctx.operation} by ${policy.name}: ${result.reason}\n`);
|
|
152
152
|
return result;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/factory/safety.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/factory/safety.ts"],"names":[],"mappings":"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"}
|
package/build/factory/types.d.ts
CHANGED
|
@@ -10,19 +10,19 @@ export interface ParamDef {
|
|
|
10
10
|
required?: boolean;
|
|
11
11
|
default?: string | number | boolean;
|
|
12
12
|
max?: number;
|
|
13
|
-
/** Maps this param name to a different key in the
|
|
13
|
+
/** Maps this param name to a different key in the params sent to Google. */
|
|
14
14
|
maps_to?: string;
|
|
15
15
|
enum?: string[];
|
|
16
16
|
/**
|
|
17
17
|
* If true, the param is for the formatter/handler only and is NOT forwarded
|
|
18
|
-
* to
|
|
18
|
+
* to Google. Used for client-side controls like `bodyFormat` (ADR-305)
|
|
19
19
|
* that affect rendering, not the API call itself.
|
|
20
20
|
*/
|
|
21
21
|
client_only?: boolean;
|
|
22
22
|
}
|
|
23
23
|
/** Hydration config — fetch detail for each item in a list result. */
|
|
24
24
|
export interface HydrationDef {
|
|
25
|
-
/**
|
|
25
|
+
/** Google resource path for the detail call (e.g. "users.messages.get"). */
|
|
26
26
|
resource: string;
|
|
27
27
|
/** Format parameter passed to the detail call. */
|
|
28
28
|
format?: string;
|
|
@@ -34,20 +34,16 @@ export interface OperationDef {
|
|
|
34
34
|
/** Categorizes the operation for default formatting. */
|
|
35
35
|
type: 'list' | 'detail' | 'action';
|
|
36
36
|
description: string;
|
|
37
|
-
/**
|
|
37
|
+
/** Google resource path (e.g. "users.messages.list"). */
|
|
38
38
|
resource?: string;
|
|
39
|
-
/** gws helper shorthand (e.g. "+triage", "+send"). */
|
|
40
|
-
helper?: string;
|
|
41
39
|
/** Named parameters the caller can provide. */
|
|
42
40
|
params?: Record<string, ParamDef>;
|
|
43
|
-
/** Default values merged into the
|
|
41
|
+
/** Default values merged into the params sent to Google. */
|
|
44
42
|
defaults?: Record<string, unknown>;
|
|
45
43
|
/** Post-fetch hydration (list operations only). */
|
|
46
44
|
hydration?: HydrationDef;
|
|
47
|
-
/** Fields to extract from
|
|
45
|
+
/** Fields to extract from Google's response for the result. */
|
|
48
46
|
fields?: string;
|
|
49
|
-
/** CLI-style args instead of --params JSON (for helpers). */
|
|
50
|
-
cli_args?: Record<string, string>;
|
|
51
47
|
}
|
|
52
48
|
/** A service declaration in the manifest. */
|
|
53
49
|
export interface ServiceDef {
|
|
@@ -55,8 +51,8 @@ export interface ServiceDef {
|
|
|
55
51
|
description: string;
|
|
56
52
|
/** Whether this service requires an email account param. */
|
|
57
53
|
requires_email: boolean;
|
|
58
|
-
/** The
|
|
59
|
-
|
|
54
|
+
/** The Google service name (e.g. "gmail", "calendar", "drive"). */
|
|
55
|
+
google_service: string;
|
|
60
56
|
operations: Record<string, OperationDef>;
|
|
61
57
|
}
|
|
62
58
|
/** Top-level manifest shape. */
|
|
@@ -69,9 +65,14 @@ export interface PatchContext {
|
|
|
69
65
|
params: Record<string, unknown>;
|
|
70
66
|
account: string;
|
|
71
67
|
}
|
|
72
|
-
/**
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
/**
|
|
69
|
+
* A patch hook that runs after the manifest's param mapping, before the call.
|
|
70
|
+
*
|
|
71
|
+
* It receives the PARAMS Google will be sent. Hooks operate on the param object
|
|
72
|
+
* directly — never on a serialised command line. See ADR-103.
|
|
73
|
+
*/
|
|
74
|
+
export type BeforeExecuteHook = (params: Record<string, unknown>, ctx: PatchContext) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
75
|
+
/** A patch hook that runs after Google returns, before formatting. */
|
|
75
76
|
export type AfterExecuteHook = (result: unknown, ctx: PatchContext) => Promise<unknown> | unknown;
|
|
76
77
|
/** A formatter override for a specific operation type. */
|
|
77
78
|
export type FormatHook = (data: unknown, ctx: PatchContext) => HandlerResponse;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ApiDescriptor } from './descriptor.js';
|
|
2
|
+
import type { GoogleService, ServiceMethods } from './methods.js';
|
|
3
|
+
export interface CallOptions {
|
|
4
|
+
/** Account email — the token is minted for this identity. */
|
|
5
|
+
account: string;
|
|
6
|
+
descriptor?: ApiDescriptor;
|
|
7
|
+
fetchImpl?: typeof fetch;
|
|
8
|
+
}
|
|
9
|
+
export interface BuiltRequest {
|
|
10
|
+
url: string;
|
|
11
|
+
method: string;
|
|
12
|
+
body?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
/** Pure: descriptor + params -> the request. No I/O, so it is testable offline. */
|
|
15
|
+
export declare function buildRequest(descriptor: ApiDescriptor, service: string, resourcePath: string, params?: Record<string, unknown>): BuiltRequest;
|
|
16
|
+
/**
|
|
17
|
+
* Call a Google API method. Returns RAW Google JSON — no envelope, no reshaping.
|
|
18
|
+
* Throws GoogleApiError carrying Google's real error body.
|
|
19
|
+
*/
|
|
20
|
+
export declare function call<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, options: CallOptions): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Download media to disk.
|
|
23
|
+
*
|
|
24
|
+
* STREAMED, deliberately. The bytes go from the socket to the file and are never a
|
|
25
|
+
* string at all. Never buffer a download through an in-memory string: accumulating
|
|
26
|
+
* the whole response and JSON.parse-ing it turns a 30 MB attachment into a ~40 MB
|
|
27
|
+
* string, then an object, then a Buffer — uncapped, for every download.
|
|
28
|
+
*/
|
|
29
|
+
export declare function download<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, outputPath: string, options: CallOptions): Promise<string>;
|
|
30
|
+
export interface UploadOptions extends CallOptions {
|
|
31
|
+
media: Buffer;
|
|
32
|
+
contentType: string;
|
|
33
|
+
metadata?: Record<string, unknown>;
|
|
34
|
+
/** Non-final chunks must be a multiple of 256 KiB. */
|
|
35
|
+
chunkSize?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resumable, chunked media upload.
|
|
39
|
+
*
|
|
40
|
+
* The descriptor carries the upload paths for both protocols because Discovery
|
|
41
|
+
* DECLARES them. Verified live (ADR-103 item 4): a 25 MB attachment — 34.2 MB as
|
|
42
|
+
* RFC822, 93% of Google's declared 36,700,160-byte cap — uploaded in 5 chunks and
|
|
43
|
+
* read back byte-for-byte identical.
|
|
44
|
+
*/
|
|
45
|
+
export declare function upload<S extends GoogleService>(service: S, resourcePath: ServiceMethods[S], params: Record<string, unknown>, options: UploadOptions): Promise<unknown>;
|