gogcli-mcp-drive 2.0.11 → 2.1.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.
@@ -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": "2.0.11"
10
+ "version": "2.1.0"
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": "2.0.11",
18
+ "version": "2.1.0",
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": "2.0.11",
4
+ "version": "2.1.0",
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/CHANGELOG.md ADDED
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ ## [2.1.0](https://github.com/chrischall/gogcli-mcp/compare/v2.0.13...v2.1.0) (2026-05-25)
4
+
5
+
6
+ ### Features
7
+
8
+ * **deploy:** per-sub-package registry listings (MCP Registry, ClawHub, Claude plugins) ([6cc1798](https://github.com/chrischall/gogcli-mcp/commit/6cc1798320af6dd3af709790e6bec30f46c5f3d2))
9
+ * **drive:** add gogcli-mcp-drive sub-package ([d8eef61](https://github.com/chrischall/gogcli-mcp/commit/d8eef61f16266209da70cd05ca0d2378bf3c4613))
10
+ * wrap new gog cli v0.18.0 tools ([173242a](https://github.com/chrischall/gogcli-mcp/commit/173242aafaa8c2f2d7282a2fbd8faedfc65a63bd))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **deploy:** shorten server.json descriptions to ≤100 chars for MCP Registry ([b19224e](https://github.com/chrischall/gogcli-mcp/commit/b19224eeb2bd2a241d576016a64bfcec09808ea1))
16
+ * **mcpb:** add per-sub-package .mcpbignore to trim bundles ([e739d9e](https://github.com/chrischall/gogcli-mcp/commit/e739d9ec9ae8e4cc19b1189bb5bf7ac90481c943))
17
+
18
+
19
+ ### Refactor
20
+
21
+ * aggressive cleanup pass (audit findings) ([e635b39](https://github.com/chrischall/gogcli-mcp/commit/e635b391cf611e9c102a422ffbce5ebe28687b80))
22
+ * review-pass cleanup (enums, shared schemas, test harness) ([ea851de](https://github.com/chrischall/gogcli-mcp/commit/ea851deb30b9cfef3f07ed506a011fc363b34018))
23
+
24
+
25
+ ### Documentation
26
+
27
+ * update gogcli repo URLs to openclaw/gogcli (was steipete/gogcli) ([951a181](https://github.com/chrischall/gogcli-mcp/commit/951a1818ebc269f203aee723ccbea32c13817d8b))
package/dist/index.js CHANGED
@@ -31330,7 +31330,7 @@ function registerDriveTools(server2) {
31330
31330
  var cellValueParam = external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null()]);
31331
31331
 
31332
31332
  // ../gogcli-mcp/src/server.ts
31333
- var VERSION = true ? "2.0.11" : "0.0.0";
31333
+ var VERSION = true ? "2.1.0" : "0.0.0";
31334
31334
  function createServer(options) {
31335
31335
  return new McpServer({
31336
31336
  name: options?.name ?? "gogcli",
@@ -31502,15 +31502,40 @@ function registerExtraDriveTools(server2) {
31502
31502
  return runOrDiagnose(["drive", "comments", "delete", fileId, commentId], { account });
31503
31503
  });
31504
31504
  server2.registerTool("gog_drive_comments_reply", {
31505
- description: "Reply to an existing comment on a Drive file.",
31505
+ 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).',
31506
31506
  inputSchema: {
31507
31507
  fileId: external_exports.string().describe("File ID"),
31508
31508
  commentId: external_exports.string().describe("Comment ID to reply to"),
31509
31509
  content: external_exports.string().describe("Reply text"),
31510
+ action: external_exports.enum(["resolve", "reopen"]).optional().describe("Optional action on the parent comment alongside the reply"),
31510
31511
  account: accountParam
31511
31512
  }
31512
- }, async ({ fileId, commentId, content, account }) => {
31513
- return runOrDiagnose(["drive", "comments", "reply", fileId, commentId, content], { account });
31513
+ }, async ({ fileId, commentId, content, action, account }) => {
31514
+ const args = ["drive", "comments", "reply", fileId, commentId, content];
31515
+ if (action) args.push(`--action=${action}`);
31516
+ return runOrDiagnose(args, { account });
31517
+ });
31518
+ server2.registerTool("gog_drive_comments_resolve", {
31519
+ description: 'Resolve a comment on a Drive file (mark as done) without posting a reply. To resolve while replying, use gog_drive_comments_reply with action: "resolve".',
31520
+ annotations: { destructiveHint: true },
31521
+ inputSchema: {
31522
+ fileId: external_exports.string().describe("File ID"),
31523
+ commentId: external_exports.string().describe("Comment ID to resolve"),
31524
+ account: accountParam
31525
+ }
31526
+ }, async ({ fileId, commentId, account }) => {
31527
+ return runOrDiagnose(["drive", "comments", "resolve", fileId, commentId], { account });
31528
+ });
31529
+ server2.registerTool("gog_drive_comments_reopen", {
31530
+ description: 'Reopen a previously resolved comment on a Drive file. To reopen while replying, use gog_drive_comments_reply with action: "reopen".',
31531
+ annotations: { destructiveHint: true },
31532
+ inputSchema: {
31533
+ fileId: external_exports.string().describe("File ID"),
31534
+ commentId: external_exports.string().describe("Comment ID to reopen"),
31535
+ account: accountParam
31536
+ }
31537
+ }, async ({ fileId, commentId, account }) => {
31538
+ return runOrDiagnose(["drive", "comments", "reopen", fileId, commentId], { account });
31514
31539
  });
31515
31540
  }
31516
31541
 
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": "2.0.11",
6
+ "version": "2.1.0",
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",
@@ -163,7 +163,15 @@
163
163
  },
164
164
  {
165
165
  "name": "gog_drive_comments_reply",
166
- "description": "Reply to an existing comment"
166
+ "description": "Reply to an existing comment (optionally resolve/reopen the parent atomically via action)"
167
+ },
168
+ {
169
+ "name": "gog_drive_comments_resolve",
170
+ "description": "Resolve a comment on a Drive file (mark as done)"
171
+ },
172
+ {
173
+ "name": "gog_drive_comments_reopen",
174
+ "description": "Reopen a previously resolved comment"
167
175
  }
168
176
  ],
169
177
  "compatibility": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp-drive",
3
- "version": "2.0.11",
3
+ "version": "2.1.0",
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": "2.0.11",
10
+ "version": "2.1.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-drive",
15
- "version": "2.0.11",
15
+ "version": "2.1.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -177,14 +177,41 @@ export function registerExtraDriveTools(server: McpServer): void {
177
177
  });
178
178
 
179
179
  server.registerTool('gog_drive_comments_reply', {
180
- description: 'Reply to an existing comment on a Drive file.',
180
+ 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).',
181
181
  inputSchema: {
182
182
  fileId: z.string().describe('File ID'),
183
183
  commentId: z.string().describe('Comment ID to reply to'),
184
184
  content: z.string().describe('Reply text'),
185
+ action: z.enum(['resolve', 'reopen']).optional().describe('Optional action on the parent comment alongside the reply'),
185
186
  account: accountParam,
186
187
  },
187
- }, async ({ fileId, commentId, content, account }) => {
188
- return runOrDiagnose(['drive', 'comments', 'reply', fileId, commentId, content], { account });
188
+ }, async ({ fileId, commentId, content, action, account }) => {
189
+ const args = ['drive', 'comments', 'reply', fileId, commentId, content];
190
+ if (action) args.push(`--action=${action}`);
191
+ return runOrDiagnose(args, { account });
192
+ });
193
+
194
+ server.registerTool('gog_drive_comments_resolve', {
195
+ description: 'Resolve a comment on a Drive file (mark as done) without posting a reply. To resolve while replying, use gog_drive_comments_reply with action: "resolve".',
196
+ annotations: { destructiveHint: true },
197
+ inputSchema: {
198
+ fileId: z.string().describe('File ID'),
199
+ commentId: z.string().describe('Comment ID to resolve'),
200
+ account: accountParam,
201
+ },
202
+ }, async ({ fileId, commentId, account }) => {
203
+ return runOrDiagnose(['drive', 'comments', 'resolve', fileId, commentId], { account });
204
+ });
205
+
206
+ server.registerTool('gog_drive_comments_reopen', {
207
+ description: 'Reopen a previously resolved comment on a Drive file. To reopen while replying, use gog_drive_comments_reply with action: "reopen".',
208
+ annotations: { destructiveHint: true },
209
+ inputSchema: {
210
+ fileId: z.string().describe('File ID'),
211
+ commentId: z.string().describe('Comment ID to reopen'),
212
+ account: accountParam,
213
+ },
214
+ }, async ({ fileId, commentId, account }) => {
215
+ return runOrDiagnose(['drive', 'comments', 'reopen', fileId, commentId], { account });
189
216
  });
190
217
  }
@@ -202,4 +202,55 @@ describe('gog_drive_comments_reply', () => {
202
202
  { account: undefined },
203
203
  );
204
204
  });
205
+
206
+ // gog 0.18.0: --action atomically flips resolved state on the parent comment.
207
+ it('passes --action=resolve when action provided', async () => {
208
+ await handlers.get('gog_drive_comments_reply')!({
209
+ fileId: 'f1', commentId: 'c1', content: 'lgtm, resolving', action: 'resolve',
210
+ });
211
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
212
+ ['drive', 'comments', 'reply', 'f1', 'c1', 'lgtm, resolving', '--action=resolve'],
213
+ { account: undefined },
214
+ );
215
+ });
216
+
217
+ it('passes --action=reopen when action provided', async () => {
218
+ await handlers.get('gog_drive_comments_reply')!({
219
+ fileId: 'f1', commentId: 'c1', content: 'actually wait', action: 'reopen',
220
+ });
221
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
222
+ ['drive', 'comments', 'reply', 'f1', 'c1', 'actually wait', '--action=reopen'],
223
+ { account: undefined },
224
+ );
225
+ });
226
+ });
227
+
228
+ // --- gog 0.18.0 ---
229
+
230
+ describe('gog_drive_comments_resolve', () => {
231
+ it('calls runOrDiagnose with fileId and commentId', async () => {
232
+ await handlers.get('gog_drive_comments_resolve')!({ fileId: 'f1', commentId: 'c1' });
233
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
234
+ ['drive', 'comments', 'resolve', 'f1', 'c1'],
235
+ { account: undefined },
236
+ );
237
+ });
238
+
239
+ it('forwards account', async () => {
240
+ await handlers.get('gog_drive_comments_resolve')!({ fileId: 'f1', commentId: 'c1', account: 'a@b.com' });
241
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
242
+ ['drive', 'comments', 'resolve', 'f1', 'c1'],
243
+ { account: 'a@b.com' },
244
+ );
245
+ });
246
+ });
247
+
248
+ describe('gog_drive_comments_reopen', () => {
249
+ it('calls runOrDiagnose with fileId and commentId', async () => {
250
+ await handlers.get('gog_drive_comments_reopen')!({ fileId: 'f1', commentId: 'c1' });
251
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
252
+ ['drive', 'comments', 'reopen', 'f1', 'c1'],
253
+ { account: undefined },
254
+ );
255
+ });
205
256
  });