MCP server for Google Chat integration
Project description
gchat-mcp
MCP (Model Context Protocol) server for Google Chat integration. This server provides tools to interact with Google Chat spaces and messages.
Features
- List all Google Chat spaces you're a member of
- Retrieve recent messages from any space
- Search messages by text content
Installation
Using uv
# Create virtual environment
uv venv
# Activate it
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
uv pip install -e ".[dev]"
Or with pip
pip install -e ".[dev]"
Setup
-
Create a Google Cloud project: https://console.cloud.google.com/
-
Enable Google Chat API:
gcloud services enable chat.googleapis.com
-
Create a service account:
- Go to IAM & Admin > Service Accounts
- Click "Create Service Account"
- Give it a name (e.g., "gchat-mcp")
- Click "Generate Key" and select JSON format
- Download the JSON file
-
Place credentials: Put your service account JSON as
credentials.jsonin the project root -
Validate credentials:
make oauth # or uv run python oauth_setup.py credentials.json
Usage
As an MCP Server
# Start the MCP server
uv run python -m src.apps.gchat_mcp.server
Available Tools
list_spaces()
Returns a list of Google Chat spaces the authenticated user is a member of.
Example:
from src.apps.gchat_mcp.server import app
# In MCP context
spaces = await app.call_tool("list_spaces")
print(spaces)
# [{'spaceId': 'abc123', 'name': 'General', 'iconLink': 'https://...'}]
list_messages(space_id, limit=20)
Retrieves recent messages from a specific space.
Arguments:
space_id(str): The unique identifier of the spacelimit(int, optional): Maximum number of messages to retrieve (default: 20)
Example:
messages = await app.call_tool("list_messages", {"space_id": "abc123", "limit": 10})
print(messages)
# [{'messageId': 'msg1', 'text': 'Hello!', 'authorName': 'User1', ...}]
search_messages(space_id, query)
Searches for messages containing specific text in a space.
Arguments:
space_id(str): The unique identifier of the space to search inquery(str): The text query to search for
Example:
results = await app.call_tool("search_messages", {"space_id": "abc123", "query": "meeting"})
print(results)
# [{'messageId': 'msg1', 'text': 'Meeting at 3pm...', 'authorName': 'User1', ...}]
Project Structure
ai-meetup-demo/
├── pyproject.toml
├── README.md
├── src/
│ ├── config/ # Configuration files
│ │ └── __init__.py
│ ├── apps/
│ │ └── gchat_mcp/ # MCP server application
│ │ ├── __init__.py
│ │ └── server.py
│ └── manage.py # Entry point
├── credentials.json # Google Cloud service account (add to .gitignore)
├── oauth_setup.py # OAuth setup helper script
├── examples/
│ └── example_usage.py # Usage examples
└── tests/
└── test_server.py # Unit tests
Configuration
Service Account
Place your Google Cloud service account JSON as credentials.json in the project root. This file is excluded from git.
Development
# Install dev dependencies
uv pip install -e ".[dev]"
# Run tests
uv run pytest
# Check code quality
uv run ruff check src/
uv run ruff format src/ --check
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gchat_mcp-0.1.4.tar.gz.
File metadata
- Download URL: gchat_mcp-0.1.4.tar.gz
- Upload date:
- Size: 136.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d82c313a62e9ddee608eacd361ce429cab353a1f539b94658e8abfb834a4acc3
|
|
| MD5 |
3554b2b6c9a7ecdc4fb476e003d4c586
|
|
| BLAKE2b-256 |
4d823705653a0627af1785891ae441ac5895a62f34433654bfc53b86f7d6f15d
|
File details
Details for the file gchat_mcp-0.1.4-py3-none-any.whl.
File metadata
- Download URL: gchat_mcp-0.1.4-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
198b09208cdc6b93c87cf0c315a2fcac1fc8b96a0b93eda621167885a3a74168
|
|
| MD5 |
c6584291cf60333e765ff90b88c0034b
|
|
| BLAKE2b-256 |
b2805c4a88183f26c8be824a7bb921f7920e083612003dccd2bface7025a8b7b
|