gogcli-mcp 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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/index.js +18 -6
- package/dist/lib.js +18 -6
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/tools/appscript.ts +2 -0
- package/src/tools/chat.ts +5 -0
- package/src/tools/classroom.ts +2 -0
- package/src/tools/contacts.ts +1 -1
- package/src/tools/docs.ts +1 -0
- package/src/tools/drive.ts +2 -2
- package/src/tools/sheets.ts +1 -1
- package/src/tools/slides.ts +2 -0
- package/src/tools/tasks.ts +1 -1
|
@@ -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.
|
|
10
|
+
"version": "4.2.4"
|
|
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.
|
|
18
|
+
"version": "4.2.4",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
package/dist/index.js
CHANGED
|
@@ -35517,6 +35517,7 @@ function registerAppScriptTools(server) {
|
|
|
35517
35517
|
});
|
|
35518
35518
|
server.registerTool("gog_appscript_pull", {
|
|
35519
35519
|
description: "Write a project's files into a local directory, for editing a script as ordinary files. THE DIRECTORY IS RESOLVED WHERE GOG RUNS, which is the caller's own machine only on a local (stdio) deployment: on a hosted deployment (e.g. mcp-host) the files land on that server where the caller cannot reach them. Use gog_appscript_content there instead \u2014 it returns the same source in the response. Existing files are left alone unless overwrite is set. Read-only as far as Google is concerned: nothing is pushed back." + apiEnableNote,
|
|
35520
|
+
annotations: { destructiveHint: true },
|
|
35520
35521
|
inputSchema: external_exports.object({
|
|
35521
35522
|
scriptId: scriptIdParam,
|
|
35522
35523
|
dir: external_exports.string().describe("Destination directory, resolved on the machine where gog runs"),
|
|
@@ -35530,6 +35531,7 @@ function registerAppScriptTools(server) {
|
|
|
35530
35531
|
});
|
|
35531
35532
|
server.registerTool("gog_appscript_create", {
|
|
35532
35533
|
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,
|
|
35534
|
+
annotations: { destructiveHint: true },
|
|
35533
35535
|
inputSchema: external_exports.object({
|
|
35534
35536
|
title: external_exports.string().describe("Project title"),
|
|
35535
35537
|
parentId: external_exports.string().optional().describe("Drive file ID to bind the project to (Sheet, Doc or Form). Omit for a standalone project."),
|
|
@@ -36031,6 +36033,7 @@ function registerChatTools(server) {
|
|
|
36031
36033
|
});
|
|
36032
36034
|
server.registerTool("gog_chat_spaces_create", {
|
|
36033
36035
|
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,
|
|
36036
|
+
annotations: { destructiveHint: true },
|
|
36034
36037
|
inputSchema: external_exports.object({
|
|
36035
36038
|
displayName: external_exports.string().describe("Display name for the new space"),
|
|
36036
36039
|
members: external_exports.array(external_exports.string()).optional().describe('Initial members, as email addresses or "users/..." resource names'),
|
|
@@ -36099,6 +36102,7 @@ function registerChatTools(server) {
|
|
|
36099
36102
|
});
|
|
36100
36103
|
server.registerTool("gog_chat_messages_send", {
|
|
36101
36104
|
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,
|
|
36105
|
+
annotations: { destructiveHint: true },
|
|
36102
36106
|
inputSchema: external_exports.object({
|
|
36103
36107
|
space: spaceParam,
|
|
36104
36108
|
text: external_exports.string().optional().describe("Message text. Optional only when an attachment is supplied."),
|
|
@@ -36122,6 +36126,7 @@ function registerChatTools(server) {
|
|
|
36122
36126
|
});
|
|
36123
36127
|
server.registerTool("gog_chat_dm_send", {
|
|
36124
36128
|
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,
|
|
36129
|
+
annotations: { destructiveHint: true },
|
|
36125
36130
|
inputSchema: external_exports.object({
|
|
36126
36131
|
email: external_exports.string().describe("Recipient email address"),
|
|
36127
36132
|
text: external_exports.string().describe("Message text"),
|
|
@@ -36135,6 +36140,7 @@ function registerChatTools(server) {
|
|
|
36135
36140
|
});
|
|
36136
36141
|
server.registerTool("gog_chat_dm_space", {
|
|
36137
36142
|
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,
|
|
36143
|
+
annotations: { destructiveHint: true },
|
|
36138
36144
|
inputSchema: external_exports.object({
|
|
36139
36145
|
email: external_exports.string().describe("The other person's email address"),
|
|
36140
36146
|
account: accountParam
|
|
@@ -36159,6 +36165,7 @@ function registerChatTools(server) {
|
|
|
36159
36165
|
});
|
|
36160
36166
|
server.registerTool("gog_chat_reactions_create", {
|
|
36161
36167
|
description: 'React to a message with an emoji. Visible to the space immediately. Pass the emoji itself ("\u{1F44D}"), not a :shortcode:.' + workspaceOnlyNote,
|
|
36168
|
+
annotations: { destructiveHint: false },
|
|
36162
36169
|
inputSchema: external_exports.object({
|
|
36163
36170
|
message: external_exports.string().describe('Message resource name ("spaces/AAAA/messages/BBBB"), or a bare message ID together with `space`'),
|
|
36164
36171
|
emoji: external_exports.string().describe('The emoji character to react with, e.g. "\u{1F44D}"'),
|
|
@@ -36471,6 +36478,7 @@ function registerClassroomTools(server) {
|
|
|
36471
36478
|
});
|
|
36472
36479
|
server.registerTool("gog_classroom_announcements_create", {
|
|
36473
36480
|
description: "Create an announcement in a Google Classroom course.",
|
|
36481
|
+
annotations: { destructiveHint: true },
|
|
36474
36482
|
inputSchema: external_exports.object({
|
|
36475
36483
|
courseId: external_exports.string().describe("Course ID"),
|
|
36476
36484
|
text: external_exports.string().describe("Announcement text"),
|
|
@@ -36548,6 +36556,7 @@ function registerClassroomTools(server) {
|
|
|
36548
36556
|
});
|
|
36549
36557
|
server.registerTool("gog_classroom_invitations_accept", {
|
|
36550
36558
|
description: "Accept a Google Classroom invitation.",
|
|
36559
|
+
annotations: { destructiveHint: true },
|
|
36551
36560
|
inputSchema: external_exports.object({
|
|
36552
36561
|
invitationId: external_exports.string().describe("Invitation ID"),
|
|
36553
36562
|
account: accountParam
|
|
@@ -36607,7 +36616,7 @@ function registerContactsTools(server) {
|
|
|
36607
36616
|
});
|
|
36608
36617
|
server.registerTool("gog_contacts_create", {
|
|
36609
36618
|
description: "Create a new Google Contact.",
|
|
36610
|
-
annotations: { destructiveHint:
|
|
36619
|
+
annotations: { destructiveHint: true },
|
|
36611
36620
|
inputSchema: external_exports.object({
|
|
36612
36621
|
givenName: external_exports.string().describe("Given (first) name"),
|
|
36613
36622
|
familyName: external_exports.string().optional().describe("Family (last) name"),
|
|
@@ -36656,6 +36665,7 @@ function registerDocsTools(server) {
|
|
|
36656
36665
|
});
|
|
36657
36666
|
server.registerTool("gog_docs_create", {
|
|
36658
36667
|
description: "Create a new Google Doc. Returns JSON with the new docId and URL.",
|
|
36668
|
+
annotations: { destructiveHint: true },
|
|
36659
36669
|
inputSchema: external_exports.object({
|
|
36660
36670
|
title: external_exports.string().describe("Title for the new document"),
|
|
36661
36671
|
account: accountParam
|
|
@@ -36815,7 +36825,7 @@ function registerDriveTools(server) {
|
|
|
36815
36825
|
});
|
|
36816
36826
|
server.registerTool("gog_drive_rename", {
|
|
36817
36827
|
description: "Rename a file or folder in Google Drive.",
|
|
36818
|
-
annotations: { destructiveHint:
|
|
36828
|
+
annotations: { destructiveHint: false },
|
|
36819
36829
|
inputSchema: external_exports.object({
|
|
36820
36830
|
fileId: external_exports.string().describe("File or folder ID"),
|
|
36821
36831
|
newName: external_exports.string().describe("New name"),
|
|
@@ -36826,7 +36836,7 @@ function registerDriveTools(server) {
|
|
|
36826
36836
|
});
|
|
36827
36837
|
server.registerTool("gog_drive_move", {
|
|
36828
36838
|
description: "Move a file to a different folder in Google Drive.",
|
|
36829
|
-
annotations: { destructiveHint:
|
|
36839
|
+
annotations: { destructiveHint: false },
|
|
36830
36840
|
inputSchema: external_exports.object({
|
|
36831
36841
|
fileId: external_exports.string().describe("File ID to move"),
|
|
36832
36842
|
parentId: external_exports.string().describe("Destination folder ID"),
|
|
@@ -37492,7 +37502,7 @@ function registerSheetsTools(server) {
|
|
|
37492
37502
|
});
|
|
37493
37503
|
server.registerTool("gog_sheets_create", {
|
|
37494
37504
|
description: "Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.",
|
|
37495
|
-
annotations: { destructiveHint:
|
|
37505
|
+
annotations: { destructiveHint: true },
|
|
37496
37506
|
inputSchema: external_exports.object({
|
|
37497
37507
|
title: external_exports.string().describe("Title for the new spreadsheet"),
|
|
37498
37508
|
account: accountParam
|
|
@@ -37546,6 +37556,7 @@ function registerSlidesTools(server) {
|
|
|
37546
37556
|
});
|
|
37547
37557
|
server.registerTool("gog_slides_create", {
|
|
37548
37558
|
description: "Create a new Google Slides presentation, optionally in a folder or copying from a template.",
|
|
37559
|
+
annotations: { destructiveHint: true },
|
|
37549
37560
|
inputSchema: external_exports.object({
|
|
37550
37561
|
title: external_exports.string().describe("Presentation title"),
|
|
37551
37562
|
parent: external_exports.string().optional().describe("Destination folder ID"),
|
|
@@ -37560,6 +37571,7 @@ function registerSlidesTools(server) {
|
|
|
37560
37571
|
});
|
|
37561
37572
|
server.registerTool("gog_slides_copy", {
|
|
37562
37573
|
description: "Copy a Google Slides presentation to a new presentation with the given title.",
|
|
37574
|
+
annotations: { destructiveHint: true },
|
|
37563
37575
|
inputSchema: external_exports.object({
|
|
37564
37576
|
presentationId: external_exports.string().describe("Presentation ID to copy"),
|
|
37565
37577
|
title: external_exports.string().describe("Title for the new copy"),
|
|
@@ -37648,7 +37660,7 @@ function registerTasksTools(server) {
|
|
|
37648
37660
|
});
|
|
37649
37661
|
server.registerTool("gog_tasks_done", {
|
|
37650
37662
|
description: "Mark a task as completed.",
|
|
37651
|
-
annotations: { destructiveHint:
|
|
37663
|
+
annotations: { destructiveHint: false },
|
|
37652
37664
|
inputSchema: external_exports.object({
|
|
37653
37665
|
tasklistId: external_exports.string().describe("Task list ID"),
|
|
37654
37666
|
taskId: external_exports.string().describe("Task ID"),
|
|
@@ -37672,7 +37684,7 @@ function registerTasksTools(server) {
|
|
|
37672
37684
|
}
|
|
37673
37685
|
|
|
37674
37686
|
// src/server.ts
|
|
37675
|
-
var VERSION = true ? "4.2.
|
|
37687
|
+
var VERSION = true ? "4.2.4" : "0.0.0";
|
|
37676
37688
|
var BASE_TOOL_REGISTRARS = [
|
|
37677
37689
|
registerApiTools,
|
|
37678
37690
|
registerAppScriptTools,
|
package/dist/lib.js
CHANGED
|
@@ -33848,6 +33848,7 @@ function registerAppScriptTools(server) {
|
|
|
33848
33848
|
});
|
|
33849
33849
|
server.registerTool("gog_appscript_pull", {
|
|
33850
33850
|
description: "Write a project's files into a local directory, for editing a script as ordinary files. THE DIRECTORY IS RESOLVED WHERE GOG RUNS, which is the caller's own machine only on a local (stdio) deployment: on a hosted deployment (e.g. mcp-host) the files land on that server where the caller cannot reach them. Use gog_appscript_content there instead \u2014 it returns the same source in the response. Existing files are left alone unless overwrite is set. Read-only as far as Google is concerned: nothing is pushed back." + apiEnableNote,
|
|
33851
|
+
annotations: { destructiveHint: true },
|
|
33851
33852
|
inputSchema: external_exports.object({
|
|
33852
33853
|
scriptId: scriptIdParam,
|
|
33853
33854
|
dir: external_exports.string().describe("Destination directory, resolved on the machine where gog runs"),
|
|
@@ -33861,6 +33862,7 @@ function registerAppScriptTools(server) {
|
|
|
33861
33862
|
});
|
|
33862
33863
|
server.registerTool("gog_appscript_create", {
|
|
33863
33864
|
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,
|
|
33865
|
+
annotations: { destructiveHint: true },
|
|
33864
33866
|
inputSchema: external_exports.object({
|
|
33865
33867
|
title: external_exports.string().describe("Project title"),
|
|
33866
33868
|
parentId: external_exports.string().optional().describe("Drive file ID to bind the project to (Sheet, Doc or Form). Omit for a standalone project."),
|
|
@@ -34365,6 +34367,7 @@ function registerChatTools(server) {
|
|
|
34365
34367
|
});
|
|
34366
34368
|
server.registerTool("gog_chat_spaces_create", {
|
|
34367
34369
|
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,
|
|
34370
|
+
annotations: { destructiveHint: true },
|
|
34368
34371
|
inputSchema: external_exports.object({
|
|
34369
34372
|
displayName: external_exports.string().describe("Display name for the new space"),
|
|
34370
34373
|
members: external_exports.array(external_exports.string()).optional().describe('Initial members, as email addresses or "users/..." resource names'),
|
|
@@ -34433,6 +34436,7 @@ function registerChatTools(server) {
|
|
|
34433
34436
|
});
|
|
34434
34437
|
server.registerTool("gog_chat_messages_send", {
|
|
34435
34438
|
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,
|
|
34439
|
+
annotations: { destructiveHint: true },
|
|
34436
34440
|
inputSchema: external_exports.object({
|
|
34437
34441
|
space: spaceParam,
|
|
34438
34442
|
text: external_exports.string().optional().describe("Message text. Optional only when an attachment is supplied."),
|
|
@@ -34456,6 +34460,7 @@ function registerChatTools(server) {
|
|
|
34456
34460
|
});
|
|
34457
34461
|
server.registerTool("gog_chat_dm_send", {
|
|
34458
34462
|
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,
|
|
34463
|
+
annotations: { destructiveHint: true },
|
|
34459
34464
|
inputSchema: external_exports.object({
|
|
34460
34465
|
email: external_exports.string().describe("Recipient email address"),
|
|
34461
34466
|
text: external_exports.string().describe("Message text"),
|
|
@@ -34469,6 +34474,7 @@ function registerChatTools(server) {
|
|
|
34469
34474
|
});
|
|
34470
34475
|
server.registerTool("gog_chat_dm_space", {
|
|
34471
34476
|
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,
|
|
34477
|
+
annotations: { destructiveHint: true },
|
|
34472
34478
|
inputSchema: external_exports.object({
|
|
34473
34479
|
email: external_exports.string().describe("The other person's email address"),
|
|
34474
34480
|
account: accountParam
|
|
@@ -34493,6 +34499,7 @@ function registerChatTools(server) {
|
|
|
34493
34499
|
});
|
|
34494
34500
|
server.registerTool("gog_chat_reactions_create", {
|
|
34495
34501
|
description: 'React to a message with an emoji. Visible to the space immediately. Pass the emoji itself ("\u{1F44D}"), not a :shortcode:.' + workspaceOnlyNote,
|
|
34502
|
+
annotations: { destructiveHint: false },
|
|
34496
34503
|
inputSchema: external_exports.object({
|
|
34497
34504
|
message: external_exports.string().describe('Message resource name ("spaces/AAAA/messages/BBBB"), or a bare message ID together with `space`'),
|
|
34498
34505
|
emoji: external_exports.string().describe('The emoji character to react with, e.g. "\u{1F44D}"'),
|
|
@@ -34805,6 +34812,7 @@ function registerClassroomTools(server) {
|
|
|
34805
34812
|
});
|
|
34806
34813
|
server.registerTool("gog_classroom_announcements_create", {
|
|
34807
34814
|
description: "Create an announcement in a Google Classroom course.",
|
|
34815
|
+
annotations: { destructiveHint: true },
|
|
34808
34816
|
inputSchema: external_exports.object({
|
|
34809
34817
|
courseId: external_exports.string().describe("Course ID"),
|
|
34810
34818
|
text: external_exports.string().describe("Announcement text"),
|
|
@@ -34882,6 +34890,7 @@ function registerClassroomTools(server) {
|
|
|
34882
34890
|
});
|
|
34883
34891
|
server.registerTool("gog_classroom_invitations_accept", {
|
|
34884
34892
|
description: "Accept a Google Classroom invitation.",
|
|
34893
|
+
annotations: { destructiveHint: true },
|
|
34885
34894
|
inputSchema: external_exports.object({
|
|
34886
34895
|
invitationId: external_exports.string().describe("Invitation ID"),
|
|
34887
34896
|
account: accountParam
|
|
@@ -34941,7 +34950,7 @@ function registerContactsTools(server) {
|
|
|
34941
34950
|
});
|
|
34942
34951
|
server.registerTool("gog_contacts_create", {
|
|
34943
34952
|
description: "Create a new Google Contact.",
|
|
34944
|
-
annotations: { destructiveHint:
|
|
34953
|
+
annotations: { destructiveHint: true },
|
|
34945
34954
|
inputSchema: external_exports.object({
|
|
34946
34955
|
givenName: external_exports.string().describe("Given (first) name"),
|
|
34947
34956
|
familyName: external_exports.string().optional().describe("Family (last) name"),
|
|
@@ -34990,6 +34999,7 @@ function registerDocsTools(server) {
|
|
|
34990
34999
|
});
|
|
34991
35000
|
server.registerTool("gog_docs_create", {
|
|
34992
35001
|
description: "Create a new Google Doc. Returns JSON with the new docId and URL.",
|
|
35002
|
+
annotations: { destructiveHint: true },
|
|
34993
35003
|
inputSchema: external_exports.object({
|
|
34994
35004
|
title: external_exports.string().describe("Title for the new document"),
|
|
34995
35005
|
account: accountParam
|
|
@@ -35149,7 +35159,7 @@ function registerDriveTools(server) {
|
|
|
35149
35159
|
});
|
|
35150
35160
|
server.registerTool("gog_drive_rename", {
|
|
35151
35161
|
description: "Rename a file or folder in Google Drive.",
|
|
35152
|
-
annotations: { destructiveHint:
|
|
35162
|
+
annotations: { destructiveHint: false },
|
|
35153
35163
|
inputSchema: external_exports.object({
|
|
35154
35164
|
fileId: external_exports.string().describe("File or folder ID"),
|
|
35155
35165
|
newName: external_exports.string().describe("New name"),
|
|
@@ -35160,7 +35170,7 @@ function registerDriveTools(server) {
|
|
|
35160
35170
|
});
|
|
35161
35171
|
server.registerTool("gog_drive_move", {
|
|
35162
35172
|
description: "Move a file to a different folder in Google Drive.",
|
|
35163
|
-
annotations: { destructiveHint:
|
|
35173
|
+
annotations: { destructiveHint: false },
|
|
35164
35174
|
inputSchema: external_exports.object({
|
|
35165
35175
|
fileId: external_exports.string().describe("File ID to move"),
|
|
35166
35176
|
parentId: external_exports.string().describe("Destination folder ID"),
|
|
@@ -35826,7 +35836,7 @@ function registerSheetsTools(server) {
|
|
|
35826
35836
|
});
|
|
35827
35837
|
server.registerTool("gog_sheets_create", {
|
|
35828
35838
|
description: "Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.",
|
|
35829
|
-
annotations: { destructiveHint:
|
|
35839
|
+
annotations: { destructiveHint: true },
|
|
35830
35840
|
inputSchema: external_exports.object({
|
|
35831
35841
|
title: external_exports.string().describe("Title for the new spreadsheet"),
|
|
35832
35842
|
account: accountParam
|
|
@@ -35880,6 +35890,7 @@ function registerSlidesTools(server) {
|
|
|
35880
35890
|
});
|
|
35881
35891
|
server.registerTool("gog_slides_create", {
|
|
35882
35892
|
description: "Create a new Google Slides presentation, optionally in a folder or copying from a template.",
|
|
35893
|
+
annotations: { destructiveHint: true },
|
|
35883
35894
|
inputSchema: external_exports.object({
|
|
35884
35895
|
title: external_exports.string().describe("Presentation title"),
|
|
35885
35896
|
parent: external_exports.string().optional().describe("Destination folder ID"),
|
|
@@ -35894,6 +35905,7 @@ function registerSlidesTools(server) {
|
|
|
35894
35905
|
});
|
|
35895
35906
|
server.registerTool("gog_slides_copy", {
|
|
35896
35907
|
description: "Copy a Google Slides presentation to a new presentation with the given title.",
|
|
35908
|
+
annotations: { destructiveHint: true },
|
|
35897
35909
|
inputSchema: external_exports.object({
|
|
35898
35910
|
presentationId: external_exports.string().describe("Presentation ID to copy"),
|
|
35899
35911
|
title: external_exports.string().describe("Title for the new copy"),
|
|
@@ -35982,7 +35994,7 @@ function registerTasksTools(server) {
|
|
|
35982
35994
|
});
|
|
35983
35995
|
server.registerTool("gog_tasks_done", {
|
|
35984
35996
|
description: "Mark a task as completed.",
|
|
35985
|
-
annotations: { destructiveHint:
|
|
35997
|
+
annotations: { destructiveHint: false },
|
|
35986
35998
|
inputSchema: external_exports.object({
|
|
35987
35999
|
tasklistId: external_exports.string().describe("Task list ID"),
|
|
35988
36000
|
taskId: external_exports.string().describe("Task ID"),
|
|
@@ -36006,7 +36018,7 @@ function registerTasksTools(server) {
|
|
|
36006
36018
|
}
|
|
36007
36019
|
|
|
36008
36020
|
// src/server.ts
|
|
36009
|
-
var VERSION = true ? "4.2.
|
|
36021
|
+
var VERSION = true ? "4.2.4" : "0.0.0";
|
|
36010
36022
|
var BASE_TOOL_REGISTRARS = [
|
|
36011
36023
|
registerApiTools,
|
|
36012
36024
|
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.
|
|
6
|
+
"version": "4.2.4",
|
|
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
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"source": "github",
|
|
8
8
|
"subfolder": "packages/gogcli-mcp"
|
|
9
9
|
},
|
|
10
|
-
"version": "4.2.
|
|
10
|
+
"version": "4.2.4",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp",
|
|
15
|
-
"version": "4.2.
|
|
15
|
+
"version": "4.2.4",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
package/src/tools/appscript.ts
CHANGED
|
@@ -65,6 +65,7 @@ export function registerAppScriptTools(server: McpServer): void {
|
|
|
65
65
|
+ 'reach them. Use gog_appscript_content there instead — it returns the same source in the response. Existing files '
|
|
66
66
|
+ 'are left alone unless overwrite is set. Read-only as far as Google is concerned: nothing is pushed back.'
|
|
67
67
|
+ apiEnableNote,
|
|
68
|
+
annotations: { destructiveHint: true },
|
|
68
69
|
inputSchema: z.object({
|
|
69
70
|
scriptId: scriptIdParam,
|
|
70
71
|
dir: z.string().describe('Destination directory, resolved on the machine where gog runs'),
|
|
@@ -82,6 +83,7 @@ export function registerAppScriptTools(server: McpServer): void {
|
|
|
82
83
|
'Create a new, empty Apps Script project. Pass parentId to bind it to a Drive file (a Sheet, Doc or Form), which is '
|
|
83
84
|
+ 'what makes the script a container-bound script with access to that document; omit it for a standalone project. '
|
|
84
85
|
+ 'gog cannot upload code, so the project starts empty either way.' + apiEnableNote,
|
|
86
|
+
annotations: { destructiveHint: true },
|
|
85
87
|
inputSchema: z.object({
|
|
86
88
|
title: z.string().describe('Project title'),
|
|
87
89
|
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/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,
|
|
@@ -254,6 +258,7 @@ export function registerChatTools(server: McpServer): void {
|
|
|
254
258
|
description:
|
|
255
259
|
'React to a message with an emoji. Visible to the space immediately. Pass the emoji itself ("👍"), not a :shortcode:.'
|
|
256
260
|
+ workspaceOnlyNote,
|
|
261
|
+
annotations: { destructiveHint: false },
|
|
257
262
|
inputSchema: z.object({
|
|
258
263
|
message: z.string().describe('Message resource name ("spaces/AAAA/messages/BBBB"), or a bare message ID together with `space`'),
|
|
259
264
|
emoji: z.string().describe('The emoji character to react with, e.g. "👍"'),
|
package/src/tools/classroom.ts
CHANGED
|
@@ -302,6 +302,7 @@ export function registerClassroomTools(server: McpServer): void {
|
|
|
302
302
|
|
|
303
303
|
server.registerTool('gog_classroom_announcements_create', {
|
|
304
304
|
description: 'Create an announcement in a Google Classroom course.',
|
|
305
|
+
annotations: { destructiveHint: true },
|
|
305
306
|
inputSchema: z.object({
|
|
306
307
|
courseId: z.string().describe('Course ID'),
|
|
307
308
|
text: z.string().describe('Announcement text'),
|
|
@@ -384,6 +385,7 @@ export function registerClassroomTools(server: McpServer): void {
|
|
|
384
385
|
|
|
385
386
|
server.registerTool('gog_classroom_invitations_accept', {
|
|
386
387
|
description: 'Accept a Google Classroom invitation.',
|
|
388
|
+
annotations: { destructiveHint: true },
|
|
387
389
|
inputSchema: z.object({
|
|
388
390
|
invitationId: z.string().describe('Invitation ID'),
|
|
389
391
|
account: accountParam,
|
package/src/tools/contacts.ts
CHANGED
|
@@ -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:
|
|
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,
|
package/src/tools/drive.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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'),
|
package/src/tools/sheets.ts
CHANGED
|
@@ -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:
|
|
123
|
+
annotations: { destructiveHint: true },
|
|
124
124
|
inputSchema: z.object({
|
|
125
125
|
title: z.string().describe('Title for the new spreadsheet'),
|
|
126
126
|
account: accountParam,
|
package/src/tools/slides.ts
CHANGED
|
@@ -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'),
|
package/src/tools/tasks.ts
CHANGED
|
@@ -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:
|
|
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'),
|