gogcli-mcp-docs 2.0.10 → 2.0.11
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/README.md +17 -3
- package/SKILL.md +14 -2
- package/dist/index.js +4 -4
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/tools/docs-extra.ts +2 -2
- package/tests/tools/docs-extra.test.ts +22 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "Extended Google Docs for Claude via gogcli — auth + full Docs and comments support",
|
|
10
|
-
"version": "2.0.
|
|
10
|
+
"version": "2.0.11"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "gogcli (Docs)",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Extended Google Docs for Claude via gogcli — auth + full Docs and comments support",
|
|
18
|
-
"version": "2.0.
|
|
18
|
+
"version": "2.0.11",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
package/README.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
> [!WARNING]
|
|
4
4
|
> **AI-developed project.** This codebase was built and is actively maintained by [Claude Code](https://www.anthropic.com/claude). Review all code and tool permissions before use.
|
|
5
5
|
|
|
6
|
-
Extended Google Docs [MCP](https://modelcontextprotocol.io) server via [gogcli](https://github.com/
|
|
6
|
+
Extended Google Docs [MCP](https://modelcontextprotocol.io) server via [gogcli](https://github.com/openclaw/gogcli). Includes auth tools plus 18 additional dedicated Docs tools for editing, exporting, comments, and more.
|
|
7
7
|
|
|
8
8
|
## Requirements
|
|
9
9
|
|
|
10
|
-
- [gogcli](https://github.com/
|
|
10
|
+
- [gogcli](https://github.com/openclaw/gogcli) installed and authenticated
|
|
11
11
|
- Node.js 18+
|
|
12
12
|
|
|
13
13
|
```bash
|
|
@@ -44,19 +44,23 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
|
44
44
|
claude mcp add gogcli-docs -- gogcli-mcp-docs
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
## Extra Docs Tools (
|
|
47
|
+
## Extra Docs Tools (18)
|
|
48
48
|
|
|
49
49
|
Plus 5 auth tools and 7 base Docs tools (info, cat, create, write, find-replace, structure, run).
|
|
50
50
|
|
|
51
51
|
| Tool | Description |
|
|
52
52
|
|------|-------------|
|
|
53
|
+
| `gog_docs_append` | Append text or markdown to the end of a doc |
|
|
53
54
|
| `gog_docs_copy` | Copy a document |
|
|
54
55
|
| `gog_docs_delete` | Delete content by character index range |
|
|
55
56
|
| `gog_docs_edit` | Find and replace with case-sensitivity control |
|
|
56
57
|
| `gog_docs_export` | Export as PDF, TXT, HTML, DOCX, RTF, ODT, or EPUB |
|
|
58
|
+
| `gog_docs_format` | Apply character / paragraph formatting (bold, color, alignment, …) |
|
|
57
59
|
| `gog_docs_insert` | Insert text at a specific position |
|
|
58
60
|
| `gog_docs_list_tabs` | List all document tabs |
|
|
61
|
+
| `gog_docs_read` | Read doc as plain text or raw JSON |
|
|
59
62
|
| `gog_docs_sed` | Stream-edit with sed-like regex expressions |
|
|
63
|
+
| `gog_docs_trash` | Move a doc to Drive trash |
|
|
60
64
|
| `gog_docs_update` | Update document content at a specific position |
|
|
61
65
|
| `gog_docs_comments_list` | List comments (open or resolved) |
|
|
62
66
|
| `gog_docs_comments_get` | Get a comment with its replies |
|
|
@@ -65,6 +69,16 @@ Plus 5 auth tools and 7 base Docs tools (info, cat, create, write, find-replace,
|
|
|
65
69
|
| `gog_docs_comments_resolve` | Resolve a comment |
|
|
66
70
|
| `gog_docs_comments_delete` | Delete a comment |
|
|
67
71
|
|
|
72
|
+
## Known limitations: `gog_docs_append` with `markdown: true`
|
|
73
|
+
|
|
74
|
+
These bugs live in gogcli's upstream markdown → Docs converter; the wrapper just passes `--markdown` through. Tracked upstream:
|
|
75
|
+
|
|
76
|
+
| Symptom | Workaround | Upstream |
|
|
77
|
+
|---------|-----------|----------|
|
|
78
|
+
| 3+ tables in one call reorders the trailing punctuation of the paragraph before the 3rd table | Split into multiple calls with ≤2 tables each | [openclaw/gogcli#607](https://github.com/openclaw/gogcli/issues/607) |
|
|
79
|
+
| Inline `**bold**` / `*italic*` / `` `code` `` inside table cells renders as literal characters | Insert plain cell text, then apply formatting via `gog_docs_format` | [openclaw/gogcli#608](https://github.com/openclaw/gogcli/issues/608) |
|
|
80
|
+
| Tables with an empty header row leak the last data row as literal pipe text | Always supply a non-empty header row | [openclaw/gogcli#609](https://github.com/openclaw/gogcli/issues/609) |
|
|
81
|
+
|
|
68
82
|
## License
|
|
69
83
|
|
|
70
84
|
MIT
|
package/SKILL.md
CHANGED
|
@@ -5,13 +5,13 @@ description: Use when the user asks to read, write, edit, export, or comment on
|
|
|
5
5
|
|
|
6
6
|
# gogcli-mcp-docs
|
|
7
7
|
|
|
8
|
-
Extended Google Docs MCP server via [gogcli](https://github.com/
|
|
8
|
+
Extended Google Docs MCP server via [gogcli](https://github.com/openclaw/gogcli) — 30 tools: auth + 7 base Docs + 18 extra dedicated Docs tools.
|
|
9
9
|
|
|
10
10
|
- **Source:** [github.com/chrischall/gogcli-mcp](https://github.com/chrischall/gogcli-mcp)
|
|
11
11
|
|
|
12
12
|
## Requirements
|
|
13
13
|
|
|
14
|
-
- [gogcli](https://github.com/
|
|
14
|
+
- [gogcli](https://github.com/openclaw/gogcli) installed and authenticated
|
|
15
15
|
- Node.js 18 or later
|
|
16
16
|
|
|
17
17
|
## Setup
|
|
@@ -34,13 +34,17 @@ Extended Google Docs MCP server via [gogcli](https://github.com/steipete/gogcli)
|
|
|
34
34
|
|
|
35
35
|
| Tool | What it does |
|
|
36
36
|
|------|-------------|
|
|
37
|
+
| `gog_docs_append` | Append text or markdown to the end of a doc |
|
|
37
38
|
| `gog_docs_copy` | Copy a document |
|
|
38
39
|
| `gog_docs_delete` | Delete content by character index range |
|
|
39
40
|
| `gog_docs_edit` | Find and replace with case-sensitivity |
|
|
40
41
|
| `gog_docs_export` | Export as PDF, TXT, HTML, DOCX, RTF, ODT, or EPUB |
|
|
42
|
+
| `gog_docs_format` | Apply character / paragraph formatting |
|
|
41
43
|
| `gog_docs_insert` | Insert text at a specific position |
|
|
42
44
|
| `gog_docs_list_tabs` | List all document tabs |
|
|
45
|
+
| `gog_docs_read` | Read doc as plain text or raw JSON |
|
|
43
46
|
| `gog_docs_sed` | Stream-edit with sed-like regex |
|
|
47
|
+
| `gog_docs_trash` | Move a doc to Drive trash |
|
|
44
48
|
| `gog_docs_update` | Update content at a specific position |
|
|
45
49
|
| `gog_docs_comments_list` | List comments (open or resolved) |
|
|
46
50
|
| `gog_docs_comments_get` | Get a comment with replies |
|
|
@@ -50,3 +54,11 @@ Extended Google Docs MCP server via [gogcli](https://github.com/steipete/gogcli)
|
|
|
50
54
|
| `gog_docs_comments_delete` | Delete a comment |
|
|
51
55
|
|
|
52
56
|
Plus 5 auth tools and 7 base Docs tools.
|
|
57
|
+
|
|
58
|
+
### `gog_docs_append` with `markdown: true` — known limitations
|
|
59
|
+
|
|
60
|
+
Three bugs in gogcli's upstream markdown→Docs converter to be aware of:
|
|
61
|
+
|
|
62
|
+
- **3+ tables in one call** reorders the trailing punctuation of the paragraph before the 3rd table — split into multiple calls with ≤2 tables each ([openclaw/gogcli#607](https://github.com/openclaw/gogcli/issues/607)).
|
|
63
|
+
- **Inline `**bold**` / `*italic*` / `` `code` `` inside table cells** renders as literal characters — insert plain cell text, then apply formatting via `gog_docs_format` ([openclaw/gogcli#608](https://github.com/openclaw/gogcli/issues/608)).
|
|
64
|
+
- **Empty-header tables** leak the last data row as literal pipe text — always supply a non-empty header row ([openclaw/gogcli#609](https://github.com/openclaw/gogcli/issues/609)).
|
package/dist/index.js
CHANGED
|
@@ -31063,7 +31063,7 @@ async function run(args, options = {}) {
|
|
|
31063
31063
|
settled = true;
|
|
31064
31064
|
if (err.code === "ENOENT") {
|
|
31065
31065
|
reject(new Error(
|
|
31066
|
-
"gog executable not found. Install gogcli (https://github.com/
|
|
31066
|
+
"gog executable not found. Install gogcli (https://github.com/openclaw/gogcli) or set GOG_PATH in your MCP client config to the absolute binary path (run `which gog` in a terminal to find it)."
|
|
31067
31067
|
));
|
|
31068
31068
|
return;
|
|
31069
31069
|
}
|
|
@@ -31292,7 +31292,7 @@ function registerDocsTools(server2) {
|
|
|
31292
31292
|
var cellValueParam = external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null()]);
|
|
31293
31293
|
|
|
31294
31294
|
// ../gogcli-mcp/src/server.ts
|
|
31295
|
-
var VERSION = true ? "2.0.
|
|
31295
|
+
var VERSION = true ? "2.0.11" : "0.0.0";
|
|
31296
31296
|
function createServer(options) {
|
|
31297
31297
|
return new McpServer({
|
|
31298
31298
|
name: options?.name ?? "gogcli",
|
|
@@ -31459,13 +31459,13 @@ function registerExtraDocsTools(server2) {
|
|
|
31459
31459
|
return runOrDiagnose(args, { account });
|
|
31460
31460
|
});
|
|
31461
31461
|
server2.registerTool("gog_docs_append", {
|
|
31462
|
-
description: "Append text to the end of a Google Doc. This is the right tool for iterative document construction \u2014 multiple sequential calls produce content in the order they were called. Use gog_docs_insert only when you need to insert at a specific character position.",
|
|
31462
|
+
description: "Append text to the end of a Google Doc. This is the right tool for iterative document construction \u2014 multiple sequential calls produce content in the order they were called. Use gog_docs_insert only when you need to insert at a specific character position. Known markdown=true limitations (tracked upstream): (a) 3+ tables in one call reorders the trailing punctuation of the paragraph before the 3rd table \u2014 split into multiple calls with \u22642 tables each (openclaw/gogcli#607); (b) inline **bold** / *italic* / `code` inside table cells renders as literal characters \u2014 pre-format cell text separately or apply formatting after the append via gog_docs_format (openclaw/gogcli#608); (c) tables with an empty header row leak the last data row as literal pipe text \u2014 always supply a non-empty header (openclaw/gogcli#609).",
|
|
31463
31463
|
annotations: { destructiveHint: true },
|
|
31464
31464
|
inputSchema: {
|
|
31465
31465
|
docId: external_exports.string().describe("Doc ID (from the URL)"),
|
|
31466
31466
|
text: external_exports.string().optional().describe("Text content to append"),
|
|
31467
31467
|
file: external_exports.string().optional().describe('Path to a text file to append (use "-" for stdin)'),
|
|
31468
|
-
markdown: external_exports.boolean().optional().describe("Convert markdown to Google Docs formatting (headings, bold, lists, etc.)"),
|
|
31468
|
+
markdown: external_exports.boolean().optional().describe("Convert markdown to Google Docs formatting (headings, bold, lists, etc.). See the tool description for known upstream limitations around tables."),
|
|
31469
31469
|
tab: external_exports.string().optional().describe("Target tab title or ID (for multi-tab docs)"),
|
|
31470
31470
|
account: accountParam
|
|
31471
31471
|
}
|
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.3",
|
|
4
4
|
"name": "gogcli-mcp-docs",
|
|
5
5
|
"display_name": "gogcli (Docs)",
|
|
6
|
-
"version": "2.0.
|
|
6
|
+
"version": "2.0.11",
|
|
7
7
|
"description": "Extended Google Docs for Claude via gogcli — auth + full Docs and comments support",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Chris Hall",
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"name": "gog_docs_append",
|
|
164
|
-
"description": "Append text to the end of a Google Doc (the right tool for iterative construction
|
|
164
|
+
"description": "Append text to the end of a Google Doc (the right tool for iterative construction). markdown=true known limitations (upstream): 3+ tables/call reorders trailing punctuation (split calls); inline bold/italic/code in cells renders literally (format after); empty-header tables leak literal pipes (use non-empty header)."
|
|
165
165
|
},
|
|
166
166
|
{
|
|
167
167
|
"name": "gog_docs_read",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-docs",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.11",
|
|
4
4
|
"mcpName": "io.github.chrischall/gogcli-mcp-docs",
|
|
5
5
|
"description": "Extended Google Docs MCP server via gogcli — all base tools plus full Docs support",
|
|
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-docs"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.0.
|
|
10
|
+
"version": "2.0.11",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp-docs",
|
|
15
|
-
"version": "2.0.
|
|
15
|
+
"version": "2.0.11",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
package/src/tools/docs-extra.ts
CHANGED
|
@@ -185,13 +185,13 @@ export function registerExtraDocsTools(server: McpServer): void {
|
|
|
185
185
|
});
|
|
186
186
|
|
|
187
187
|
server.registerTool('gog_docs_append', {
|
|
188
|
-
description: 'Append text to the end of a Google Doc. This is the right tool for iterative document construction — multiple sequential calls produce content in the order they were called. Use gog_docs_insert only when you need to insert at a specific character position.',
|
|
188
|
+
description: 'Append text to the end of a Google Doc. This is the right tool for iterative document construction — multiple sequential calls produce content in the order they were called. Use gog_docs_insert only when you need to insert at a specific character position. Known markdown=true limitations (tracked upstream): (a) 3+ tables in one call reorders the trailing punctuation of the paragraph before the 3rd table — split into multiple calls with ≤2 tables each (openclaw/gogcli#607); (b) inline **bold** / *italic* / `code` inside table cells renders as literal characters — pre-format cell text separately or apply formatting after the append via gog_docs_format (openclaw/gogcli#608); (c) tables with an empty header row leak the last data row as literal pipe text — always supply a non-empty header (openclaw/gogcli#609).',
|
|
189
189
|
annotations: { destructiveHint: true },
|
|
190
190
|
inputSchema: {
|
|
191
191
|
docId: z.string().describe('Doc ID (from the URL)'),
|
|
192
192
|
text: z.string().optional().describe('Text content to append'),
|
|
193
193
|
file: z.string().optional().describe('Path to a text file to append (use "-" for stdin)'),
|
|
194
|
-
markdown: z.boolean().optional().describe('Convert markdown to Google Docs formatting (headings, bold, lists, etc.)'),
|
|
194
|
+
markdown: z.boolean().optional().describe('Convert markdown to Google Docs formatting (headings, bold, lists, etc.). See the tool description for known upstream limitations around tables.'),
|
|
195
195
|
tab: z.string().optional().describe('Target tab title or ID (for multi-tab docs)'),
|
|
196
196
|
account: accountParam,
|
|
197
197
|
},
|
|
@@ -550,6 +550,28 @@ describe('gog_docs_append', () => {
|
|
|
550
550
|
{ account: undefined },
|
|
551
551
|
);
|
|
552
552
|
});
|
|
553
|
+
|
|
554
|
+
// Regression: the tool description must warn about the 3 known upstream
|
|
555
|
+
// markdown converter bugs (openclaw/gogcli#607, #608, #609). If upstream
|
|
556
|
+
// fixes any of these and the warning is removed, this test fails as a
|
|
557
|
+
// prompt to revisit + reopen the README/SKILL/TODO sections too.
|
|
558
|
+
it('description warns about all 3 known upstream markdown limitations', async () => {
|
|
559
|
+
// Local mock to capture the registration config (the shared harness only
|
|
560
|
+
// captures the handler callback).
|
|
561
|
+
const { McpServer } = await import('@modelcontextprotocol/sdk/server/mcp.js');
|
|
562
|
+
const server = new McpServer({ name: 'test', version: '0.0.0' });
|
|
563
|
+
const configs = new Map<string, { description?: string }>();
|
|
564
|
+
vi.spyOn(server, 'registerTool').mockImplementation((name, config) => {
|
|
565
|
+
configs.set(name, config as { description?: string });
|
|
566
|
+
return undefined as never;
|
|
567
|
+
});
|
|
568
|
+
const { registerExtraDocsTools } = await import('../../src/tools/docs-extra.js');
|
|
569
|
+
registerExtraDocsTools(server);
|
|
570
|
+
const desc = configs.get('gog_docs_append')?.description ?? '';
|
|
571
|
+
expect(desc).toMatch(/openclaw\/gogcli#607/);
|
|
572
|
+
expect(desc).toMatch(/openclaw\/gogcli#608/);
|
|
573
|
+
expect(desc).toMatch(/openclaw\/gogcli#609/);
|
|
574
|
+
});
|
|
553
575
|
});
|
|
554
576
|
|
|
555
577
|
describe('gog_docs_read', () => {
|