Skip to main content
Glama
bobamayer

Google Chat MCP Server

by bobamayer

Google Chat MCP Server

An MCP server that exposes Google Chat as tools for an LLM client (Claude Desktop, Claude Code, etc.): sending messages, listing spaces, and searching message history.

Tools

Tool

Description

send_message(space, text, thread_key=None)

Post a message to a space, optionally inside an existing thread.

list_spaces(page_size=100, page_token=None)

List spaces the configured account can see.

list_messages(space, page_size=50, page_token=None, filter_expr=None)

List recent messages in a space, newest first.

search_messages(space, query, page_size=50)

Substring-search a space's recent messages (client-side, since the Chat API has no full-text search endpoint).

Related MCP server: google-mcp

Setup

  1. Create a Google Cloud project and enable the Google Chat API.

  2. Create a service account and download its JSON key.

  3. To use list_spaces / list_messages / search_messages, enable domain-wide delegation for the service account in your Google Workspace admin console, granting the scopes in src/google_chat_mcp/auth.py. send_message alone works with a bare service account registered as a Chat app.

  4. Copy .env.example to .env and fill in the path to your key file (and the user to impersonate, if needed).

uv sync
cp .env.example .env  # then edit it

Running

uv run google-chat-mcp

Claude Desktop / Claude Code config

{
  "mcpServers": {
    "google-chat": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/google-chat-mcp", "run", "google-chat-mcp"],
      "env": {
        "GOOGLE_CHAT_SERVICE_ACCOUNT_FILE": "/absolute/path/to/service-account.json",
        "GOOGLE_CHAT_IMPERSONATED_USER": "someone@yourdomain.com"
      }
    }
  }
}

Project layout

  • auth.py — builds an authenticated Google Chat API client from a service account key, with optional domain-wide-delegation impersonation.

  • chat_client.py — thin wrapper over the chat v1 REST API (send, list, search).

  • server.py — MCP tool definitions built on the official Python SDK.

Available Tools

4 tools
list_messagesA

List recent messages in a Google Chat space, newest first.

Args:
    space: Resource name of the space, e.g. "spaces/AAAAAAAAAAA".
    page_size: Max number of messages to return.
    page_token: Token from a previous call to fetch the next page.
    filter_expr: Optional Chat API filter, e.g.
        'createTime > "2024-01-01T00:00:00Z"'.
ParametersJSON Schema
NameRequiredDescriptionDefault
spaceYes
page_sizeNo
page_tokenNo
filter_exprNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It does add ordering ('newest first'), page_token-based pagination, and the ability to filter, but it leaves 'recent' undefined and never states what the response contains or whether there are permission/rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action; the Args block is clean, each parameter has a one-line purpose, and the filter example is valuable without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with no output schema, the description covers inputs and ordering but omits the return shape (what fields each message has), pagination limits, and any auth or error conditions. The 'recent' qualifier is also vague, so an agent cannot fully predict behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all parameter meaning comes from the description. It explains each parameter: space with a concrete example, page_size semantics, page_token usage, and filter_expr with a query example. This fully compensates for the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('List'), specifies the resource ('messages in a Google Chat space'), and adds ordering detail ('newest first'), making it clearly distinct from siblings like send_message (write), list_spaces (different resource), and search_messages (query-based).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this over search_messages or how it relates to list_spaces. The purpose implies per-space browsing, but alternatives are never mentioned, so the agent must infer from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_spacesA

List Google Chat spaces the configured account can see.

Args:
    page_size: Max number of spaces to return (1-1000).
    page_token: Token from a previous call to fetch the next page.
ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNo
page_tokenNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses that results are scoped to the configured account's visibility and that pagination is supported through page_size (1-1000) and page_token from a previous call. It does not mention auth requirements or rate limits, but 'list' plus the visibility/pagination details cover the key behavior for this read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded and the Args list is compact. Every sentence contributes distinct information, with no redundant wording or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The purpose and both optional parameters are covered, so a basic call is fully specified. However, there is no output schema and the description does not describe the response shape or how the returned next_page_token would be surfaced, which an agent needs to confidently implement multi-page listing. Auth/rate-limit notes are also absent, though less critical for a read-only list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add parameter meaning, and it does: page_size is explained as the max number of spaces to return with an explicit 1-1000 range, and page_token is explained as a token from a previous call to fetch the next page. This goes well beyond the raw integer/string/null types in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'List Google Chat spaces...'. It adds the scope 'the configured account can see', which separates it from siblings that operate on messages (send_message, list_messages, search_messages). Even without a title, the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear that this is for listing spaces visible to the configured account, which gives context for when it applies. However, it does not explicitly contrast it with sibling tools or say when to prefer it over search_messages/list_messages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_messagesA

Search for messages in a space containing a text substring.

Args:
    space: Resource name of the space, e.g. "spaces/AAAAAAAAAAA".
    query: Case-insensitive substring to search for in message text.
    page_size: Number of messages to fetch per page while scanning.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
spaceYes
page_sizeNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It adds useful behavioral details—query is case-insensitive, page_size controls fetch size while scanning—but it does not state whether the operation is read-only (though implied by 'Search'), how results are returned, or whether all pages are automatically scanned. These gaps leave moderate ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: a one-sentence purpose followed by a short args block with no filler. It is front-loaded with the primary action and structured for easy parsing, with a clear list format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain return behavior; it does not. The purpose and inputs are clear, but it leaves ambiguity about whether the function returns all matching messages, how pagination is aggregated, and the response shape. For a simple search tool this is a moderate gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates well by explaining each parameter: space includes a concrete resource-name format example, query defines case-insensitive substring matching against message text, and page_size explains its role in paging. This adds significant meaning beyond the schema's bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search'), resource ('messages'), and scope ('in a space containing a text substring'). This clearly distinguishes it from siblings like list_messages (which likely lists without substring filtering), send_message, and list_spaces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over alternatives, such as explicitly mentioning 'use list_messages to list all messages' or 'use search_messages when you need substring filtering'. The usage context is only implied by the name and description, with no exclusions or sibling comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

Send a text message to a Google Chat space.

Args:
    space: Resource name of the space, e.g. "spaces/AAAAAAAAAAA".
    text: Message body.
    thread_key: Optional thread key to reply within an existing thread.
ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
spaceYes
thread_keyNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly conveys the mutating nature of the action ('send') and adds the thread_key reply behavior, but it does not disclose permissions, visibility of the sent message, error behavior, or any return value. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with a single purpose sentence followed by a terse Args list. Every line contributes necessary parameter meaning, and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with three simple parameters and no output schema, the description provides enough information to call it correctly: purpose, all parameter semantics, and optional thread behavior. It does not mention return values or error conditions, but the operation is straightforward enough that these are not blocking gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare schema. It does so by explaining all three parameters: space gets a concrete 'spaces/...' example, text is identified as the message body, and thread_key is described as an optional way to reply in an existing thread. It lacks constraints such as length limits but is otherwise strong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Send a text message to a Google Chat space,' which is a specific verb plus resource. It clearly distinguishes this write-oriented tool from the read-oriented siblings list_spaces, list_messages, and search_messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the verb 'send,' but the description never explicitly states when to prefer this tool over alternatives or mentions any prerequisites or exclusions. It provides enough context for a simple send operation, but stops at implied usage rather than explicit guidance.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedlist_messages
    • First observedlist_spaces
    • First observedsearch_messages
    • First observedsend_message

TDQS

A4/5.0
Disambiguation4/5

send_message, list_spaces, and search_messages are clearly distinct. list_messages and search_messages overlap somewhat in retrieving messages from a space, but their parameters and stated purposes make the intended difference reasonably clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: send_message, list_spaces, list_messages, and search_messages. The naming is predictable and makes the action and target resource immediately obvious.

Tool Count5/5

Four tools is a well-scoped size for a focused Google Chat MCP server. Each tool covers a clear use case without unnecessary redundancy or overwhelming surface area.

Completeness3/5

The server covers sending and reading messages plus listing spaces, but it lacks message update/delete operations and has no way to create or retrieve a single space. This leaves notable lifecycle gaps for message management, though basic chat workflows are usable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with Google Chat through MCP, allowing listing spaces and messages, searching messages, and sending messages. Supports local and remote transports.
    83
    Apache 2.0
  • -
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to read and send messages in Google Chat spaces using service account authentication.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables LLM clients to send messages, read recent messages, and retrieve chat information through the Telegram Bot API.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bobamayer/google-chat-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server