The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Google Chat MCP listing page.
English | Русский
A1 Google Chat MCP lets an AI app work in Google Chat in plain language. Find the right space or direct message, catch up on a conversation, reply in a thread, react with an emoji and manage who is in a space.
It uses the Google Chat API with your Google account and acts as the signed-in user: messages send under your name, and only your own messages and reactions can be edited or deleted. It makes the limits of the Chat API explicit instead of implying that every chat task is possible.
Start with a read-only question:
Show today’s messages in the team space and summarize what was decided.
Connect the server · Explore use cases · Open technical documentation
You: What was discussed in the release space today?
Assistant: Lists today’s messages with senders and threads. Nothing changes.
You: Reply in the deploy thread that the rollout is finished.
Assistant: Shows the target space, the thread and the drafted text, then asks for confirmation before sending.
You: Confirm.
Assistant: Sends the reply under your name in that thread. It does not touch any other message.
You need Node.js 20+, a Google account with access to Google Chat and OAuth credentials from a Google Cloud project with the Google Chat API enabled.
In the app: open Settings → MCP servers, select Add server, choose STDIO, enter the command npx -y mcp-google-chat@latest and environment variables GOOGLE_CHAT_CLIENT_ID, GOOGLE_CHAT_CLIENT_SECRET, GOOGLE_CHAT_REFRESH_TOKEN, then select Save and Restart.
From the command line:
The current official path is Settings → Extensions. For a custom desktop extension, open Advanced settings → Extension Developer → Install Extension…, select a .mcpb file and follow the prompts.
This repository currently publishes an npm stdio package and does not contain a .mcpb bundle. For Claude Desktop builds that still support local configuration, use the following JSON stdio configuration as a fallback:
In those builds, save it to ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows.
Add this to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:
Run MCP: Open User Configuration and add:
Check it with MCP: List Servers.
GOOGLE_CHAT_ACCESS_TOKEN.The Chat API cannot search message text — the only message filters are creation time and thread. find_direct_message finds an existing DM but never creates one, and file bytes are not downloaded or uploaded through this server. Space creation and the other uncovered API methods go through raw_request.
| Operation | What happens | Confirmation boundary |
|---|---|---|
| Read spaces, messages, members, reactions and attachment metadata | Reads conversations and metadata | No change |
| Send a message | Posts in a real space under your name | Changes a conversation |
| Update a message | Replaces the text of your own message | Changes a conversation |
| Add or remove a reaction | Changes your own reaction on a message | Changes a conversation |
| Delete a message | Permanently removes a message | Destructive |
| Manage membership | Adds, re-roles or removes a space member | Potentially destructive |
| Raw API request | Can call API methods without a dedicated tool | Potentially destructive |
The AI client controls confirmation prompts. The server marks reads, writes and destructive tools so the client can distinguish catching up from posting.
Google Chat requires OAuth 2.0; an API key is not enough.
Create or select a Google Cloud project and enable Google Chat API.
Configure the OAuth consent screen and create a Desktop app OAuth client.
Authorize the Google account you chat as. The OAuth 2.0 Playground can obtain the refresh token when Use your own OAuth credentials is enabled.
Request only the scopes your sessions need. For reading and sending, this is enough:
The full per-task table — editing and deleting your own messages, reactions, memberships, admin search — is in docs/TOOLS.md.
Testing-mode OAuth refresh tokens can expire after seven days. Publish the OAuth app, or use an Internal app in a Workspace domain, when you need long-lived access. Treat the client secret and refresh token as passwords.
For a quick session, a short-lived token in GOOGLE_CHAT_ACCESS_TOKEN also works — for example from gcloud auth print-access-token with Chat scopes granted. The same variable is how a service-account Chat-app token reaches the server when you need app-only features.
| Variable | Required | Description |
|---|---|---|
GOOGLE_CHAT_CLIENT_ID | Yes* | OAuth client ID. |
GOOGLE_CHAT_CLIENT_SECRET | Yes* | OAuth client secret. |
GOOGLE_CHAT_REFRESH_TOKEN | Yes* | OAuth refresh token. |
GOOGLE_CHAT_ACCESS_TOKEN | Yes* | Short-lived alternative to the OAuth trio; can be a service-account or Chat-app token. |
GOOGLE_CHAT_API_BASE | No | Google Chat API base URL override. |
GOOGLE_CHAT_TIMEOUT_MS | No | Per-request timeout; default 60000 ms. |
GOOGLE_CHAT_MAX_RETRIES | No | Temporary-error retries; default 3. |
* Provide either the OAuth trio or an access token.
Started without credentials, the server still completes the MCP handshake; the first tool call then names the exact variables to set and asks for a restart instead of failing silently.
ASKADS_TELEMETRY=0 to opt out.429, the server uses backoff; reads also retry after network and 5xx errors, while writes are never replayed after an uncertain failure — a replayed send would be a duplicate message in a real room. send_message accepts a custom message id that makes a send addressable and deduplicable.list_messages can poll a space incrementally by creation time if your AI app supports scheduled tasks; space event subscriptions go through raw_request.Found a bug or need a scenario? Create an issue or write in Telegram.
You made it to the end!