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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/index.js +9 -5
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/tools/drive-extra.ts +5 -2
|
@@ -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.
|
|
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.
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
10
|
+
"version": "4.2.3",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp-drive",
|
|
15
|
-
"version": "4.2.
|
|
15
|
+
"version": "4.2.3",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
package/src/tools/drive-extra.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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'),
|