gogcli-mcp-drive 4.2.2 → 4.2.4

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": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
10
- "version": "4.2.2"
10
+ "version": "4.2.4"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "gogcli (Drive)",
16
16
  "source": "./",
17
17
  "description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
18
- "version": "4.2.2",
18
+ "version": "4.2.4",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gogcli-mcp-drive",
3
3
  "displayName": "gogcli (Drive)",
4
- "version": "4.2.2",
4
+ "version": "4.2.4",
5
5
  "description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/index.js CHANGED
@@ -35567,7 +35567,7 @@ function registerDriveTools(server) {
35567
35567
  });
35568
35568
  server.registerTool("gog_drive_rename", {
35569
35569
  description: "Rename a file or folder in Google Drive.",
35570
- annotations: { destructiveHint: true },
35570
+ annotations: { destructiveHint: false },
35571
35571
  inputSchema: external_exports.object({
35572
35572
  fileId: external_exports.string().describe("File or folder ID"),
35573
35573
  newName: external_exports.string().describe("New name"),
@@ -35578,7 +35578,7 @@ function registerDriveTools(server) {
35578
35578
  });
35579
35579
  server.registerTool("gog_drive_move", {
35580
35580
  description: "Move a file to a different folder in Google Drive.",
35581
- annotations: { destructiveHint: true },
35581
+ annotations: { destructiveHint: false },
35582
35582
  inputSchema: external_exports.object({
35583
35583
  fileId: external_exports.string().describe("File ID to move"),
35584
35584
  parentId: external_exports.string().describe("Destination folder ID"),
@@ -35753,7 +35753,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
35753
35753
  );
35754
35754
 
35755
35755
  // ../gogcli-mcp/src/server.ts
35756
- var VERSION = true ? "4.2.2" : "0.0.0";
35756
+ var VERSION = true ? "4.2.4" : "0.0.0";
35757
35757
 
35758
35758
  // ../gogcli-mcp/src/bootstrap-auth.ts
35759
35759
  import { join as join2 } from "node:path";
@@ -35848,7 +35848,7 @@ function registerExtraDriveTools(server) {
35848
35848
  });
35849
35849
  server.registerTool("gog_drive_upload", {
35850
35850
  description: `Upload a file to Drive. Supply it EITHER as localPath (a path on the gog server's own filesystem \u2014 local stdio deployments only) OR as content (the bytes, base64-encoded, carried with the request), which is what works when this server runs remotely from you and no path you can name exists on it. Use replace to replace the content of an existing file (preserves link/permissions), or convert to auto-convert to a Google format. Pair replace with ifVersion to make the overwrite conditional: gog sends an atomic If-Match precondition and reports a conflict \u2014 applying nothing \u2014 if the file changed since you read it, instead of silently clobbering a concurrent edit. No read tool surfaces the version number: fetch it immediately before uploading with gog_drive_run { subcommand: "raw", args: ["<fileId>", "--fields=version"] } \u2014 it comes back as a JSON string, so pass it on as a number. Conditional replacement refuses Google Workspace files (Docs/Sheets/Slides), which have no replaceable binary content.`,
35851
- annotations: { destructiveHint: true },
35851
+ annotations: { destructiveHint: false },
35852
35852
  inputSchema: external_exports.object({
35853
35853
  localPath: external_exports.string().optional().describe(`Path to the file to upload, resolved ON THE GOG SERVER's filesystem \u2014 NOT this client's. Only usable when gog runs on the same machine you do (local stdio); on a hosted deployment (e.g. mcp-host) this path does not exist and the call fails with "no such file or directory" \u2014 use content there. Exactly one of localPath / content is required.`),
35854
35854
  content: external_exports.string().optional().describe("The file's bytes, base64-encoded (standard alphabet, with padding) \u2014 upload a file you hold without it existing anywhere on the gog server. This is the only route that works when the caller and gog share no filesystem. Requires name (there is no path to take a filename from). Max 8 MiB; for anything larger use localPath from a local deployment. Exactly one of localPath / content is required \u2014 supplying both is an error, not a precedence rule."),
@@ -35915,6 +35915,7 @@ function registerExtraDriveTools(server) {
35915
35915
  });
35916
35916
  server.registerTool("gog_drive_copy", {
35917
35917
  description: "Copy a Drive file to a new file with the given name.",
35918
+ annotations: { destructiveHint: false },
35918
35919
  inputSchema: external_exports.object({
35919
35920
  fileId: external_exports.string().describe("File ID to copy"),
35920
35921
  name: external_exports.string().describe("Name for the new copy"),
@@ -36014,6 +36015,7 @@ function registerExtraDriveTools(server) {
36014
36015
  });
36015
36016
  server.registerTool("gog_drive_comments_add", {
36016
36017
  description: "Add a new comment to a Drive file.",
36018
+ annotations: { destructiveHint: false },
36017
36019
  inputSchema: external_exports.object({
36018
36020
  fileId: external_exports.string().describe("File ID"),
36019
36021
  content: external_exports.string().describe("Comment text"),
@@ -36024,7 +36026,7 @@ function registerExtraDriveTools(server) {
36024
36026
  });
36025
36027
  server.registerTool("gog_drive_comments_update", {
36026
36028
  description: "Update the text of an existing comment.",
36027
- annotations: { destructiveHint: true },
36029
+ annotations: { destructiveHint: false },
36028
36030
  inputSchema: external_exports.object({
36029
36031
  fileId: external_exports.string().describe("File ID"),
36030
36032
  commentId: external_exports.string().describe("Comment ID to update"),
@@ -36047,6 +36049,7 @@ function registerExtraDriveTools(server) {
36047
36049
  });
36048
36050
  server.registerTool("gog_drive_comments_reply", {
36049
36051
  description: 'Reply to an existing comment on a Drive file. Pass `action: "resolve"` or `"reopen"` to atomically flip the parent comment\'s resolved state via the Drive API\'s Reply.action field \u2014 avoids the older workaround of deleting the comment (which destroys review-thread context).',
36052
+ annotations: { destructiveHint: false },
36050
36053
  inputSchema: external_exports.object({
36051
36054
  fileId: external_exports.string().describe("File ID"),
36052
36055
  commentId: external_exports.string().describe("Comment ID to reply to"),
@@ -36182,6 +36185,7 @@ function registerExtraDriveTools(server) {
36182
36185
  });
36183
36186
  server.registerTool("gog_drive_shortcut_create", {
36184
36187
  description: "Create a Drive shortcut to a file or folder inside a destination folder. Shortcuts are classified distinctly in listing/tree output and are never followed by tree scans.",
36188
+ annotations: { destructiveHint: false },
36185
36189
  inputSchema: external_exports.object({
36186
36190
  targetId: external_exports.string().describe("File or folder ID the shortcut points to"),
36187
36191
  parent: external_exports.string().describe("Destination folder ID for the shortcut"),
@@ -36255,6 +36259,7 @@ function registerExtraDriveTools(server) {
36255
36259
  });
36256
36260
  server.registerTool("gog_drive_labels_file_apply", {
36257
36261
  description: 'Apply or update a label on a Drive file, optionally setting field values. Each field flag takes "fieldId=value" entries (repeatable). selection/integer/date/user values may be comma-separated within one entry for multi-valued fields.',
36262
+ annotations: { destructiveHint: false },
36258
36263
  inputSchema: external_exports.object({
36259
36264
  fileId: external_exports.string().describe("File ID"),
36260
36265
  labelId: external_exports.string().describe("Label ID to apply"),
package/manifest.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifest_version": "0.3",
4
4
  "name": "gogcli-mcp-drive",
5
5
  "display_name": "gogcli (Drive)",
6
- "version": "4.2.2",
6
+ "version": "4.2.4",
7
7
  "description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
8
8
  "author": {
9
9
  "name": "Chris Hall",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp-drive",
3
- "version": "4.2.2",
3
+ "version": "4.2.4",
4
4
  "mcpName": "io.github.chrischall/gogcli-mcp-drive",
5
5
  "description": "Extended Google Drive MCP server via gogcli — auth + full Drive support (upload/download/permissions/comments/shared drives)",
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-drive"
9
9
  },
10
- "version": "4.2.2",
10
+ "version": "4.2.4",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-drive",
15
- "version": "4.2.2",
15
+ "version": "4.2.4",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -34,7 +34,7 @@ export function registerExtraDriveTools(server: McpServer): void {
34
34
  'No read tool surfaces the version number: fetch it immediately before uploading with ' +
35
35
  'gog_drive_run { subcommand: "raw", args: ["<fileId>", "--fields=version"] } — it comes back as a JSON string, so pass it on as a number. ' +
36
36
  'Conditional replacement refuses Google Workspace files (Docs/Sheets/Slides), which have no replaceable binary content.',
37
- annotations: { destructiveHint: true },
37
+ annotations: { destructiveHint: false },
38
38
  inputSchema: z.object({
39
39
  localPath: z.string().optional().describe('Path to the file to upload, resolved ON THE GOG SERVER\'s filesystem — NOT this client\'s. Only usable when gog runs on the same machine you do (local stdio); on a hosted deployment (e.g. mcp-host) this path does not exist and the call fails with "no such file or directory" — use content there. Exactly one of localPath / content is required.'),
40
40
  content: z.string().optional().describe('The file\'s bytes, base64-encoded (standard alphabet, with padding) — upload a file you hold without it existing anywhere on the gog server. This is the only route that works when the caller and gog share no filesystem. Requires name (there is no path to take a filename from). Max 8 MiB; for anything larger use localPath from a local deployment. Exactly one of localPath / content is required — supplying both is an error, not a precedence rule.'),
@@ -113,6 +113,7 @@ export function registerExtraDriveTools(server: McpServer): void {
113
113
 
114
114
  server.registerTool('gog_drive_copy', {
115
115
  description: 'Copy a Drive file to a new file with the given name.',
116
+ annotations: { destructiveHint: false },
116
117
  inputSchema: z.object({
117
118
  fileId: z.string().describe('File ID to copy'),
118
119
  name: z.string().describe('Name for the new copy'),
@@ -219,6 +220,7 @@ export function registerExtraDriveTools(server: McpServer): void {
219
220
 
220
221
  server.registerTool('gog_drive_comments_add', {
221
222
  description: 'Add a new comment to a Drive file.',
223
+ annotations: { destructiveHint: false },
222
224
  inputSchema: z.object({
223
225
  fileId: z.string().describe('File ID'),
224
226
  content: z.string().describe('Comment text'),
@@ -230,7 +232,7 @@ export function registerExtraDriveTools(server: McpServer): void {
230
232
 
231
233
  server.registerTool('gog_drive_comments_update', {
232
234
  description: 'Update the text of an existing comment.',
233
- annotations: { destructiveHint: true },
235
+ annotations: { destructiveHint: false },
234
236
  inputSchema: z.object({
235
237
  fileId: z.string().describe('File ID'),
236
238
  commentId: z.string().describe('Comment ID to update'),
@@ -255,6 +257,7 @@ export function registerExtraDriveTools(server: McpServer): void {
255
257
 
256
258
  server.registerTool('gog_drive_comments_reply', {
257
259
  description: 'Reply to an existing comment on a Drive file. Pass `action: "resolve"` or `"reopen"` to atomically flip the parent comment\'s resolved state via the Drive API\'s Reply.action field — avoids the older workaround of deleting the comment (which destroys review-thread context).',
260
+ annotations: { destructiveHint: false },
258
261
  inputSchema: z.object({
259
262
  fileId: z.string().describe('File ID'),
260
263
  commentId: z.string().describe('Comment ID to reply to'),
@@ -403,6 +406,7 @@ export function registerExtraDriveTools(server: McpServer): void {
403
406
 
404
407
  server.registerTool('gog_drive_shortcut_create', {
405
408
  description: 'Create a Drive shortcut to a file or folder inside a destination folder. Shortcuts are classified distinctly in listing/tree output and are never followed by tree scans.',
409
+ annotations: { destructiveHint: false },
406
410
  inputSchema: z.object({
407
411
  targetId: z.string().describe('File or folder ID the shortcut points to'),
408
412
  parent: z.string().describe('Destination folder ID for the shortcut'),
@@ -480,6 +484,7 @@ export function registerExtraDriveTools(server: McpServer): void {
480
484
 
481
485
  server.registerTool('gog_drive_labels_file_apply', {
482
486
  description: 'Apply or update a label on a Drive file, optionally setting field values. Each field flag takes "fieldId=value" entries (repeatable). selection/integer/date/user values may be comma-separated within one entry for multi-valued fields.',
487
+ annotations: { destructiveHint: false },
483
488
  inputSchema: z.object({
484
489
  fileId: z.string().describe('File ID'),
485
490
  labelId: z.string().describe('Label ID to apply'),