OAuth-based Google Workspace MCP server for Hermes agents. Replaces workspace-mcp with per-agent permission enforcement.
- Create
~/.nimbleco-google/config.json:
{
"clientId": "YOUR_GOOGLE_CLIENT_ID",
"clientSecret": "YOUR_GOOGLE_CLIENT_SECRET"
}- Authenticate each identity:
npx google-multiplayer-mcp auth personal
npx google-multiplayer-mcp auth frontdoor-
Create a permission config for each agent (see
examples/). -
Update Hermes agent
config.yaml:
mcp_servers:
google:
command: npx
args:
- github:NimbleCoAI/google-multiplayer-mcp
- --config
- /opt/data/google-permissions.yaml
env:
GOOGLE_TOKEN_DIR: /opt/google/tokens- Mount tokens in
docker-compose.yml:
volumes:
- ~/.nimbleco-google/tokens:/opt/google/tokens:ro| Level | Operations |
|---|---|
none |
Service disabled |
read |
list, get, search, download |
write |
read + create, update, upload |
admin |
write + delete, share, trash (must be explicit) |
google-multiplayer-mcp auth <identity> # OAuth flow (opens browser)
google-multiplayer-mcp auth status # Show all identitiesWhen an agent runs on a remote/headless host, the user's phone can't reach the local OAuth callback server — so the browser-callback flow can't complete. For that case the MCP exposes two tools that drive a paste-code flow:
| Tool | Purpose |
|---|---|
google_auth_url |
Returns the consent URL (no callback server started). |
google_auth_exchange |
Takes the pasted code=… value, exchanges it for tokens, saves them. |
Flow: the agent sends google_auth_url's URL to the user → the user consents on
their phone and copies the code=… from the redirected URL (which may show an
error — only the code matters) → pastes it back → the agent calls
google_auth_exchange → the MCP is reloaded (HSM quick-restart) so the Google
tools pick up the new token.
The companion agent skill skills/reauth-google/SKILL.md packages this as a
"reauth google" procedure for Signal/DM, including proactive use on
invalid_grant. The MCP starts in auth-tools-only mode when tokens are
missing/invalid (it does not exit), so these auth tools are always reachable.