Google Chat MCP Server
소개
이 프로젝트는 FastMCP를 사용하여 Python으로 작성된 MCP(모델 제어 프로토콜) 서버용 Google Chat 통합 기능을 제공합니다. MCP 도구를 통해 Google Chat 공간 및 메시지에 접근하고 상호작용할 수 있습니다.
구조
이 프로젝트는 두 가지 주요 구성 요소로 구성됩니다.
Google Chat 도구가 포함된 MCP 서버 : 모델 제어 프로토콜을 통해 Google Chat과 상호 작용하기 위한 도구를 제공합니다.
FastMCP가 작성함
server.py: Google Chat 도구를 사용한 주요 MCP 서버 구현google_chat.py: Google Chat API 통합 및 인증 처리
인증 서버 : Google 계정 인증을 위한 독립 실행형 구성 요소
FastAPI에서 작성됨
Google과 함께 OAuth2 흐름을 처리합니다.
액세스 토큰을 저장하고 관리합니다.
독립적으로 또는 MCP 서버의 일부로 실행 가능
server_auth.py: 인증 서버 구현
인증 흐름을 통해 Google API 토큰을 획득하고 갱신할 수 있으며, 이 토큰은 MCP 도구에서 Google Chat 데이터(스페이스 및 메시지)에 액세스하는 데 사용됩니다.
Related MCP server: Google Workspace MCP Server
특징
Google Chat API를 사용한 OAuth2 인증
사용 가능한 Google Chat 공간 나열
날짜 필터링을 사용하여 특정 공간에서 메시지 검색
간편한 설정을 위한 로컬 인증 서버
요구 사항
파이썬 3.8 이상
Chat API가 활성화된 Google Cloud 프로젝트
Google Cloud Console의 OAuth2 자격 증명
어떻게 사용하나요?
Google Oauth 로그인 준비
이 프로젝트를 복제하세요
지엑스피1
Google Cloud 프로젝트(GCP) 준비
Google Cloud 콘솔( https://console.cloud.google.com/auth/overview?project=\ <YOUR_PROJECT_NAME>)
Google Auth Platform > 클라이언트 > (+) 클라이언트 생성 > 웹 애플리케이션 참조: https://developers.google.com/identity/protocols/oauth2/?hl=en 승인된 JavaScript 원본 추가:
http://localhost:8000승인된 리디렉션 URI:http://localhost:8000/auth/callbackOAuth 2.0 클라이언트를 생성한 후 클라이언트 시크릿을
.json파일로 다운로드하세요. 프로젝트 최상위에credentials.json파일로 저장하세요.
인증 서버를 실행하고 Google 액세스 토큰을 받으세요(Google에만 로그인하고 MCP 서버에는 아직 로그인하지 마세요)
python server.py -local-auth --port 8000http://localhost:8000/auth 에서 브라우저를 엽니다.
로그인하세요!
로그인 후 액세스 토큰은
token.json으로 저장됩니다.
MCP 구성(mcp.json)
{
"mcpServers": {
"google_chat": {
"command": "uv",
"args": [
"--directory",
"<YOUR_REPO_PATH>/google-chat-mcp-server",
"run",
"server.py",
"--token-path",
"<YOUR_REPO_PATH>/google-chat-mcp-server/token.json"
]
}
}도구
MCP 서버는 다음과 같은 도구를 제공합니다.
Google 채팅 도구
get_chat_spaces()- 봇이 액세스할 수 있는 모든 Google Chat 공간을 나열합니다.get_space_messages(space_name: str, start_date: str, end_date: str = None)- 시간 필터링을 선택적으로 적용하여 특정 Google Chat 공간의 메시지를 나열합니다.
개발 및 디버그
fastmcp dev server.py --with-editable .Available Tools
5 toolsaddC
Add two numbers
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Add two numbers' implies a simple computation but doesn't address potential issues like integer overflow, error handling, or output format. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
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 extremely concise at three words, with zero wasted text. It's front-loaded and directly states the tool's function without unnecessary elaboration, making it efficient and easy to parse.
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 tool's simplicity (2 parameters, no annotations, no output schema), the description is minimal but inadequate. It doesn't explain the return value (e.g., sum as integer), error cases, or behavioral nuances. For even a simple tool, more context would improve agent understanding.
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 0%, so the schema provides no parameter descriptions. The description 'Add two numbers' implies the parameters are numbers to be added, which adds basic semantic meaning beyond the schema's type definitions. However, it doesn't specify parameter roles (e.g., which is first/second) or constraints, leaving some ambiguity.
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 'Add two numbers' clearly states the verb ('Add') and resource ('two numbers'), making the purpose immediately understandable. It doesn't distinguish from sibling tools (fetch_news_articles, get_weather) since they're unrelated, but the purpose is specific and 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 provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions. While the sibling tools are unrelated, the description offers no usage instructions beyond the basic operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_weatherB
Fetch current weather for a city
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description must cover behavioral traits. It only states it fetches weather, lacking details like mutability, error conditions, or data freshness.
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?
Single sentence, no waste. Perfectly concise for the function's simplicity.
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?
Adequate for a simple one-parameter tool, but lacks information about return value (no output schema) or any side effects.
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 has 0% description coverage; description implies 'city' parameter is a city name but adds no format or constraints beyond the schema type.
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 'Fetch current weather for a city' clearly states the verb and resource, and distinguishes this weather tool from the many UI automation 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?
No explicit guidance on when to use or alternatives, but the context implies it should be used for weather queries. No alternatives exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_spacesA
List all Google Chat spaces the bot has access to.
This tool requires OAuth authentication. On first run, it will open a browser window for you to log in with your Google account. Make sure you have credentials.json downloaded from Google Cloud Console in the current directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the authentication requirement (OAuth), first-run behavior (browser window), and prerequisites (credentials.json file). However, it doesn't mention rate limits, pagination, or what specific data is returned about each space.
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 appropriately sized but not optimally structured. The first sentence clearly states the purpose, but the following authentication details could be more efficiently integrated. While all information is relevant, the flow from purpose to authentication setup could be smoother.
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 no annotations and no output schema, the description provides good coverage of authentication requirements but lacks information about return values, pagination, or error handling. For a list operation with no structured output documentation, more detail about what data is returned would be helpful.
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 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on authentication requirements which is the correct emphasis for a parameterless tool.
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 specific action ('List all Google Chat spaces') and resource ('Google Chat spaces the bot has access to'), distinguishing it from siblings like 'get_space_messages' which focuses on messages within spaces rather than listing spaces themselves. The verb+resource combination is precise and 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?
No guidance is provided on when to use this tool versus alternatives. While it implicitly suggests usage for listing accessible spaces, there's no mention of when NOT to use it or how it differs from potential sibling tools. The description focuses on authentication setup rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ip_my_addressC
Get IP address from outian.net
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool gets an IP address but doesn't explain how it works (e.g., via an API call to outian.net), what the response format is, potential rate limits, or error handling. This leaves significant gaps in understanding the tool's behavior and reliability.
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 extremely concise with a single sentence, 'Get IP address from outian.net', which is front-loaded and wastes no words. It efficiently communicates the core function without unnecessary details, making it easy to scan and understand quickly.
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 tool's complexity (simple but with an undocumented parameter), lack of annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain what the tool returns, how the parameter affects the result, or any behavioral aspects, making it inadequate for effective use without additional guesswork or documentation.
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 has 1 parameter ('city') with 0% description coverage, and the tool description doesn't mention any parameters. This fails to compensate for the lack of schema documentation, leaving the parameter's purpose (e.g., whether it filters by city or something else) unexplained and potentially confusing for users.
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 the tool's purpose as 'Get IP address from outian.net', which includes a verb ('Get') and resource ('IP address'), but is vague about what specific IP address is retrieved (e.g., user's current IP, IP for a city). It doesn't distinguish from sibling tools like 'fetch_weather' or 'get_chat_spaces', which are unrelated, but the purpose is clear enough to understand the basic function.
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?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention any context, prerequisites, or exclusions, such as whether it's for geolocation, network diagnostics, or other use cases. Without this, users must infer usage from the tool name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_space_messagesA
List messages from a specific Google Chat space with optional time filtering.
This tool requires OAuth authentication. The space_name should be in the format 'spaces/your_space_id'. Dates should be in YYYY-MM-DD format (e.g., '2024-03-22').
When only start_date is provided, it will query messages for that entire day. When both dates are provided, it will query messages from start_date 00:00:00Z to end_date 23:59:59Z.
Args: space_name: The name/identifier of the space to fetch messages from start_date: Required start date in YYYY-MM-DD format end_date: Optional end date in YYYY-MM-DD format
Returns: List of message objects from the space matching the time criteria
Raises: ValueError: If the date format is invalid or dates are in wrong order
| Name | Required | Description | Default |
|---|---|---|---|
| space_name | Yes | ||
| start_date | Yes | ||
| end_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes authentication requirements ('requires OAuth authentication'), input format constraints (space_name format, date format), time range behavior (how start_date and end_date affect the query), and error conditions (raises ValueError). It doesn't mention rate limits, pagination, or what happens with large result sets, but covers core operational aspects well.
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 appropriately sized and well-structured: it starts with the core purpose, then covers prerequisites and format details, explains behavioral logic, and concludes with parameter documentation and error handling. Every sentence adds value without redundancy, and information is logically organized for quick comprehension.
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 no annotations, no output schema, and 0% schema description coverage, the description does an excellent job covering authentication, input formats, temporal logic, and errors. However, it doesn't describe the structure of returned message objects (only mentions 'List of message objects'), which would be helpful since there's no output schema. For a read-only listing tool, this is a minor gap.
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?
With 0% schema description coverage, the description fully compensates by explaining all three parameters: space_name (format requirements), start_date (required, format, behavior when used alone), and end_date (optional, format, behavior when combined with start_date). It adds crucial meaning beyond the bare schema, including format specifications and temporal logic.
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 specific action ('List messages') and resource ('from a specific Google Chat space') with additional scope ('with optional time filtering'). It distinguishes from sibling tools like 'get_chat_spaces' (which likely lists spaces rather than messages) and 'add' or 'fetch_weather' (completely different domains).
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 context about when to use this tool (for listing messages from a Google Chat space with time filtering) but doesn't explicitly state when NOT to use it or mention alternatives among sibling tools. It doesn't compare with other message-fetching tools if they exist, though the sibling list doesn't suggest direct alternatives.
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.
5 tool updates
v0.1.0- First observed
add - First observed
fetch_weather - First observed
get_chat_spaces - First observed
get_ip_my_address - First observed
get_space_messages
TDQS
Scored across 5 tools
The tool set has significant ambiguity issues. 'add' (math operation) and 'fetch_weather' (weather API) are completely unrelated to the Google Chat domain suggested by the server name and other tools. 'get_ip_my_address' is another unrelated utility. Only 'get_chat_spaces' and 'get_space_messages' clearly belong to the Google Chat domain, creating confusion about the server's actual purpose.
Naming conventions are inconsistent across the tool set. 'add' uses a simple verb, 'fetch_weather' uses verb_noun, 'get_chat_spaces' and 'get_space_messages' use get_noun_noun pattern, and 'get_ip_my_address' mixes get_noun_adjective_noun. There's no coherent naming strategy, with tools using different verb styles and structural patterns.
With only 5 tools, the count seems reasonable at first, but the content mismatch makes it inappropriate. For a 'Google Chat MCP Server', having only 2 actual Google Chat tools alongside 3 unrelated utilities creates a poorly scoped tool set. The server name suggests a focused domain, but the tools deliver a scattered collection.
For a Google Chat server, the coverage is severely incomplete. While 'get_chat_spaces' and 'get_space_messages' provide read access, there are no tools for creating messages, updating content, managing memberships, or other essential chat operations. The inclusion of unrelated tools (add, fetch_weather, get_ip) further dilutes the domain coverage, creating significant gaps in the expected functionality.
Maintenance
Related MCP Connectors
Google Docs MCP Pack — read, create, and edit Google Docs via OAuth.
Confluence MCP — wraps the Confluence Cloud REST API v2 (OAuth)
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables interaction with Google Chat via MCP using the internal Dynamite API, allowing listing spaces, reading and sending messages, and managing DMs. No Google Cloud Console setup required.13MIT
- AlicenseBqualityDmaintenanceProvides natural language control over Google Workspace services (Calendar, Drive, Gmail, Docs, Sheets, Slides, Forms, Tasks, Chat) via MCP, with OAuth 2.1 multi-user authentication.100MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Chat that enables managing spaces, messages, members, reactions, attachments, and GIFs through the Model Context Protocol.691MIT
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Google Chat through MCP, allowing listing spaces and messages, searching messages, and sending messages. Supports local and remote transports.42Apache 2.0