A1 Google Chat MCP
A1 Google Chat MCP lets you browse and interact with Google Chat as the signed-in user, including spaces, messages, reactions, memberships, and raw API calls.
Discover spaces and direct messages: list spaces, get space details, search all org spaces (admin only), and find an existing DM.
Read conversations: list messages with time/thread filters, get a message, and fetch attachment metadata.
Send and manage messages: send text with thread/reply controls, edit your own messages, delete your own messages (or others if space manager).
Manage emoji reactions: add, list, or remove your own reactions on a message.
Manage space membership: list members, add/update role/remove members (requires manager role).
Make raw Google Chat API calls for uncovered endpoints like space creation or custom emoji.
Allows an AI assistant to work with Google Chat as the signed-in user: discover spaces and direct messages, read and summarize conversations, send and reply in threads, manage emoji reactions, read attachment metadata, and manage space membership.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@A1 Google Chat MCPWhat was discussed in the release space today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Chat MCP
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.
20 tools. Connect from the chat, discover spaces and direct messages, read and send messages with thread control, manage emoji reactions, read attachment metadata and manage membership.
Connects from the conversation. Say "connect Google Chat": the server walks you through the OAuth client, catches Google's redirect on
127.0.0.1with PKCE and keeps the tokens itself — no config files, no restart.You act as yourself. Sends appear under your name; edits and deletes stop at your own messages and reactions.
A send is never replayed. After an ambiguous failure the server does not retry a write — a replayed send would be a duplicate message in a real room.
Minimal Google scopes. The server sends whatever token you minted; grant scopes per task — read-only ones are enough for browsing spaces and messages.
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
See it work in a minute
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.
Related MCP server: google-chat-mcp
Contents
Quick start
You need Node.js 20+ and a Google account with access to Google Chat. Credentials are not required at install time — the server connects from the conversation.
Add the server to your AI app.
Say "connect Google Chat": the assistant walks you through creating the OAuth client and approving access without editing config files or restarting.
Ask the read-only question above.
In the app: open Settings → MCP servers, select Add server, choose STDIO, enter the command npx -y mcp-google-chat@latest, then select Save. No environment variables are needed — connect from the chat afterwards.
From the command line:
codex mcp add google-chat \
-- npx -y mcp-google-chat@latestcodex mcp listclaude mcp add \
--transport stdio --scope user google-chat \
-- npx -y mcp-google-chat@latestclaude mcp listThe 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:
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "mcp-google-chat@latest"]
}
}
}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.
Claude Desktop MCP documentation
Add this to ~/.cursor/mcp.json on macOS/Linux or %USERPROFILE%\.cursor\mcp.json on Windows:
{
"mcpServers": {
"google-chat": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-chat@latest"]
}
}
}Run MCP: Open User Configuration and add:
{
"servers": {
"google-chat": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-chat@latest"]
}
}
}Check it with MCP: List Servers.
What you can ask it to do
Catch up on a conversation
Show my spaces and find the direct message with alex@example.com.
What was posted in the release space today? Summarize the decisions.
Show the whole thread this message belongs to.
Post and maintain messages
Send a status update to the team space.
Reply in the deploy thread that the rollout is finished.
Fix the typo in my last message, or delete it entirely.
React and check attachments
Add a 👍 to the announcement and show who else reacted with what.
Remove my reaction from that message.
What files are attached to this message? Show their names and types.
Manage who is in a space
Who is in this space, and who are its managers?
Add alex@example.com to the space and make them a manager.
Remove a former teammate from the space.
How the server acts in Chat
With the OAuth refresh credentials the server acts as the signed-in user: messages send under your name, and edits and deletes reach only your own messages and reactions. Membership changes additionally require you to be a space manager.
Spaces accept a bare id, but messages, threads, members, reactions and attachments are addressed by the full resource names the API returns — list first, then act on an exact name.
A reply targets a thread by its name or by a thread key. By default a send falls back to starting a new thread when the target cannot be threaded; you can ask it to fail instead.
Acting as a Chat app — cards, app direct messages, the dedicated attachment endpoint, forced deletes — is a separate Google Cloud configuration; the only bridge here is a service-account access token supplied as
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.
What can change
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.
Getting access
Google Chat requires OAuth 2.0; an API key is not enough. There are two ways in, and the first one needs no configuration files.
Connect from the chat (recommended)
Say "connect Google Chat" and the assistant runs the flow with you:
setup_instructionsprints the checklist: create or select a Google Cloud project, enable the Google Chat API, configure the consent screen and create a Desktop app OAuth client.Download that client's JSON ("Download JSON") and give the assistant its path —
set_clientstores it owner-only. The secret never goes through the conversation.start_loginreturns a Google consent link. Open it on this machine and approve; the code comes back to a one-shot listener on127.0.0.1(PKCE), never through the chat.finish_loginexchanges the code, saves the tokens to~/.config/mcp-google-chat/credentials.json(mode 0600) and verifies them with a real Chat API call — so a Chat API that is still switched off is caught right there, not on your first real question.
The tokens are re-read on every call, so the connection works immediately — no restart of the AI app. auth_status shows what is connected, logout revokes and deletes it. The login asks for chat.spaces.readonly, chat.messages, chat.messages.reactions and chat.memberships.readonly; the admin scope behind search_spaces is not requested — use the environment path if you need it.
Environment variables (CI, unattended installs)
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:
https://www.googleapis.com/auth/chat.spaces.readonly https://www.googleapis.com/auth/chat.messages.readonly https://www.googleapis.com/auth/chat.messages.createThe 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.
Configuration
Every variable is optional — with none of them the server connects from the chat.
Variable | Required | Description |
| No* | OAuth client ID. |
| No* | OAuth client secret. |
| No* | OAuth refresh token. |
| No* | Short-lived alternative to the OAuth trio; can be a service-account or Chat-app token. |
| No | Fixed loopback port for the in-chat login; useful over SSH port forwarding. |
| No | Google Chat API base URL override. |
| No | Per-request timeout; default |
| No | Temporary-error retries; default |
* For the environment path, provide either the OAuth trio or an access token. When set, they win over a stored in-chat login and the server never refreshes or deletes them.
Started without any credentials, the server still completes the MCP handshake; the instructions and the first tool call then name both fixes — the in-chat login (no restart) and the environment variables (restart).
Data, limits and background work
Requests go to Google Chat. The local server refreshes Google OAuth tokens and calls the Chat API; the token is never sent to any other host. Its anonymous telemetry contains an installation ID, package version, AI client and platform versions, and tool names — never OAuth tokens, message content, tool arguments or prompts. Set
ASKADS_TELEMETRY=0to opt out.Google applies per-project and per-user quotas. On
429, the server uses backoff; reads also retry after network and5xxerrors, while writes are never replayed after an uncertain failure — a replayed send would be a duplicate message in a real room.send_messageaccepts a custom message id that makes a send addressable and deduplicable.There is no background polling. The server runs only when called.
list_messagescan poll a space incrementally by creation time if your AI app supports scheduled tasks; space event subscriptions go throughraw_request.
Technical documentation
MCP capability catalog — task-oriented pages for every tool.
Support
Found a bug or need a scenario? Create an issue or write in Telegram.
Available Tools
20 toolsauth_statusGoogle connection statusARead-onlyIdempotent
Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral assurances beyond the readOnly/idempotent/non-destructive annotations: 'Makes no network calls and never returns the token itself.' This is important safety context for an auth-status tool and goes well beyond what annotations already state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each clause earns its place: the first sentence lists the diagnostic fields, the second adds safety behavior, and the third gives a usage directive. It is front-loaded with the core purpose and contains no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only status tool with no output schema, the description is complete: it lists every relevant status dimension and the specific trigger for calling it. An agent has enough to decide when and why to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description compensates by enumerating exactly what information the status output will contain, which is more useful than a bare schema with no properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific diagnostic purpose: reporting Google connection status, token presence/source, expiry, account email, OAuth scopes, and credential locations. This clearly distinguishes it from sibling auth-flow tools like start_login, finish_login, and logout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit trigger: 'Call it first when other tools report the server is not connected.' It does not explicitly list when not to use it or name an alternative, but the diagnostic role relative to the login/logout siblings is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_messageDelete a messageADestructive
Permanently deletes a message. With user authentication the user can delete their OWN messages; space managers can also delete others' messages in spaces they manage — otherwise PERMISSION_DENIED (a Chat permission rule, not a missing scope). If the message started a thread that has replies, the delete fails with FAILED_PRECONDITION; force=true deletes the replies too but works only with app (service-account) authentication. Deletion cannot be undone — read the message with get_message first if its content matters. Returns an empty object on success.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Also delete threaded replies (app authentication only; ignored for user auth). | |
| message | Yes | The full message name from list_messages/send_message, e.g. "spaces/AAA/messages/BBB.CCC". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses permanence, irreversibility, thread deletion behavior, the fact that force only works with app authentication, and the empty-object success response. It also explains that PERMISSION_DENIED is a permission rule rather than a missing scope, which is valuable diagnostic context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: core action first, then permissions, then failure modes, then warnings, then return value. Every sentence earns its place, and critical caveats like irreversibility and force-auth restriction are explicitly surfaced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description is remarkably complete. It covers authorization contexts, error conditions, the force edge case, irreversibility, a pre-deletion safety step, and the success return value. An agent has everything needed to decide whether and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The main description largely restates the parameter semantics already present in the schema, such as the message name source and the force authentication constraint, without adding meaningfully new parameter-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource—'Permanently deletes a message'—and immediately clarifies scope by distinguishing own messages from space-manager deletions. This makes the tool clearly distinguishable from siblings like get_message, send_message, and update_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operating conditions: user vs. manager permissions, PERMISSION_DENIED vs. FAILED_PRECONDITION, and when force=true is valid. It also instructs the agent to read with get_message before deleting if content matters. It does not explicitly mention update_message as the non-destructive alternative, which keeps it just short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_direct_messageFind a direct-message spaceARead-onlyIdempotent
Finds the EXISTING direct-message space between the authenticated user and another user, returning the space (name spaces/) to send_message into. Returns HTTP 404 when no DM with that user exists yet — this tool cannot create one (creating DMs needs spaces.setup via raw_request). The user can be a Google user id (users/123...) or an email address.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user — "users/<id>", "users/<email>", or a bare Google user id / email address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal read-only, idempotent, and non-destructive behavior, and the description adds valuable context beyond those: it returns HTTP 404 when no DM exists, it cannot create DMs, and it accepts multiple user identifier formats. This gives an agent accurate expectations about failure modes and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core behavior is front-loaded first, followed by the critical 404 limitation, and then the accepted input formats. Every sentence adds necessary information for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description covers the return value, the error case, the creation limitation, and the accepted user identifier syntax. No output schema exists, so the inline explanation of the returned space name is sufficient for an agent to chain the result into send_message.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents the single 'user' parameter. The description repeats the accepted identity formats and adds that the user is the counterpart of the authenticated user, which is useful but not essential beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it finds the EXISTING direct-message space between the authenticated user and another user, and clarifies it returns the space name for use with send_message. This clearly distinguishes it from siblings like get_space or search_spaces because it targets DM lookup by user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains both when to use the tool (finding an existing DM space to send a message into) and when not to use it (when no DM exists, since it cannot create one). It names the alternative path — spaces.setup via raw_request — making the decision boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_loginFinish the Google loginAIdempotent
Second step: confirms the browser consent finished, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond the annotations: it saves tokens to an owner-only file, verifies via a read-only identity call, handles partial permission grants by still saving the login and reporting missingScopes, replaces previous logins with best-effort refresh token revocation, and returns previousAccountEmail. This goes well beyond the basic annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: four sentences cover purpose, postcondition, partial-permission handling, and account-replacement behavior. Every sentence adds meaningful information, and the key purpose is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is complete: it explains what happens, what is returned, what happens on partial permission, and what happens when switching accounts. No important invocation or result information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema already covers everything. The description adds value by explaining what the response contains and the side effects of invoking the tool, which is useful context even though no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finishes the second step of Google login, saves tokens to an owner-only file, verifies the login via a read-only identity call, and returns account email and granted scopes. This distinguishes it from the sibling start_login by explicitly labeling it as the second step and describing its specific outcome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is the second step after browser consent, and after success every tool works immediately without restart. It also clarifies behavior under partial permission grants and account replacement, but it does not explicitly name alternatives or state when not to use it, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentGet attachment metadataARead-onlyIdempotent
Fetches metadata of one message attachment by its resource name (from a message's attachment[].name): contentName (filename), contentType (MIME), source (DRIVE_FILE or UPLOADED_CONTENT), downloadUri/thumbnailUri (short-lived, for a signed-in browser user — not for server-side download) and attachmentDataRef. NOTE the auth split: this dedicated endpoint accepts only APP (service-account) authentication — with user credentials it returns an error, but the SAME metadata is already embedded in get_message's attachment[] field, so user-auth flows should read it there. Downloading raw bytes goes through the media endpoint (v1/media/?alt=media) and uploading new attachments through the upload endpoint — both outside this server's tools.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment | Yes | The attachment resource name from a message's attachment[].name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description goes far beyond that by disclosing the auth split (user credentials return an error), the short-lived nature of downloadUri/thumbnailUri and their browser-only suitability, and the fact that the metadata is duplicated in get_message. This is rich behavioral context with no contradiction to the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every sentence earns its place: return fields, auth restriction, alternative location for the same data, and endpoint boundaries for download/upload. The core action is front-loaded, and the supporting details are logically ordered with explicit notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only metadata fetch with no output schema, the description covers everything an agent needs: input source, returned fields, authentication constraints, the sibling alternative, and related endpoint routing. Nothing is missing for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter, 'attachment', is already described as 'The attachment resource name from a message's attachment[].name.' The tool description repeats this origin but adds no new meaning beyond the schema. Baseline 3 is appropriate because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetches metadata of one message attachment by its resource name.' It lists the exact fields returned and explicitly distinguishes this from get_message, which already embeds the same metadata. An agent can immediately tell what this tool does and how it differs from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use and when-not-to-use: it accepts only APP (service-account) authentication, while user-auth flows should read the same metadata from get_message's attachment[] field. It also routes raw byte downloads to the media endpoint and uploads to the upload endpoint, both outside this server's tools. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageGet a messageARead-onlyIdempotent
Fetches one message by its full resource name: text, formattedText, sender, createTime/lastUpdateTime, thread.name (reply target for send_message), attachment[] metadata (name, contentName, contentType, downloadUri, attachmentDataRef) and emojiReactionSummaries. Also resolves custom-id names (spaces//messages/client-) for messages sent with message_id. Deleted messages return deletionMetadata instead of content.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The full message name from list_messages/send_message, e.g. "spaces/AAA/messages/BBB.CCC". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses detailed behavioral traits: it enumerates the returned message fields, explains custom-id name resolution, and explicitly states that deleted messages return deletionMetadata instead of content. This gives an agent accurate expectations about response shape and edge cases without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then adds compact, high-value details. Every sentence earns its place: the field list summarizes the return shape, the custom-id note clarifies an important input variant, and the deletion behavior warns about a key edge case. There is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter schema, rich annotations, and absence of an output schema, the description is complete. It covers what the tool returns, the accepted input forms, and the deletion edge case. Nothing essential is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the message parameter with a pattern and example, providing 100% coverage. The description goes further by explaining that custom-id names are also resolved, which is a meaningful semantic addition that tells the agent this parameter accepts more than just canonical names returned by list_messages/send_message.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetches one message by its full resource name,' which clearly distinguishes it from list_messages and other siblings. It also lists the message fields returned and special behaviors like custom-id resolution and deletion metadata, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the correct usage context: use this tool when you have a full message resource name, typically from list_messages or send_message, and it notes that custom-id names are accepted for messages sent with message_id. It does not explicitly contrast with alternatives like get_attachment or list_messages, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spaceGet a spaceARead-onlyIdempotent
Returns one space's details: displayName, spaceType, spaceDetails (description/guidelines), spaceThreadingState (THREADED_MESSAGES = replies go into threads, otherwise the space is flat), membershipCount, createTime and settings. Use it to check the threading model before send_message with a thread, or to confirm a space id before writing into it.
| Name | Required | Description | Default |
|---|---|---|---|
| space | Yes | The space — "spaces/<id>" or the bare id from list_spaces / a Chat URL (chat.google.com/room/<id>). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive. Description adds behavioral context beyond that by explaining the meaning of spaceThreadingState (THREADED_MESSAGES means threads; otherwise flat) and highlighting that the returned data can validate a space id before a write. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first packs the return contract, the second gives two precise use cases. No wasted words; the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, idempotent tool, the description covers what is returned, the threading semantics, and when to call it. With no output schema, the explicit field list plus use cases is sufficient for an agent to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter 'space' is fully documented in the schema (id formats and sources). The description adds context that the parameter is used to confirm an id, but doesn't provide new parameter-level detail beyond the schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource — 'Returns one space's details' — and enumerates the exact fields returned (displayName, spaceType, spaceDetails, spaceThreadingState, membershipCount, createTime, settings). This clearly distinguishes it from sibling list_spaces and search_spaces by scope (one space).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: check the threading model before send_message with a thread, or confirm a space id before writing. It doesn't name alternatives or state when not to use it, but the stated conditions are concrete enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersList space membersARead-onlyIdempotent
Lists memberships in a space: each membership's name (spaces//members/ — the handle manage_members needs), member (users/, displayName, type HUMAN|BOT), role (ROLE_MEMBER or ROLE_MANAGER) and state (JOINED, INVITED, NOT_A_MEMBER). role filters to managers or members; show_invited includes invited-but-not-joined users, show_groups includes Google Groups. Requires the chat.memberships.readonly (or chat.memberships) scope and membership in the space.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Only memberships with this role. | |
| space | Yes | The space — "spaces/<id>" or the bare id from list_spaces / a Chat URL (chat.google.com/room/<id>). | |
| page_size | No | Max memberships per page (1..1000; default 100). | |
| page_token | No | nextPageToken from the previous page. | |
| show_groups | No | Include Google Group memberships. | |
| show_invited | No | Include invited memberships not yet joined. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, and destructiveHint, so the description needn't repeat those. It adds beyond annotations: required OAuth scope (chat.memberships.readonly or chat.memberships), the space-membership prerequisite, and behavioral nuance such as INVITED/NOT_A_MEMBER states and inclusion of Google Groups.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three purpose-dense sentences: output shape, filter semantics, and required scope. Every sentence earns its place and there is no filler, though the first sentence is packed and could be slightly more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of explaining return values, and it does so thoroughly (name, member, role, state with enumerated values). It also covers prerequisites and the main filters. It omits pagination details and error conditions, but page_size/page_token are covered in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already documents all 6 parameters, so the baseline is 3. The description adds value by explaining that role filters to managers/members, show_invited surfaces invited-but-not-joined users, show_groups includes Google Groups, and that the 'name' field is the handle for manage_members. page_size and page_token are already well-described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('memberships in a space'), then enumerates exactly which fields are returned (name, member, role, state). This distinguishes it from siblings like list_spaces and get_space, and it even notes how the returned name maps to the manage_members tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes clear context: use this to see memberships, roles, states, and to obtain the membership handle manage_members needs. It also states prerequisites (scope and space membership). It does not explicitly name an alternative or say when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesList messagesARead-onlyIdempotent
Lists messages in a space (including messages from blocked members and spaces): name, text, sender, createTime, thread.name, attachment metadata and emoji reaction summaries. Filters are the API's only two: created_after (createTime) and thread_name (one thread's messages) — there is no text search, match client-side. order defaults to ascending by createTime; show_deleted includes tombstones of deleted messages. Poll incrementally with created_after + page_token instead of re-listing history. Requires the chat.messages.readonly (or chat.messages) scope and works only with user authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | Sort by createTime (default asc). | |
| space | Yes | The space — "spaces/<id>" or the bare id from list_spaces / a Chat URL (chat.google.com/room/<id>). | |
| page_size | No | Max messages per page (1..1000; default 25). | |
| page_token | No | nextPageToken from the previous page. | |
| thread_name | No | Only messages in this thread (thread.name from a message). | |
| show_deleted | No | Include deleted messages (deletion metadata only). | |
| created_after | No | Only messages created after this RFC3339 UTC timestamp, e.g. 2026-08-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses meaningful behavior: messages from blocked members/spaces are included, show_deleted includes tombstones, and the tool works only with user authentication. This adds context about what the tool returns and its access constraints, well beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, with no filler. Core purpose is front-loaded, followed by filters, ordering, deletion behavior, polling guidance, and authentication requirements, with each sentence contributing distinct and useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters and no output schema, the description compensates well by listing the returned fields, filter semantics, pagination strategy, deletion behavior, and auth constraints. An agent has enough context to decide when to call this tool and to construct a correct request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds value by explaining output fields, the default ordering, the meaning of created_after for incremental polling, and that text filtering must happen client-side, though a minor ambiguity remains around calling only created_after and thread_name 'filters' when show_deleted also filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Lists messages in a space', and further clarifies scope by including messages from blocked members and spaces and enumerating returned fields. This clearly distinguishes the tool from siblings like get_message (single message), list_spaces, and send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational guidance: there is no text search, clients must match client-side, and users should poll incrementally with created_after + page_token. It also states authentication requirements and scope prerequisites, though it does not explicitly name alternative tools for text search or single-message retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList spacesARead-onlyIdempotent
Lists the spaces the authenticated user is a member of: name (spaces/), displayName (empty for direct messages), spaceType (SPACE = named room, GROUP_CHAT, DIRECT_MESSAGE), spaceThreadingState and timestamps. This is the discovery entry point — space names from here feed every other tool. space_type narrows the listing server-side; there is no text search here — match displayName client-side, or use search_spaces (Workspace admin only). Paginate with page_token from nextPageToken; results are unordered.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Max spaces per page (1..1000; default 100). | |
| page_token | No | nextPageToken from the previous page. | |
| space_type | No | Only spaces of this type: space (named room), group_chat, or direct_message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond annotations: results are limited to spaces the authenticated user belongs to, results are unordered, pagination uses nextPageToken, and space_type filters server-side. This is strong complementary behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense but efficient sentences. The core purpose and returned fields are front-loaded, followed by usage guidance and pagination details. Every sentence earns its place with no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with rich annotations and a fully documented schema, the description covers required output fields, pagination, ordering, server-side filtering, and the tool's role in the broader workflow. Nothing essential for an agent to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all three parameters at 100%, so the baseline is 3. The description adds meaningful extra semantics by explaining that space_type narrows results server-side and that page_token comes from nextPageToken, which helps an agent use the parameters correctly beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists'), resource ('spaces the authenticated user is a member of'), and the key returned fields. Clearly differentiates itself from search_spaces by noting this is the discovery entry point and that no text search is available here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as the discovery entry point whose results feed other tools. Provides concrete routing guidance: use space_type for server-side narrowing, match displayName client-side, and use search_spaces for admin-only text search. Also explains pagination behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutDisconnect from GoogleADestructive
Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by naming the revocation endpoint, specifying that the local credentials file is deleted, clarifying that env-var tokens are unaffected, and mentioning the envTokenStillSet response field. This is exactly the kind of behavioral detail an agent needs for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the most critical action front-loaded. Every sentence adds important information, and there is no fluff or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, side effects, exception case for env-var tokens, and a relevant response field. For a zero-parameter tool with no output schema, this is fully sufficient for an agent to use it correctly and predict its impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter meaning to add. The description correctly focuses on the action and side effects rather than inventing parameter details. Baseline 4 is appropriate because the schema is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: it revokes the stored Google token and deletes the local credentials file. The title 'Disconnect from Google' aligns with the behavior, and the description clearly distinguishes this from other auth-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this to revoke and delete stored credentials. It also explicitly tells the user that env-var tokens are not touched and must be removed manually, which is a valuable usage caveat. It does not name alternatives, but no true alternative exists for this action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_membersManage space membershipADestructive
Membership management in a space — WORKS ONLY WITH SUFFICIENT ACCESS: the authenticated user needs the chat.memberships scope, and add/update_role/remove additionally require them to be a space MANAGER (otherwise PERMISSION_DENIED — a Chat role rule, not a network problem; check their role via list_members). action=get reads one membership by member_name. action=add invites/adds a human user (space + user, optional role=manager); in DMs and group chats members cannot be added. action=update_role switches a membership between member and manager (member_name + role). action=remove deletes the membership — the user is kicked from the space immediately and this is not undoable from here (re-add creates a fresh invitation). Google Groups and Chat-app memberships are managed via raw_request.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | add (optional, default member) / update_role (required): the target role. | |
| user | No | add: the user to add (users/<id>, users/<email>, or bare id/email). | |
| space | No | add: the space to add the user to. | |
| action | Yes | What to do with the space's membership. | |
| member_name | No | get/update_role/remove: the membership from list_members. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing that add/update_role/remove require MANAGER role, that PERMISSION_DENIED is a Chat role rule rather than a network issue, and that remove immediately kicks the user and is not undoable. It also explains that re-adding creates a fresh invitation. This meaningfully supplements the destructiveHint and openWorldHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized by action, with the critical permission warning front-loaded. Every sentence conveys necessary operational detail, and no filler or redundant phrasing is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema, the description fully covers each action's behavior, parameter requirements, permission prerequisites, failure semantics, and edge cases. An agent has enough context to invoke the correct action and interpret common failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage for all parameters, so the baseline is 3. The description adds value by mapping each action to its required parameters (e.g., add uses space+user, update_role uses member_name+role) and clarifying optional/default behavior for role. This exceeds the schema's documentation without fully replacing it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool manages space membership and enumerates each action (get, add, update_role, remove) with specific behavior. It distinguishes itself from sibling tools like list_members (for checking roles) and raw_request (for Google Groups/Chat-app memberships).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when each action is appropriate, when it is not (e.g., cannot add members in DMs/group chats), and which sibling tools to use instead (list_members for role checks, raw_request for special membership types). It also states the required scope and manager permission, making tool selection unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_reactionsManage message reactionsADestructive
Emoji reactions on a message, as the authenticated user. action=add puts a unicode emoji (the emoji character itself, e.g. "👍" or "🎉" — not :shortcode:) on the message; adding the same emoji twice fails with ALREADY_EXISTS. action=list returns who reacted with what — each reaction's name (spaces/.../reactions/), emoji and user; filter with emoji to one emoji's reactions. action=remove deletes ONE reaction by its full reaction_name from list — only the authenticated user's own reactions can be removed (someone else's returns PERMISSION_DENIED). Custom (workspace) emoji need raw_request with emoji.customEmoji. Scopes: chat.messages.reactions (add/remove; .create suffices for add-only) or chat.messages.reactions.readonly (list).
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | No | add: the unicode emoji to add (e.g. "👍"). list: only this emoji's reactions. | |
| action | Yes | What to do with the message's reactions. | |
| message | No | add/list: the message to react to / read reactions from. | |
| page_size | No | list: max reactions per page (1..200). | |
| page_token | No | list: nextPageToken from the previous page. | |
| reaction_name | No | remove: the reaction to delete, from action=list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses specific error outcomes (ALREADY_EXISTS, PERMISSION_DENIED), the requirement to use the authenticated user's own reactions for removal, scope prerequisites, and the raw_request path for custom emoji.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational or behavioral information. It is front-loaded with the core purpose and then efficiently covers actions, errors, custom emoji, and scopes without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-action tool with no output schema, the description is remarkably complete: it explains return contents for list, error conditions, permission boundaries, page_size/page_token usage, and scope requirements. Nothing critical is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds important semantic detail: emoji must be the literal unicode character rather than a shortcode, reaction_name comes from list output, page_token enables pagination, and action determines which parameters apply. This meaningfully exceeds the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Emoji reactions on a message') and enumerates three distinct actions (add/list/remove), so an agent immediately understands what the tool does. It stands apart from sibling message and space tools because it is the only one operating on reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear per-action usage context, including filtering for list, deleting only via reaction_name, and the authenticated-user restriction. It also explicitly routes custom workspace emoji to raw_request, which is a useful alternative; however, it does not provide broad when-to-use vs. sibling-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_requestRaw Google Chat API callADestructive
Escape hatch to call any Google Chat API v1 path directly, for requests the typed tools don't cover — e.g. creating a space (path "v1/spaces", method POST, body {"spaceType":"SPACE","displayName":"..."}), setting up a DM ("v1/spaces:setup"), custom-emoji reactions, Google Group memberships, space events ("v1/spaces//spaceEvents"), or updating a space ("v1/spaces/" PATCH with a query updateMask). The path may carry a query string (e.g. "v1/spaces/AAA/members?showInvited=true"). The Bearer token is added automatically; the method defaults to GET. Not for media: attachment upload/download use different endpoints (upload/v1, media/v1) that this server does not proxy.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body (POST/PATCH only). | |
| path | Yes | API path relative to https://chat.googleapis.com, e.g. "v1/spaces/AAA/messages". | |
| method | No | HTTP method (the Chat API uses these four). Defaults to GET. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate destructive/read-only/idempotency hints, and the description adds useful behavior facts: the Bearer token is added automatically, the method defaults to GET, paths may include query strings, and media endpoints are not proxied. It does not elaborate on destructive consequences, but destructiveHint already covers the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, examples, defaults, and exclusions are each covered in one compact span. The long example list is justified for an open-ended raw tool, and the media exclusion is clearly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a raw escape-hatch tool, the description is largely complete: it covers path semantics, method default, body usage, auth behavior, query strings, and media exclusion. The only minor gap is an explicit statement about the response shape, but raw responses are inherently variable and no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters, so the baseline is 3, but the description adds real value with concrete path/method/body examples (POST v1/spaces, PATCH v1/spaces/<id>, v1/spaces:setup) and clarifies that paths are relative with optional query strings. This goes beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'call any Google Chat API v1 path directly' and clearly positions the tool as an 'Escape hatch' for requests typed tools don't cover. Concrete examples like creating spaces, setting up DMs, and custom-emoji reactions make it easy to distinguish from the typed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: 'for requests the typed tools don't cover' and provides a clear exclusion: 'Not for media: attachment upload/download use different endpoints... that this server does not proxy.' This gives an agent enough information to choose raw_request over alternative typed tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_spacesSearch spaces (admin)ARead-onlyIdempotent
Server-side search over ALL named spaces in the Workspace organization — including ones the caller is not a member of. ADMIN-ONLY: the call runs with useAdminAccess=true and requires a Google Workspace administrator authorized with the chat.admin.spaces or chat.admin.spaces.readonly scope; anyone else gets PERMISSION_DENIED — fall back to list_spaces and match displayName client-side. query uses the API's search syntax and MUST contain customer = "customers/my_customer" AND spaceType = "SPACE"; add displayName:"text" for name search, e.g. customer = "customers/my_customer" AND spaceType = "SPACE" AND displayName:"onboarding". order_by accepts membership_count.joined_direct_human_user_count, last_active_time or create_time with ASC/DESC.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query, e.g. customer = "customers/my_customer" AND spaceType = "SPACE" AND displayName:"onboarding". | |
| order_by | No | Sort, e.g. "create_time DESC" or "last_active_time DESC" (default create_time ASC). | |
| page_size | No | Max spaces per page (1..1000). | |
| page_token | No | nextPageToken from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint, idempotentHint, and destructiveHint annotations: it runs with useAdminAccess=true, requires administrator authorization, returns PERMISSION_DENIED for non-admins, and enforces mandatory query filters. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose first, then access restrictions, then fallback, then query syntax with examples. Despite its length, it is efficiently front-loaded and contains no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter search tool with no output schema, the description fully covers the key operational details: auth, scope, required query syntax, ordering, and alternative tool. Pagination parameters are already documented in the schema, so their absence from the description is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds crucial semantics: it mandates that query must contain customer and spaceType, explains how to use displayName for name search, gives a concrete example, and enumerates valid order_by fields. This goes well beyond the schema's generic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: server-side search over all named spaces in the Workspace organization. It clearly differentiates this tool from list_spaces by emphasizing admin-only, organization-wide scope that includes spaces the caller does not belong to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it is admin-only, requires specific OAuth scopes, and says anyone else gets PERMISSION_DENIED and should fall back to list_spaces with client-side displayName matching. This directly routes an agent to the correct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend a messageA
Sends a text message to a space AS THE AUTHENTICATED USER (their name and avatar; needs the chat.messages.create or chat.messages scope, and the user must be a member of the space). Text supports Chat markup: bold, italic, strike, code, https://url|link, <users/123> mentions. Threads: pass thread_name (from a message's thread.name) or a stable thread_key of your choosing to reply in a thread; by default a missing thread falls back to starting a new one — set reply_option="or_fail" to error instead. In non-threaded spaces the thread params are ignored by the API. message_id (must start with "client-") makes the send addressable later without storing the returned name — reuse of an id fails with ALREADY_EXISTS, which also makes accidental duplicate sends detectable. Returns the created message with name, thread.name and createTime. A send is NEVER retried after a 5xx/timeout: check with list_messages before re-sending. Cards (cardsV2) are app-auth-only — out of scope; use raw_request with a Chat-app token.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The message text (up to 4096 characters; Chat markup supported). | |
| space | Yes | The space — "spaces/<id>" or the bare id from list_spaces / a Chat URL (chat.google.com/room/<id>). | |
| message_id | No | Custom id for the message, e.g. "client-deploy-42"; must be unique per space. | |
| thread_key | No | Opaque key of your choosing: first use starts a thread, reuse replies into it. | |
| thread_name | No | Reply into this existing thread (thread.name from get_message/list_messages). | |
| reply_option | No | When targeting a thread: fallback_to_new_thread (default) starts a new thread if it doesn't exist; or_fail errors instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical behavior: sends are never retried after 5xx/timeout, message_id reuse fails with ALREADY_EXISTS and can detect duplicate sends, and thread parameters are ignored in non-threaded spaces. This adds materially to the readOnly/idempotent/destructive hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place, covering identity, scopes, formatting, threading, idempotency, return values, retry behavior, and exclusions. It front-loads the core action and distinguishes the tool from raw_request, making the length appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and six parameters, the description is remarkably complete: it explains return fields, failure modes, duplicate detection, threading edge cases, and when to use an alternative tool. An agent has enough context to invoke it correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 100%, the description adds substantial meaning: markup syntax for text, thread_name sourced from thread.name, thread_key semantics, reply_option fallback vs or_fail, client- prefix rules for message_id, and space id formats. This goes well beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Sends a text message to a space AS THE AUTHENTICATED USER,' including identity and scope requirements. It also differentiates from sibling tools by explicitly carving out cardsV2 as app-auth-only and routing those to raw_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: required scopes, membership prerequisite, thread fallback behavior, and the instruction to check with list_messages before re-sending after a 5xx/timeout. It even names raw_request as the alternative for app-auth card sends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_clientSave the OAuth clientAIdempotent
Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the client_secret_*.json file downloaded from Google Cloud Console. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true (safe to call again) and readOnlyHint=false (it's a write). The description adds valuable context: it stores the client once in a shared path, is reused by all mcp-google-* servers, and tokens stay per-server. It also warns against pasting secrets. This goes beyond annotation basics, though it does not mention any potential side effects like overwriting an old client.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first explains what and source, the second details storage scope, the third directs to start_login. The critical warning is naturally integrated. It is not overly verbose and the essential info is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers key operational aspects: the source file, the storage path, the security precaution, and the follow-up step. The only minor gap is the absence of error conditions (e.g., if the file is invalid), but that is acceptable given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces that the path is to the JSON file and adds the explicit 'must never be pasted into the chat' security guideline. It doesn't add much beyond the schema, but the security note is valuable enough to nudge to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('saves') and resource ('OAuth client credentials from the JSON file') and adds detail about the source and storage location. It does not explicitly distinguish from siblings, but the uniqueness of this tool among the listed siblings is implicit given its specific task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear guidance on when to use the tool: after downloading the JSON file and before starting login. It also mentions the prerequisite of calling start_login after. However, it does not explicitly state when not to use it or mention alternatives, though none are obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_instructionsSetup instructionsARead-onlyIdempotent
Step-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive; the description adds valuable context beyond that: it works without credentials, warns that Testing-mode refresh tokens expire in 7 days, mandates publishing the consent screen, and guarantees it never asks users to paste secrets into the chat. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences each carry unique, decision-relevant information: the checklist's contents, the shortened path when already configured, and the no-secrets guarantee. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter instructional tool, the description fully covers purpose, usage timing, workflow relationships, and key behavioral safeguards. The lack of an output schema is acceptable since the tool's job is to present instructions, and the annotations already cover the operational profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty and parameter coverage is 100%, so there is nothing for the description to add about parameter semantics. The zero-parameter case earns the baseline 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific deliverable: a step-by-step checklist for connecting the server to Google, including project creation, OAuth client, consent screen, and handing the client JSON path to set_client. This clearly distinguishes it from sibling tools like auth_status or set_client.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (before credentials exist) and how the checklist shortens when an OAuth client is already configured, referencing set_client as the downstream consumer. It provides clear workflow context, though it does not explicitly say 'use this instead of X' for every alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginStart the Google loginAIdempotent
First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it does not open the browser itself, uses a one-shot listener on 127.0.0.1, exchanges the code locally, never passes it through chat, and has a 10-minute attempt lifetime. These details are not present in the annotations and provide meaningful operational guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it covers user interaction, browser constraints, security, timeout, and next step without repetition or filler. The most important user-facing instruction is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description is fully complete. It explains the returned authorizeUrl, how to present it, what will happen afterward, and which sibling tool to call next.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the schema carries no burden and the description correctly avoids inventing parameter details. The baseline for a 0-parameter tool is 4; the description also reinforces that no configuration files or restart are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'First step of connecting from the chat' and names a specific resource and action: start the Google login and return an authorizeUrl. It is clearly distinguished from siblings like finish_login and auth_status by positioning itself as the initial step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: as the first step of connecting, without editing config files or restarting the client. It also gives direct instructions to show the authorizeUrl to the user, ask them to open it in the browser, and call finish_login after the success page appears.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_messageUpdate a messageADestructiveIdempotent
Replaces the text of an existing message (updateMask=text; the previous text is overwritten, not appended). With user authentication only the authenticated user's OWN messages can be edited — editing someone else's returns PERMISSION_DENIED, a Chat rule, not a missing scope. The message keeps its name and thread; lastUpdateTime is set and clients show an Edited marker. Updating cards or accessory widgets needs app auth via raw_request.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The new message text (replaces the old text entirely). | |
| message | Yes | The full message name from list_messages/send_message, e.g. "spaces/AAA/messages/BBB.CCC". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: text is overwritten rather than appended, messages keep their name and thread, lastUpdateTime is set, clients show an Edited marker, and permission rules are explained. This complements the destructiveHint and readOnlyHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, front-loaded sentences cover behavior, permissions, side effects, and the raw_request alternative without redundancy. Every sentence earns its place, and the most important operational detail ('replaces text') comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations already declaring readOnly=false and destructiveHint=true, the description provides the missing context an agent needs: auth restrictions, failure mode, side effects, and when to route to raw_request. No output schema exists, but the described side effects are sufficient for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both text and message parameters are already documented with types, constraints, patterns, and examples. The description adds 'message name from list_messages/send_message' and the overwrite semantics, but these largely echo the schema, so the description adds no significant parameter-level value beyond the structured definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Replaces the text of an existing message'. It clearly scopes the operation to text-only updates via 'updateMask=text' and differentiates from siblings by stating the previous text is overwritten, not appended, which distinguishes it from send_message and delete_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage conditions: with user authentication only the authenticated user's own messages can be edited, and editing someone else's returns PERMISSION_DENIED. It also names an explicit alternative for a specific case: updating cards or accessory widgets requires app auth via raw_request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- Added
auth_status - Added
finish_login - Added
logout - Added
set_client - Added
setup_instructions - Added
start_login
14 tool updates
v0.1.0- First observed
delete_message - First observed
find_direct_message - First observed
get_attachment - First observed
get_message - First observed
get_space - First observed
list_members - First observed
list_messages - First observed
list_spaces - First observed
manage_members - First observed
manage_reactions - First observed
raw_request - First observed
search_spaces - First observed
send_message - First observed
update_message
TDQS
Scored across 20 tools
Each tool targets a distinct resource+action, and overlapping-looking pairs are explicitly delineated (list_spaces vs admin-only search_spaces vs find_direct_message; get_attachment vs the attachment[] field of get_message). The six auth tools are separate steps with a documented sequence, so an agent can tell them apart.
Overwhelmingly consistent snake_case verb_noun (list_spaces, get_message, send_message, manage_members, raw_request). The only minor deviation is the noun-phrase auth_status, which is readable but breaks the verb pattern.
20 tools is on the heavy side, but the count is justified by a broad Chat surface (spaces, messages, members, reactions, attachments) plus a multi-step OAuth login flow. No obviously redundant tools inflate the set.
Core lifecycle is covered: space/message read-write, member and reaction management, plus raw_request as an escape hatch. However, common operations like creating a space and setting up a DM rely on raw_request, and attachment upload/download are out of scope, leaving a couple of gaps.
Maintenance
Related MCP Connectors
- UproarOAuthchat.uproar
Chat where AI agents are first-class members, with their own identity and permissions.
Messaging tools for AI agents: send messages, manage chats, groups and channels.
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceConnects Claude to Google Chat for searching messages, spaces, and DMs, automatically resolving user IDs to real display names.MIT
- -licenseNot gradedqualityDmaintenanceEnables AI assistants to read and send messages in Google Chat spaces using service account authentication.-
- AlicenseNot gradedqualityCmaintenanceEnables reading and searching Google Chat spaces, messages, threads, and members, with optional message sending.102 npmMIT
- AlicenseAqualityAmaintenanceEnables AI assistants to create and modify Google Apps Script projects, manage versions and deployments, run functions, and inspect execution history through natural language.1863 npmMIT