google-mcp
google-mcp
stdio를 통해 Gmail 및 Calendar 읽기 도구를 노출하는 다중 계정 Google MCP 서버입니다.
보안 참고 사항
credentials.json은 로컬 전용이며 절대 커밋해서는 안 됩니다.credentials.template.json을credentials.json으로 복사하고 로컬 OAuth 클라이언트 값으로 채우십시오.새로 고침 토큰은 소스 제어가 아닌 OS 키체인(
keyring)에 저장됩니다.
Related MCP server: gmail-mcp
설정
종속성 설치:
uv sync
로컬 OAuth 클라이언트 구성 생성:
cp credentials.template.json credentials.json
예상 계정 이메일 설정(선택 사항이지만 인증 안전 검사를 위해 권장됨):
export GOOGLE_MCP_PERSONAL_EMAIL="you@example.com"export GOOGLE_MCP_WORK_EMAIL="you@company.com"
선택적으로 특정 업무용 캘린더 필터 설정:
export GOOGLE_MCP_WORK_CALENDAR="calendar-id-or-summary"
각 계정 승인:
uv run auth_setup.py personaluv run auth_setup.py work
서버 실행
uv run server.py
통합 테스트
이 테스트는 실제 Google API를 호출합니다.
기본 라이브 테스트:
RUN_LIVE_TESTS=1 uv run integration_smoke.py
파괴적인 키체인 변경 테스트 포함:
RUN_LIVE_TESTS=1 RUN_DESTRUCTIVE_TESTS=1 uv run integration_smoke.py
게시 안전 검사
로컬 보안 가드레일 실행:
python scripts/security_check.py
선택적 pre-commit 통합:
uv tool install pre-commitpre-commit installpre-commit run --all-files
CI는
.github/workflows/security-check.yml을 통해 모든 푸시/PR에서 동일한 스크립트를 실행합니다.
Available Tools
4 toolscalendar_events_personalC
List events for the configured personal account calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| time_min | Yes | ||
| time_max | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'List events', which implies a read operation. It omits behavioral details such as authentication requirements, rate limits, pagination, or response format, leaving the agent underinformed.
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 a single, front-loaded sentence with no wasted words. It is appropriately concise but could include more essential details without becoming verbose.
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?
Despite having an output schema, the description fails to convey parameter semantics, usage context, or behavioral expectations. It is incomplete for correct agent invocation without additional information.
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 does not explain the parameters at all. The parameter names 'time_min', 'time_max', and 'max_results' are somewhat self-explanatory but lack specifics on format or constraints, which is insufficient.
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 verb 'List' and the resource 'events' for 'personal account calendars', distinguishing it from the sibling 'calendar_events_work'.
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 on when to use this tool versus alternatives like 'calendar_events_work' or 'gmail_search_*'. The description does not specify exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calendar_events_workC
List events for the configured work account calendars.
| Name | Required | Description | Default |
|---|---|---|---|
| time_min | Yes | ||
| time_max | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as authentication needs, rate limits, pagination, or error handling. It only states 'List events', leaving significant 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 very concise (one sentence), which is good for brevity, but it sacrifices essential information, making it less effective.
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?
Even though an output schema exists (per context), the description lacks details about parameters and behavioral context, leaving the agent underinformed for a tool with no annotations.
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%, and the description adds no meaning to parameters like time_min, time_max, or max_results. It fails to explain expected formats or constraints.
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 action ('List events'), the resource ('events'), and the scope ('configured work account calendars'), effectively distinguishing it from sibling 'calendar_events_personal'.
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 usage for work account calendars but provides no explicit guidance on when to use this tool versus alternatives (e.g., calendar_events_personal) or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_search_personalB
Search Gmail for the configured personal account.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states 'search', implying a read operation but does not confirm safety, auth needs, rate limits, or any side effects. Minimal transparency.
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 very short (one sentence), front-loaded, but at the cost of completeness. It does not convey enough detail, so conciseness is average.
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 tool and existence of output schema, the description is minimally adequate but lacks details on search behavior, limitations, or account specificity beyond the name. Could be more complete.
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 description must compensate. It adds no meaning beyond the parameter names (query, max_results). No explanation of query format, max_results bounds, or defaults. Fails to compensate for low schema coverage.
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 'Search Gmail for the configured personal account' uses a specific verb ('Search') and resource ('Gmail'), and distinguishes from sibling tool 'gmail_search_work' by specifying 'personal account'.
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 usage for personal account searches via 'personal account', providing clear context. However, it does not explicitly state when not to use or mention alternatives, though the sibling differentiation helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gmail_search_workC
Search Gmail for the configured work account.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. It only restates the tool's purpose without disclosing any behavioral traits like authentication needs, rate limits, or what happens with empty results.
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?
Description is a single, concise sentence that fits the space. However, it lacks structure and could include additional details without sacrificing brevity.
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 2 parameters, 0% schema coverage, and output schema present, the description fails to provide sufficient context about output, search syntax, or limitations. Agent must rely on parameter names alone.
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 0%, so description should compensate. It does not explain 'max_results' (e.g., default behavior, maximum allowed) beyond the schema's default value. The 'query' parameter is implicit but not elaborated.
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 verb 'Search' and resource 'Gmail' and distinguishes from sibling 'gmail_search_personal' by specifying 'work account'. However, it does not specify whether it searches only emails or all Gmail data, leaving slight ambiguity.
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 on when to use this tool vs its sibling 'gmail_search_personal' or other tools. The description does not mention prerequisites, limitations, or contexts where this tool is appropriate.
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.
4 tool updates
v0.1.0- First observed
calendar_events_personal - First observed
calendar_events_work - First observed
gmail_search_personal - First observed
gmail_search_work
TDQS
Scored across 4 tools
Each tool has a unique combination of service (calendar vs gmail) and account type (personal vs work), making it impossible to confuse one tool with another.
All tools follow a strict pattern: {service}_{action}_{account}, using snake_case consistently. This makes the naming predictable and easy to understand.
With 4 tools, the count is appropriate for a focused server that distinguishes between two services across two accounts, avoiding unnecessary complexity.
The tool set covers listing events and searching emails, but is limited to these read operations. Missing capabilities like creating or modifying events/schedules are notable gaps for a full Google workspace integration.
Maintenance
Related MCP Connectors
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Related MCP Servers
- AlicenseAqualityCmaintenanceLocal-first Gmail MCP server using PKCE + loopback OAuth flow that stores refresh tokens in the OS keychain, enabling secure read/write Gmail access via MCP tools without tokens leaving the device.20MIT
- FlicenseNot gradedqualityCmaintenanceMulti-account Gmail MCP server for reading threads, managing labels, and creating drafts across multiple Gmail accounts.-
- AlicenseNot gradedqualityBmaintenanceA local MCP server that manages multiple Gmail accounts simultaneously, allowing MCP clients to switch between accounts per request without logging out or in. It securely stores OAuth tokens in the macOS Keychain.MIT
- AlicenseNot gradedqualityCmaintenanceA self-hostable Gmail MCP server that enables Gmail search/read, sending, replies, drafts, labels, and attachment downloads via MCP tools with OAuth authorization. Supports stdio and streamable HTTP transports.1MIT