gogcli-mcp 4.2.1 → 4.2.3

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.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
10
- "version": "4.2.1"
10
+ "version": "4.2.3"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "gogcli",
16
16
  "source": "./",
17
17
  "description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
18
- "version": "4.2.1",
18
+ "version": "4.2.3",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gogcli-mcp",
3
3
  "displayName": "gogcli",
4
- "version": "4.2.1",
4
+ "version": "4.2.3",
5
5
  "description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/index.js CHANGED
@@ -35530,6 +35530,7 @@ function registerAppScriptTools(server) {
35530
35530
  });
35531
35531
  server.registerTool("gog_appscript_create", {
35532
35532
  description: "Create a new, empty Apps Script project. Pass parentId to bind it to a Drive file (a Sheet, Doc or Form), which is what makes the script a container-bound script with access to that document; omit it for a standalone project. gog cannot upload code, so the project starts empty either way." + apiEnableNote,
35533
+ annotations: { destructiveHint: true },
35533
35534
  inputSchema: external_exports.object({
35534
35535
  title: external_exports.string().describe("Project title"),
35535
35536
  parentId: external_exports.string().optional().describe("Drive file ID to bind the project to (Sheet, Doc or Form). Omit for a standalone project."),
@@ -35670,6 +35671,7 @@ function registerAuthToolsWith(server, defaultServices) {
35670
35671
  });
35671
35672
  server.registerTool("gog_auth_add_url", {
35672
35673
  description: "Begin REMOTE/headless Google authorization (step 1 of 2). Returns a sign-in URL to open in any browser \u2014 no local server or terminal on the gogcli host is needed, so this works on a hosted deployment where the interactive gog_auth_add cannot. Hand the URL to the user; after they sign in, the browser is redirected to a localhost URL that fails to load \u2014 that is expected. They copy that full redirected URL (from the address bar) and you pass it to gog_auth_add_complete. The link is valid for 10 minutes. If you pass a custom `services` here, pass the SAME value to gog_auth_add_complete or the second step will not match this one.",
35674
+ annotations: { readOnlyHint: true },
35673
35675
  inputSchema: external_exports.object({
35674
35676
  email: external_exports.string().describe("Google account email to authorize"),
35675
35677
  services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe),
@@ -36030,6 +36032,7 @@ function registerChatTools(server) {
36030
36032
  });
36031
36033
  server.registerTool("gog_chat_spaces_create", {
36032
36034
  description: "Create a named Chat space, optionally seeding its membership. Members are added immediately and are notified \u2014 this is visible to other people the moment it runs, so confirm the member list before calling it." + workspaceOnlyNote,
36035
+ annotations: { destructiveHint: true },
36033
36036
  inputSchema: external_exports.object({
36034
36037
  displayName: external_exports.string().describe("Display name for the new space"),
36035
36038
  members: external_exports.array(external_exports.string()).optional().describe('Initial members, as email addresses or "users/..." resource names'),
@@ -36098,6 +36101,7 @@ function registerChatTools(server) {
36098
36101
  });
36099
36102
  server.registerTool("gog_chat_messages_send", {
36100
36103
  description: "Post a message to a Chat space. THIS IS IMMEDIATELY VISIBLE TO EVERYONE IN THE SPACE and cannot be unsent through this tool, so treat it like sending mail, not like saving a draft. Pass `thread` to reply inside an existing conversation (from gog_chat_threads_list or a message's thread field); omit it to start a new one. Text supports Chat's markdown-ish formatting (*bold*, _italic_, `code`)." + workspaceOnlyNote,
36104
+ annotations: { destructiveHint: true },
36101
36105
  inputSchema: external_exports.object({
36102
36106
  space: spaceParam,
36103
36107
  text: external_exports.string().optional().describe("Message text. Optional only when an attachment is supplied."),
@@ -36121,6 +36125,7 @@ function registerChatTools(server) {
36121
36125
  });
36122
36126
  server.registerTool("gog_chat_dm_send", {
36123
36127
  description: "Send a direct message to one person by email address, creating the DM space if this is the first message. Delivered immediately and cannot be unsent through this tool. For a room rather than a person, use gog_chat_messages_send." + workspaceOnlyNote,
36128
+ annotations: { destructiveHint: true },
36124
36129
  inputSchema: external_exports.object({
36125
36130
  email: external_exports.string().describe("Recipient email address"),
36126
36131
  text: external_exports.string().describe("Message text"),
@@ -36134,6 +36139,7 @@ function registerChatTools(server) {
36134
36139
  });
36135
36140
  server.registerTool("gog_chat_dm_space", {
36136
36141
  description: 'Resolve the DM space for an email address \u2014 the bridge from a person to the "spaces/..." name the message tools want. Creates the space if none exists yet, which is silent: it does not message the person.' + workspaceOnlyNote,
36142
+ annotations: { destructiveHint: true },
36137
36143
  inputSchema: external_exports.object({
36138
36144
  email: external_exports.string().describe("The other person's email address"),
36139
36145
  account: accountParam
@@ -36606,7 +36612,7 @@ function registerContactsTools(server) {
36606
36612
  });
36607
36613
  server.registerTool("gog_contacts_create", {
36608
36614
  description: "Create a new Google Contact.",
36609
- annotations: { destructiveHint: false },
36615
+ annotations: { destructiveHint: true },
36610
36616
  inputSchema: external_exports.object({
36611
36617
  givenName: external_exports.string().describe("Given (first) name"),
36612
36618
  familyName: external_exports.string().optional().describe("Family (last) name"),
@@ -36655,6 +36661,7 @@ function registerDocsTools(server) {
36655
36661
  });
36656
36662
  server.registerTool("gog_docs_create", {
36657
36663
  description: "Create a new Google Doc. Returns JSON with the new docId and URL.",
36664
+ annotations: { destructiveHint: true },
36658
36665
  inputSchema: external_exports.object({
36659
36666
  title: external_exports.string().describe("Title for the new document"),
36660
36667
  account: accountParam
@@ -36814,7 +36821,7 @@ function registerDriveTools(server) {
36814
36821
  });
36815
36822
  server.registerTool("gog_drive_rename", {
36816
36823
  description: "Rename a file or folder in Google Drive.",
36817
- annotations: { destructiveHint: true },
36824
+ annotations: { destructiveHint: false },
36818
36825
  inputSchema: external_exports.object({
36819
36826
  fileId: external_exports.string().describe("File or folder ID"),
36820
36827
  newName: external_exports.string().describe("New name"),
@@ -36825,7 +36832,7 @@ function registerDriveTools(server) {
36825
36832
  });
36826
36833
  server.registerTool("gog_drive_move", {
36827
36834
  description: "Move a file to a different folder in Google Drive.",
36828
- annotations: { destructiveHint: true },
36835
+ annotations: { destructiveHint: false },
36829
36836
  inputSchema: external_exports.object({
36830
36837
  fileId: external_exports.string().describe("File ID to move"),
36831
36838
  parentId: external_exports.string().describe("Destination folder ID"),
@@ -37491,7 +37498,7 @@ function registerSheetsTools(server) {
37491
37498
  });
37492
37499
  server.registerTool("gog_sheets_create", {
37493
37500
  description: "Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.",
37494
- annotations: { destructiveHint: false },
37501
+ annotations: { destructiveHint: true },
37495
37502
  inputSchema: external_exports.object({
37496
37503
  title: external_exports.string().describe("Title for the new spreadsheet"),
37497
37504
  account: accountParam
@@ -37545,6 +37552,7 @@ function registerSlidesTools(server) {
37545
37552
  });
37546
37553
  server.registerTool("gog_slides_create", {
37547
37554
  description: "Create a new Google Slides presentation, optionally in a folder or copying from a template.",
37555
+ annotations: { destructiveHint: true },
37548
37556
  inputSchema: external_exports.object({
37549
37557
  title: external_exports.string().describe("Presentation title"),
37550
37558
  parent: external_exports.string().optional().describe("Destination folder ID"),
@@ -37559,6 +37567,7 @@ function registerSlidesTools(server) {
37559
37567
  });
37560
37568
  server.registerTool("gog_slides_copy", {
37561
37569
  description: "Copy a Google Slides presentation to a new presentation with the given title.",
37570
+ annotations: { destructiveHint: true },
37562
37571
  inputSchema: external_exports.object({
37563
37572
  presentationId: external_exports.string().describe("Presentation ID to copy"),
37564
37573
  title: external_exports.string().describe("Title for the new copy"),
@@ -37647,7 +37656,7 @@ function registerTasksTools(server) {
37647
37656
  });
37648
37657
  server.registerTool("gog_tasks_done", {
37649
37658
  description: "Mark a task as completed.",
37650
- annotations: { destructiveHint: true },
37659
+ annotations: { destructiveHint: false },
37651
37660
  inputSchema: external_exports.object({
37652
37661
  tasklistId: external_exports.string().describe("Task list ID"),
37653
37662
  taskId: external_exports.string().describe("Task ID"),
@@ -37671,7 +37680,7 @@ function registerTasksTools(server) {
37671
37680
  }
37672
37681
 
37673
37682
  // src/server.ts
37674
- var VERSION = true ? "4.2.1" : "0.0.0";
37683
+ var VERSION = true ? "4.2.3" : "0.0.0";
37675
37684
  var BASE_TOOL_REGISTRARS = [
37676
37685
  registerApiTools,
37677
37686
  registerAppScriptTools,
package/dist/lib.js CHANGED
@@ -33861,6 +33861,7 @@ function registerAppScriptTools(server) {
33861
33861
  });
33862
33862
  server.registerTool("gog_appscript_create", {
33863
33863
  description: "Create a new, empty Apps Script project. Pass parentId to bind it to a Drive file (a Sheet, Doc or Form), which is what makes the script a container-bound script with access to that document; omit it for a standalone project. gog cannot upload code, so the project starts empty either way." + apiEnableNote,
33864
+ annotations: { destructiveHint: true },
33864
33865
  inputSchema: external_exports.object({
33865
33866
  title: external_exports.string().describe("Project title"),
33866
33867
  parentId: external_exports.string().optional().describe("Drive file ID to bind the project to (Sheet, Doc or Form). Omit for a standalone project."),
@@ -34001,6 +34002,7 @@ function registerAuthToolsWith(server, defaultServices) {
34001
34002
  });
34002
34003
  server.registerTool("gog_auth_add_url", {
34003
34004
  description: "Begin REMOTE/headless Google authorization (step 1 of 2). Returns a sign-in URL to open in any browser \u2014 no local server or terminal on the gogcli host is needed, so this works on a hosted deployment where the interactive gog_auth_add cannot. Hand the URL to the user; after they sign in, the browser is redirected to a localhost URL that fails to load \u2014 that is expected. They copy that full redirected URL (from the address bar) and you pass it to gog_auth_add_complete. The link is valid for 10 minutes. If you pass a custom `services` here, pass the SAME value to gog_auth_add_complete or the second step will not match this one.",
34005
+ annotations: { readOnlyHint: true },
34004
34006
  inputSchema: external_exports.object({
34005
34007
  email: external_exports.string().describe("Google account email to authorize"),
34006
34008
  services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe),
@@ -34364,6 +34366,7 @@ function registerChatTools(server) {
34364
34366
  });
34365
34367
  server.registerTool("gog_chat_spaces_create", {
34366
34368
  description: "Create a named Chat space, optionally seeding its membership. Members are added immediately and are notified \u2014 this is visible to other people the moment it runs, so confirm the member list before calling it." + workspaceOnlyNote,
34369
+ annotations: { destructiveHint: true },
34367
34370
  inputSchema: external_exports.object({
34368
34371
  displayName: external_exports.string().describe("Display name for the new space"),
34369
34372
  members: external_exports.array(external_exports.string()).optional().describe('Initial members, as email addresses or "users/..." resource names'),
@@ -34432,6 +34435,7 @@ function registerChatTools(server) {
34432
34435
  });
34433
34436
  server.registerTool("gog_chat_messages_send", {
34434
34437
  description: "Post a message to a Chat space. THIS IS IMMEDIATELY VISIBLE TO EVERYONE IN THE SPACE and cannot be unsent through this tool, so treat it like sending mail, not like saving a draft. Pass `thread` to reply inside an existing conversation (from gog_chat_threads_list or a message's thread field); omit it to start a new one. Text supports Chat's markdown-ish formatting (*bold*, _italic_, `code`)." + workspaceOnlyNote,
34438
+ annotations: { destructiveHint: true },
34435
34439
  inputSchema: external_exports.object({
34436
34440
  space: spaceParam,
34437
34441
  text: external_exports.string().optional().describe("Message text. Optional only when an attachment is supplied."),
@@ -34455,6 +34459,7 @@ function registerChatTools(server) {
34455
34459
  });
34456
34460
  server.registerTool("gog_chat_dm_send", {
34457
34461
  description: "Send a direct message to one person by email address, creating the DM space if this is the first message. Delivered immediately and cannot be unsent through this tool. For a room rather than a person, use gog_chat_messages_send." + workspaceOnlyNote,
34462
+ annotations: { destructiveHint: true },
34458
34463
  inputSchema: external_exports.object({
34459
34464
  email: external_exports.string().describe("Recipient email address"),
34460
34465
  text: external_exports.string().describe("Message text"),
@@ -34468,6 +34473,7 @@ function registerChatTools(server) {
34468
34473
  });
34469
34474
  server.registerTool("gog_chat_dm_space", {
34470
34475
  description: 'Resolve the DM space for an email address \u2014 the bridge from a person to the "spaces/..." name the message tools want. Creates the space if none exists yet, which is silent: it does not message the person.' + workspaceOnlyNote,
34476
+ annotations: { destructiveHint: true },
34471
34477
  inputSchema: external_exports.object({
34472
34478
  email: external_exports.string().describe("The other person's email address"),
34473
34479
  account: accountParam
@@ -34940,7 +34946,7 @@ function registerContactsTools(server) {
34940
34946
  });
34941
34947
  server.registerTool("gog_contacts_create", {
34942
34948
  description: "Create a new Google Contact.",
34943
- annotations: { destructiveHint: false },
34949
+ annotations: { destructiveHint: true },
34944
34950
  inputSchema: external_exports.object({
34945
34951
  givenName: external_exports.string().describe("Given (first) name"),
34946
34952
  familyName: external_exports.string().optional().describe("Family (last) name"),
@@ -34989,6 +34995,7 @@ function registerDocsTools(server) {
34989
34995
  });
34990
34996
  server.registerTool("gog_docs_create", {
34991
34997
  description: "Create a new Google Doc. Returns JSON with the new docId and URL.",
34998
+ annotations: { destructiveHint: true },
34992
34999
  inputSchema: external_exports.object({
34993
35000
  title: external_exports.string().describe("Title for the new document"),
34994
35001
  account: accountParam
@@ -35148,7 +35155,7 @@ function registerDriveTools(server) {
35148
35155
  });
35149
35156
  server.registerTool("gog_drive_rename", {
35150
35157
  description: "Rename a file or folder in Google Drive.",
35151
- annotations: { destructiveHint: true },
35158
+ annotations: { destructiveHint: false },
35152
35159
  inputSchema: external_exports.object({
35153
35160
  fileId: external_exports.string().describe("File or folder ID"),
35154
35161
  newName: external_exports.string().describe("New name"),
@@ -35159,7 +35166,7 @@ function registerDriveTools(server) {
35159
35166
  });
35160
35167
  server.registerTool("gog_drive_move", {
35161
35168
  description: "Move a file to a different folder in Google Drive.",
35162
- annotations: { destructiveHint: true },
35169
+ annotations: { destructiveHint: false },
35163
35170
  inputSchema: external_exports.object({
35164
35171
  fileId: external_exports.string().describe("File ID to move"),
35165
35172
  parentId: external_exports.string().describe("Destination folder ID"),
@@ -35825,7 +35832,7 @@ function registerSheetsTools(server) {
35825
35832
  });
35826
35833
  server.registerTool("gog_sheets_create", {
35827
35834
  description: "Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.",
35828
- annotations: { destructiveHint: false },
35835
+ annotations: { destructiveHint: true },
35829
35836
  inputSchema: external_exports.object({
35830
35837
  title: external_exports.string().describe("Title for the new spreadsheet"),
35831
35838
  account: accountParam
@@ -35879,6 +35886,7 @@ function registerSlidesTools(server) {
35879
35886
  });
35880
35887
  server.registerTool("gog_slides_create", {
35881
35888
  description: "Create a new Google Slides presentation, optionally in a folder or copying from a template.",
35889
+ annotations: { destructiveHint: true },
35882
35890
  inputSchema: external_exports.object({
35883
35891
  title: external_exports.string().describe("Presentation title"),
35884
35892
  parent: external_exports.string().optional().describe("Destination folder ID"),
@@ -35893,6 +35901,7 @@ function registerSlidesTools(server) {
35893
35901
  });
35894
35902
  server.registerTool("gog_slides_copy", {
35895
35903
  description: "Copy a Google Slides presentation to a new presentation with the given title.",
35904
+ annotations: { destructiveHint: true },
35896
35905
  inputSchema: external_exports.object({
35897
35906
  presentationId: external_exports.string().describe("Presentation ID to copy"),
35898
35907
  title: external_exports.string().describe("Title for the new copy"),
@@ -35981,7 +35990,7 @@ function registerTasksTools(server) {
35981
35990
  });
35982
35991
  server.registerTool("gog_tasks_done", {
35983
35992
  description: "Mark a task as completed.",
35984
- annotations: { destructiveHint: true },
35993
+ annotations: { destructiveHint: false },
35985
35994
  inputSchema: external_exports.object({
35986
35995
  tasklistId: external_exports.string().describe("Task list ID"),
35987
35996
  taskId: external_exports.string().describe("Task ID"),
@@ -36005,7 +36014,7 @@ function registerTasksTools(server) {
36005
36014
  }
36006
36015
 
36007
36016
  // src/server.ts
36008
- var VERSION = true ? "4.2.1" : "0.0.0";
36017
+ var VERSION = true ? "4.2.3" : "0.0.0";
36009
36018
  var BASE_TOOL_REGISTRARS = [
36010
36019
  registerApiTools,
36011
36020
  registerAppScriptTools,
package/manifest.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifest_version": "0.3",
4
4
  "name": "gogcli-mcp",
5
5
  "display_name": "gogcli",
6
- "version": "4.2.1",
6
+ "version": "4.2.3",
7
7
  "description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
8
8
  "author": {
9
9
  "name": "Chris Hall",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp",
3
- "version": "4.2.1",
3
+ "version": "4.2.3",
4
4
  "mcpName": "io.github.chrischall/gogcli-mcp",
5
5
  "description": "MCP server wrapping gogcli for Google service access",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "source": "github",
8
8
  "subfolder": "packages/gogcli-mcp"
9
9
  },
10
- "version": "4.2.1",
10
+ "version": "4.2.3",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp",
15
- "version": "4.2.1",
15
+ "version": "4.2.3",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -82,6 +82,7 @@ export function registerAppScriptTools(server: McpServer): void {
82
82
  'Create a new, empty Apps Script project. Pass parentId to bind it to a Drive file (a Sheet, Doc or Form), which is '
83
83
  + 'what makes the script a container-bound script with access to that document; omit it for a standalone project. '
84
84
  + 'gog cannot upload code, so the project starts empty either way.' + apiEnableNote,
85
+ annotations: { destructiveHint: true },
85
86
  inputSchema: z.object({
86
87
  title: z.string().describe('Project title'),
87
88
  parentId: z.string().optional().describe('Drive file ID to bind the project to (Sheet, Doc or Form). Omit for a standalone project.'),
package/src/tools/auth.ts CHANGED
@@ -135,6 +135,7 @@ function registerAuthToolsWith(server: McpServer, defaultServices: string): void
135
135
  'full redirected URL (from the address bar) and you pass it to gog_auth_add_complete. The link is ' +
136
136
  'valid for 10 minutes. If you pass a custom `services` here, pass the SAME value to ' +
137
137
  'gog_auth_add_complete or the second step will not match this one.',
138
+ annotations: { readOnlyHint: true },
138
139
  inputSchema: z.object({
139
140
  email: z.string().describe('Google account email to authorize'),
140
141
  services: z.string().optional().default(defaultServices).describe(servicesDescribe),
package/src/tools/chat.ts CHANGED
@@ -82,6 +82,7 @@ export function registerChatTools(server: McpServer): void {
82
82
  description:
83
83
  'Create a named Chat space, optionally seeding its membership. Members are added immediately and are notified — this '
84
84
  + 'is visible to other people the moment it runs, so confirm the member list before calling it.' + workspaceOnlyNote,
85
+ annotations: { destructiveHint: true },
85
86
  inputSchema: z.object({
86
87
  displayName: z.string().describe('Display name for the new space'),
87
88
  members: z.array(z.string()).optional().describe('Initial members, as email addresses or "users/..." resource names'),
@@ -176,6 +177,7 @@ export function registerChatTools(server: McpServer): void {
176
177
  + 'this tool, so treat it like sending mail, not like saving a draft. Pass `thread` to reply inside an existing '
177
178
  + 'conversation (from gog_chat_threads_list or a message\'s thread field); omit it to start a new one. Text supports '
178
179
  + 'Chat\'s markdown-ish formatting (*bold*, _italic_, `code`).' + workspaceOnlyNote,
180
+ annotations: { destructiveHint: true },
179
181
  inputSchema: z.object({
180
182
  space: spaceParam,
181
183
  text: z.string().optional().describe('Message text. Optional only when an attachment is supplied.'),
@@ -207,6 +209,7 @@ export function registerChatTools(server: McpServer): void {
207
209
  'Send a direct message to one person by email address, creating the DM space if this is the first message. Delivered '
208
210
  + 'immediately and cannot be unsent through this tool. For a room rather than a person, use gog_chat_messages_send.'
209
211
  + workspaceOnlyNote,
212
+ annotations: { destructiveHint: true },
210
213
  inputSchema: z.object({
211
214
  email: z.string().describe('Recipient email address'),
212
215
  text: z.string().describe('Message text'),
@@ -223,6 +226,7 @@ export function registerChatTools(server: McpServer): void {
223
226
  description:
224
227
  'Resolve the DM space for an email address — the bridge from a person to the "spaces/..." name the message tools '
225
228
  + 'want. Creates the space if none exists yet, which is silent: it does not message the person.' + workspaceOnlyNote,
229
+ annotations: { destructiveHint: true },
226
230
  inputSchema: z.object({
227
231
  email: z.string().describe('The other person\'s email address'),
228
232
  account: accountParam,
@@ -37,7 +37,7 @@ export function registerContactsTools(server: McpServer): void {
37
37
 
38
38
  server.registerTool('gog_contacts_create', {
39
39
  description: 'Create a new Google Contact.',
40
- annotations: { destructiveHint: false },
40
+ annotations: { destructiveHint: true },
41
41
  inputSchema: z.object({
42
42
  givenName: z.string().describe('Given (first) name'),
43
43
  familyName: z.string().optional().describe('Family (last) name'),
package/src/tools/docs.ts CHANGED
@@ -30,6 +30,7 @@ export function registerDocsTools(server: McpServer): void {
30
30
 
31
31
  server.registerTool('gog_docs_create', {
32
32
  description: 'Create a new Google Doc. Returns JSON with the new docId and URL.',
33
+ annotations: { destructiveHint: true },
33
34
  inputSchema: z.object({
34
35
  title: z.string().describe('Title for the new document'),
35
36
  account: accountParam,
@@ -118,7 +118,7 @@ export function registerDriveTools(server: McpServer): void {
118
118
 
119
119
  server.registerTool('gog_drive_rename', {
120
120
  description: 'Rename a file or folder in Google Drive.',
121
- annotations: { destructiveHint: true },
121
+ annotations: { destructiveHint: false },
122
122
  inputSchema: z.object({
123
123
  fileId: z.string().describe('File or folder ID'),
124
124
  newName: z.string().describe('New name'),
@@ -130,7 +130,7 @@ export function registerDriveTools(server: McpServer): void {
130
130
 
131
131
  server.registerTool('gog_drive_move', {
132
132
  description: 'Move a file to a different folder in Google Drive.',
133
- annotations: { destructiveHint: true },
133
+ annotations: { destructiveHint: false },
134
134
  inputSchema: z.object({
135
135
  fileId: z.string().describe('File ID to move'),
136
136
  parentId: z.string().describe('Destination folder ID'),
@@ -120,7 +120,7 @@ export function registerSheetsTools(server: McpServer): void {
120
120
 
121
121
  server.registerTool('gog_sheets_create', {
122
122
  description: 'Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.',
123
- annotations: { destructiveHint: false },
123
+ annotations: { destructiveHint: true },
124
124
  inputSchema: z.object({
125
125
  title: z.string().describe('Title for the new spreadsheet'),
126
126
  account: accountParam,
@@ -34,6 +34,7 @@ export function registerSlidesTools(server: McpServer): void {
34
34
 
35
35
  server.registerTool('gog_slides_create', {
36
36
  description: 'Create a new Google Slides presentation, optionally in a folder or copying from a template.',
37
+ annotations: { destructiveHint: true },
37
38
  inputSchema: z.object({
38
39
  title: z.string().describe('Presentation title'),
39
40
  parent: z.string().optional().describe('Destination folder ID'),
@@ -49,6 +50,7 @@ export function registerSlidesTools(server: McpServer): void {
49
50
 
50
51
  server.registerTool('gog_slides_copy', {
51
52
  description: 'Copy a Google Slides presentation to a new presentation with the given title.',
53
+ annotations: { destructiveHint: true },
52
54
  inputSchema: z.object({
53
55
  presentationId: z.string().describe('Presentation ID to copy'),
54
56
  title: z.string().describe('Title for the new copy'),
@@ -55,7 +55,7 @@ export function registerTasksTools(server: McpServer): void {
55
55
 
56
56
  server.registerTool('gog_tasks_done', {
57
57
  description: 'Mark a task as completed.',
58
- annotations: { destructiveHint: true },
58
+ annotations: { destructiveHint: false },
59
59
  inputSchema: z.object({
60
60
  tasklistId: z.string().describe('Task list ID'),
61
61
  taskId: z.string().describe('Task ID'),