Raised from the pre-release validation pass. Nothing has ever come back from Google Drive. Everything OpenBot owns on that path is verified; the hop from OpenBot to Google has never run.
This is not a defect report. It is a gap in evidence, filed so the release notes do not claim more than has been tested.
What is verified
A Bot calls the tool, and the whole chain up to Google works and is on the trail:
{
"bot": "risk-analyst", "tool": "search_files",
"server": "google-drive", "effect": "read",
"actor": "AqarPaoMdN0KXTpLJaObzBNey7KDNaJE",
"reachedAs": "AqarPaoMdN0KXTpLJaObzBNey7KDNaJE",
"decision": { "mode": "enforce", "rule": "true", "allowed": true, "carriedOut": true },
"failure": "You have not connected your Google Drive account. Connect it in Settings and ask again."
}
- the Bot authenticates its callback
- the grant is checked
- the boundary is evaluated
mcp.call_failed is written
- a per-person credential is resolved, and
reachedAs equals the asking user, which is the whole point of the design
effect: read is the read/write classification
- the refusal names a cause somebody can act on
The surfaces are right too: /admin/plugins/google-drive enables, shows the exact redirect URI built from OPENBOT_PUBLIC_URL, lists the four read tools, and /settings/connected-accounts/google-drive refuses with "Google Drive has no OAuth client registered yet. An administrator has to add one first."
What is not verified
- a real consent flow completing
- a real
search_files / list_recent_files call returning real files
- returned filenames checked against the audit row, so the answer is known to have come from Google rather than from the model
Why it stopped there
Registering the OAuth client needs a Google Cloud account, and per docs/plugins/google-drive.md it is more than pasting a secret:
- enrolment in the Developer Preview Program, which the doc calls "the step with the least evidence that it is missing" — without it everything else can be correct and still return
The caller does not have permission
- both
drive.googleapis.com and drivemcp.googleapis.com enabled; the connector talks to the second
- consent screen carrying
drive.readonly, with each person listed as a test user while the app is in Testing
- a Web application client whose redirect URI matches character for character
The GOOGLE_OAUTH_* values in .env are a sign-in client and cannot serve: different callback path, and none of the above. Sign-in itself is separately verified and works.
The browser route is not a substitute. Google refuses sign-in from headless browsers, and a Bot holding somebody's Google session in its own profile is exactly the second copy of their access that this connector exists to avoid.
To close this
- Register the client per the doc.
/admin/plugins/google-drive → paste the client, Refresh tools.
/settings/connected-accounts/google-drive → Connect, complete consent.
- Ask a Bot to search Drive.
- Check the returned filenames against the
mcp.call_succeeded row, and confirm a second person asking the same question gets their own answer.
Step 5 is the one that matters. A list of files in the transcript is not evidence on its own.
Until then
Release notes should not say Drive works. What can be said is that the connector is wired, governed, per-person and audited up to the vendor call, and that the vendor call is untested.
Raised from the pre-release validation pass. Nothing has ever come back from Google Drive. Everything OpenBot owns on that path is verified; the hop from OpenBot to Google has never run.
This is not a defect report. It is a gap in evidence, filed so the release notes do not claim more than has been tested.
What is verified
A Bot calls the tool, and the whole chain up to Google works and is on the trail:
{ "bot": "risk-analyst", "tool": "search_files", "server": "google-drive", "effect": "read", "actor": "AqarPaoMdN0KXTpLJaObzBNey7KDNaJE", "reachedAs": "AqarPaoMdN0KXTpLJaObzBNey7KDNaJE", "decision": { "mode": "enforce", "rule": "true", "allowed": true, "carriedOut": true }, "failure": "You have not connected your Google Drive account. Connect it in Settings and ask again." }mcp.call_failedis writtenreachedAsequals the asking user, which is the whole point of the designeffect: readis the read/write classificationThe surfaces are right too:
/admin/plugins/google-driveenables, shows the exact redirect URI built fromOPENBOT_PUBLIC_URL, lists the four read tools, and/settings/connected-accounts/google-driverefuses with "Google Drive has no OAuth client registered yet. An administrator has to add one first."What is not verified
search_files/list_recent_filescall returning real filesWhy it stopped there
Registering the OAuth client needs a Google Cloud account, and per docs/plugins/google-drive.md it is more than pasting a secret:
The caller does not have permissiondrive.googleapis.comanddrivemcp.googleapis.comenabled; the connector talks to the seconddrive.readonly, with each person listed as a test user while the app is in TestingThe
GOOGLE_OAUTH_*values in.envare a sign-in client and cannot serve: different callback path, and none of the above. Sign-in itself is separately verified and works.The browser route is not a substitute. Google refuses sign-in from headless browsers, and a Bot holding somebody's Google session in its own profile is exactly the second copy of their access that this connector exists to avoid.
To close this
/admin/plugins/google-drive→ paste the client, Refresh tools./settings/connected-accounts/google-drive→ Connect, complete consent.mcp.call_succeededrow, and confirm a second person asking the same question gets their own answer.Step 5 is the one that matters. A list of files in the transcript is not evidence on its own.
Until then
Release notes should not say Drive works. What can be said is that the connector is wired, governed, per-person and audited up to the vendor call, and that the vendor call is untested.