gogcli-mcp-drive 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": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
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 (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.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-drive",
3
3
  "displayName": "gogcli (Drive)",
4
- "version": "4.2.1",
4
+ "version": "4.2.3",
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
@@ -35353,6 +35353,7 @@ function registerAuthToolsWith(server, defaultServices) {
35353
35353
  });
35354
35354
  server.registerTool("gog_auth_add_url", {
35355
35355
  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.",
35356
+ annotations: { readOnlyHint: true },
35356
35357
  inputSchema: external_exports.object({
35357
35358
  email: external_exports.string().describe("Google account email to authorize"),
35358
35359
  services: external_exports.string().optional().default(defaultServices).describe(servicesDescribe),
@@ -35566,7 +35567,7 @@ function registerDriveTools(server) {
35566
35567
  });
35567
35568
  server.registerTool("gog_drive_rename", {
35568
35569
  description: "Rename a file or folder in Google Drive.",
35569
- annotations: { destructiveHint: true },
35570
+ annotations: { destructiveHint: false },
35570
35571
  inputSchema: external_exports.object({
35571
35572
  fileId: external_exports.string().describe("File or folder ID"),
35572
35573
  newName: external_exports.string().describe("New name"),
@@ -35577,7 +35578,7 @@ function registerDriveTools(server) {
35577
35578
  });
35578
35579
  server.registerTool("gog_drive_move", {
35579
35580
  description: "Move a file to a different folder in Google Drive.",
35580
- annotations: { destructiveHint: true },
35581
+ annotations: { destructiveHint: false },
35581
35582
  inputSchema: external_exports.object({
35582
35583
  fileId: external_exports.string().describe("File ID to move"),
35583
35584
  parentId: external_exports.string().describe("Destination folder ID"),
@@ -35752,7 +35753,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
35752
35753
  );
35753
35754
 
35754
35755
  // ../gogcli-mcp/src/server.ts
35755
- var VERSION = true ? "4.2.1" : "0.0.0";
35756
+ var VERSION = true ? "4.2.3" : "0.0.0";
35756
35757
 
35757
35758
  // ../gogcli-mcp/src/bootstrap-auth.ts
35758
35759
  import { join as join2 } from "node:path";
@@ -35847,7 +35848,7 @@ function registerExtraDriveTools(server) {
35847
35848
  });
35848
35849
  server.registerTool("gog_drive_upload", {
35849
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.`,
35850
- annotations: { destructiveHint: true },
35851
+ annotations: { destructiveHint: false },
35851
35852
  inputSchema: external_exports.object({
35852
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.`),
35853
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."),
@@ -35914,6 +35915,7 @@ function registerExtraDriveTools(server) {
35914
35915
  });
35915
35916
  server.registerTool("gog_drive_copy", {
35916
35917
  description: "Copy a Drive file to a new file with the given name.",
35918
+ annotations: { destructiveHint: false },
35917
35919
  inputSchema: external_exports.object({
35918
35920
  fileId: external_exports.string().describe("File ID to copy"),
35919
35921
  name: external_exports.string().describe("Name for the new copy"),
@@ -36013,6 +36015,7 @@ function registerExtraDriveTools(server) {
36013
36015
  });
36014
36016
  server.registerTool("gog_drive_comments_add", {
36015
36017
  description: "Add a new comment to a Drive file.",
36018
+ annotations: { destructiveHint: false },
36016
36019
  inputSchema: external_exports.object({
36017
36020
  fileId: external_exports.string().describe("File ID"),
36018
36021
  content: external_exports.string().describe("Comment text"),
@@ -36023,7 +36026,7 @@ function registerExtraDriveTools(server) {
36023
36026
  });
36024
36027
  server.registerTool("gog_drive_comments_update", {
36025
36028
  description: "Update the text of an existing comment.",
36026
- annotations: { destructiveHint: true },
36029
+ annotations: { destructiveHint: false },
36027
36030
  inputSchema: external_exports.object({
36028
36031
  fileId: external_exports.string().describe("File ID"),
36029
36032
  commentId: external_exports.string().describe("Comment ID to update"),
@@ -36046,6 +36049,7 @@ function registerExtraDriveTools(server) {
36046
36049
  });
36047
36050
  server.registerTool("gog_drive_comments_reply", {
36048
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 },
36049
36053
  inputSchema: external_exports.object({
36050
36054
  fileId: external_exports.string().describe("File ID"),
36051
36055
  commentId: external_exports.string().describe("Comment ID to reply to"),
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.1",
6
+ "version": "4.2.3",
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.1",
3
+ "version": "4.2.3",
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.1",
10
+ "version": "4.2.3",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-drive",
15
- "version": "4.2.1",
15
+ "version": "4.2.3",
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'),