You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(or just re-run `npx -y google-tools-mcp setup`, which does the same install and re-points your MCP config). The server also helps you notice: on startup, after the MCP connection is already established, it makes a strictly time-boxed (2s), non-blocking, at-most-once-per-24-hours check against the npm registry for the latest published version, and logs a one-line warning if you're behind. This check runs after the connection handshake and is never awaited, so a slow or unreachable network can't delay or reintroduce the `npx` startup-timeout race this section is about; worst case, it just never gets to print the notice.
317
317
## Development / Contributing
318
318
319
-
Contributor-facing deep dives live in [`docs/`](docs/README.md), indexed there.
319
+
Contributor-facing deep dives live in [`docs/`](docs/README.md), indexed there. The rules a change has to follow (read-before-write guard, seeding after create/copy, working copies, the error boundary, how to read a test run, changelog and version) are in [`CONTRIBUTING.md`](CONTRIBUTING.md).
320
320
321
321
`dist/` is the hand-edited source for this repository. It contains plain JavaScript; there is no TypeScript, bundler, or build step.
Copy file name to clipboardExpand all lines: docs/README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,7 @@ The main README is the user-facing guide: install, configure, tool reference, tr
6
6
7
7
## Index
8
8
9
+
-[Contributing](../CONTRIBUTING.md) — the rules a change has to follow that no single file states: the read-before-write guard and which surfaces it covers, seeding read state after create/copy ("trustworthy or not at all"), working-copy lifecycle, the error boundary, reading the `Test Suites:` line, the inventory snapshot, and the one-entry-per-PR changelog and version bump.
9
10
-[How this repo works](architecture.md) — why `dist/` is the source and there is no build step, the entry point and its subcommands, transports, how the 12 tool categories load and what the `addTool` wrapper does for free, auth and config layout, tests, and how to add a tool.
10
11
-[Shared HTTP mode](http-mode.md) — running one long-lived server for many clients, the 3.0.0 stateless-HTTP breaking change (removed `/sse`, `/messages`, `/ping`, session routes, and `Mcp-Session-Id`), the `readHandle` contract for edits over HTTP, and exact Claude Code / Codex reconfiguration steps.
11
12
-[Remote OAuth tunnel](remote-oauth-tunnel.md) — completing the OAuth flow when the server runs on a machine with no browser.
|`npm run live-coverage`| 31 covered / 129 not covered / 2 blocked by design, exit 0 |
31
-
| Live vs real API (2026-09-02) |`verify-comment-collateral` PASS 15 calls (1 intended block refusal), 1/1 cleaned, sandbox 0 after; earlier the same day on `main`: `harness-selftest` PASS, `verify-created-resource-tracking` PASS, `agent-loop-2-fixes` PASS, `live-smoke`22/22 with 0 leftovers|
38
+
| Live vs real API on `main``665a605`(2026-09-02 20:13-20:20 UTC) |`harness-selftest` PASS (7 calls, 1 intended refusal, 3/3 trashed), `verify-created-resource-tracking` PASS (Slides deny holds, 2/2 trashed), `agent-loop-2-fixes` PASS (19 calls, 3 intended wrong-shape failures, 5/5 trashed), `verify-comment-collateral` PASS (15 calls, 1 intended block refusal, 1/1 trashed); sandbox 0 items after every run. `live-smoke`run `2026-09-02T20-15-21-994-96c4`: 22 passed / 0 failed / 0 skipped, cleanup 28/28 trashed with 0 failures, 0 drafts left, 0 stdout leaks|
32
39
|#50 protection rules | still `[]` as of 2026-09-02 |
33
40
34
-
## What PR #144carries
41
+
## What PR #144carried (merged as `665a605`)
35
42
36
43
1.**Fix: comment tools left the tracked Docs revision stale.**`addComment`, `replyToComment`,
37
44
`resolveComment`, `updateComment`, `deleteComment` each advance the Docs `revisionId` while
@@ -48,10 +55,10 @@ entry and bumps `package.json` to it (RELEASING.md, "Release a version").
48
55
the 5 the split deliberately re-wrapped; chain order matches `git log --first-parent`).
49
56
3.`package.json`/lock 3.4.3, RELEASING.md per-PR convention, this file.
50
57
51
-
Not fixed, filed as a follow-up (see "Open issues"): a**collaborator's** comment made in the
52
-
Docs UI moves the revision the same way, and nothing in-process can see it, so the next write
53
-
reports the same conflict and a re-read clears it. The message is correct; it is just one round
54
-
trip more than necessary.
58
+
Not fixed, filed as [#145](https://github.com/karthikcsq/google-tools-mcp/issues/145): a
59
+
**collaborator's** comment made in the Docs UI moves the revision the same way, and nothing
60
+
in-process can see it, so the next write reports the same conflict and a re-read clears it. The
61
+
message is correct; it is just one round trip more than necessary.
55
62
56
63
## The one blocker
57
64
@@ -89,13 +96,13 @@ doctor` on a machine with Codex or Claude Code installed (CI has neither client)
|[#141](https://github.com/karthikcsq/google-tools-mcp/issues/141)| Fixed on `main` since #86 (PR #110): `listComments` field mask includes `replies(...)` and `replyCount` is derived from it. Confirmed live 2026-09-02 by `issue-86-comment-reply-awareness` and `verify-comment-collateral`. Close with the evidence. |
93
-
|[#142](https://github.com/karthikcsq/google-tools-mcp/issues/142)| Suggestion 2 (warn at push time) shipped in #88 (PR #110): `replaceDocumentWithMarkdown` names every unresolved comment anchor it removes, `onCollateral='block'` refuses, `dryRun` previews. Confirmed live 2026-09-02. Suggestion 1 (listComments flags orphaned threads) not built: Drive keeps the thread record and its `quotedFileContent` after the anchor is gone, so the only way to detect an orphan is to search the current body for the quoted text, which false-positives on any repeated sentence. Close: the push-time warning is the signal. |
94
-
|[#136](https://github.com/karthikcsq/google-tools-mcp/issues/136)| Out of scope for this release, flagged. #119 already handles a backwards `modifiedTime` (keeps the newer baseline, warns, lets the WriteControl revision guard the write). New data point for whoever builds it: comment writes move `revisionId` with `modifiedTime` unchanged, so "revision moved, timestamp did not" is a coherent transition, not an incoherent one. |
95
-
|[#137](https://github.com/karthikcsq/google-tools-mcp/issues/137)| Out of scope for this release, flagged: a workspace-path refactor of two tools with a concurrency test, not a bug in shipped behaviour. |
96
-
|[#138](https://github.com/karthikcsq/google-tools-mcp/issues/138)| Relevant and cheap: CONTRIBUTING.md. Being written on its own branch/PR after #144 merges (entry 3.4.4). |
99
+
|[#141](https://github.com/karthikcsq/google-tools-mcp/issues/141)|**CLOSED 2026-09-02** ([comment](https://github.com/karthikcsq/google-tools-mcp/issues/141#issuecomment-5515730313)). Fixed since #86 (PR #110): `listComments` field mask includes `replies(...)`, `replyCount` derived from it; `resolveComment` verifies and throws. Confirmed live by `verify-comment-collateral`. |
100
+
|[#142](https://github.com/karthikcsq/google-tools-mcp/issues/142)|**CLOSED 2026-09-02** ([comment](https://github.com/karthikcsq/google-tools-mcp/issues/142#issuecomment-5515730779)). Suggestion 2 shipped in #88 (PR #110): collateral report, `onCollateral='block'`, `dryRun`. Suggestion 1 declined with reasoning (no anchor-validity field; quoted-text search false-positives on repeated sentences). |
101
+
|[#136](https://github.com/karthikcsq/google-tools-mcp/issues/136)|**Flagged out of scope, labelled `enhancement`, stays open** ([comment](https://github.com/karthikcsq/google-tools-mcp/issues/136#issuecomment-5515741565)): #119's `modifiedTimeWentBackwards` already covers the backwards timestamp; noted that "revision moved, modifiedTime did not" is a coherent comment-write transition. |
102
+
|[#137](https://github.com/karthikcsq/google-tools-mcp/issues/137)|**Flagged out of scope, labelled `enhancement`, stays open** ([comment](https://github.com/karthikcsq/google-tools-mcp/issues/137#issuecomment-5515742120)): gap re-checked on `main`, still as described; refactor + concurrency test, not a shipped defect. |
103
+
|[#138](https://github.com/karthikcsq/google-tools-mcp/issues/138)|**In progress**: CONTRIBUTING.md on `t3code/contributing-138` (subagent writing, every claim to be verified against the repo before the PR opens). Entry 3.4.4. |
104
+
|[#145](https://github.com/karthikcsq/google-tools-mcp/issues/145)|**Filed 2026-09-02** as the #144 follow-up: collaborator UI comment -> conflict until re-read; target-less handle writes stay pinned (`guardTargets` returns at `normalized.length === 0` without re-arming). Not a blocker. |
97
105
|[#130](https://github.com/karthikcsq/google-tools-mcp/issues/130)| Elliot ruled it deferred on 2026-09-01. Flagged, untouched. |
98
-
| follow-up (to file) | Collaborator UI comment -> next write reports a revision conflict until re-read. Also note the handle path: `docsHandles.guardTargets` re-arms on a revision-only change when targets are given, but a target-less write (`replaceDocumentWithMarkdown` over HTTP) still conflicts. |
Copy file name to clipboardExpand all lines: package.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
{
2
2
"name": "google-tools-mcp",
3
-
"version": "3.4.3",
3
+
"version": "3.4.4",
4
4
"description": "The easiest MCP server for Google Workspace — Drive, Docs, Sheets, Gmail, Calendar, Forms, Slides, and Tasks. 160 tools with one-click browser auth. Read Word docs, PDFs, and spreadsheets straight from Drive.",
0 commit comments