gmail-mcp
Gmail MCP 서버
Gmail MCP 서버는 Node.js/TypeScript 기반의 MCP stdio 서버로, OpenClaw가 Model Context Protocol을 통해 Gmail 이메일을 읽을 수 있도록 합니다.
기능
Gmail API OAuth 2.0 인증 사용, 읽기 전용 권한 범위:
https://www.googleapis.com/auth/gmail.readonlylist_emails: 받은 편지함 이메일 목록 조회,maxResults및 Gmailquery필터링 지원get_email:messageId를 통해 단일 이메일 상세 내용 읽기search_emails: Gmail 검색 구문을 통한 이메일 검색list_labels: 모든 Gmail 라벨/폴더 목록 조회MCP stdio transport 지원, OpenClaw에서 호출 가능
Related MCP server: gmail-mcp
환경 요구 사항
Node.js 18 이상
npm
Gmail API에 액세스할 수 있는 Google 계정
설치
npm install
npm run buildGoogle Cloud Console에서 OAuth 자격 증명 생성
Google Cloud Console을 엽니다.
프로젝트를 생성하거나 선택합니다.
APIs & Services->Library로 이동하여Gmail API를 검색하고 활성화합니다.APIs & Services->OAuth consent screen으로 이동합니다.사용자 유형을 선택합니다. 개인용은 보통
External을 선택합니다.앱 이름, 사용자 지원 이메일, 개발자 연락처 이메일을 입력합니다.
Scopes 단계에서 Gmail 읽기 전용 권한을 추가합니다:
https://www.googleapis.com/auth/gmail.readonly.앱이 Testing 상태인 경우, Test users에 본인의 Gmail 계정을 추가합니다.
APIs & Services->Credentials로 이동합니다.Create Credentials->OAuth client ID를 클릭합니다.Application type으로
Desktop app을 선택합니다.생성 후 JSON 파일을 다운로드합니다.
credentials.json 배치
구성 디렉토리를 생성하고 다운로드한 OAuth JSON을 다음 경로에 저장합니다:
mkdir -p ~/.gmail-mcp
chmod 700 ~/.gmail-mcp
cp /path/to/downloaded/client_secret.json ~/.gmail-mcp/credentials.json
chmod 600 ~/.gmail-mcp/credentials.json최종 경로는 다음과 같아야 합니다:
~/.gmail-mcp/credentials.json인증 프로세스 실행
npm run auth스크립트 수행 작업:
임시 로컬 OAuth 콜백 서비스 시작
브라우저를 열어 Google 인증 진행
인증 완료 후 토큰을
~/.gmail-mcp/token.json에 저장
브라우저가 자동으로 열리지 않으면 터미널에 출력된 인증 URL을 복사하여 브라우저에 붙여넣으세요.
MCP 서버 시작
npm run startstart는 stdio transport를 사용하며, 일반적으로 OpenClaw가 MCP 서버 하위 프로세스로 시작하므로 수동으로 계속 실행할 필요가 없습니다.
OpenClaw MCP 구성 예시
명령어를 본 프로젝트 빌드 후의 진입점으로 지정합니다:
{
"mcpServers": {
"gmail": {
"command": "node",
"args": ["/Volumes/DevDisk/symbol/gmailMCP/dist/src/index.js"]
}
}
}프로젝트 디렉토리 내에서 npm으로 시작할 수도 있습니다:
{
"mcpServers": {
"gmail": {
"command": "npm",
"args": ["run", "start"],
"cwd": "/Volumes/DevDisk/symbol/gmailMCP"
}
}
}Tools 매개변수 설명
list_emails
받은 편지함 이메일 목록을 조회합니다.
{
"maxResults": 10,
"query": "from:example@gmail.com newer_than:7d"
}maxResults: 선택 사항, 기본값10, 최대50query: 선택 사항, Gmail 검색 구문, INBOX 내 검색으로 제한됨
get_email
단일 이메일 상세 내용을 읽습니다.
{
"messageId": "18f..."
}반환 필드에는 발신자, 수신자, 제목, 날짜, 라벨, 본문 텍스트, HTML 본문 및 첨부 파일 메타데이터가 포함됩니다.
search_emails
Gmail 이메일을 검색합니다.
{
"query": "subject:invoice has:attachment newer_than:30d",
"maxResults": 10
}query: 필수, Gmail 검색 구문 지원maxResults: 선택 사항, 기본값10, 최대50
list_labels
모든 라벨/폴더 목록을 조회합니다.
{}파일 위치
OAuth 자격 증명:
~/.gmail-mcp/credentials.jsonOAuth 토큰:
~/.gmail-mcp/token.jsonMCP 서버 진입점:
dist/src/index.js
자주 묻는 질문
Missing Gmail OAuth credentials
Google OAuth 클라이언트 JSON을 다운로드했는지 확인하고 다음 경로에 저장했는지 확인하세요:
~/.gmail-mcp/credentials.jsonMissing Gmail OAuth token
먼저 다음을 실행하세요:
npm run authaccess_denied 또는 앱 미검증
OAuth consent screen이 여전히 Testing 상태라면, 현재 Gmail 계정을 Test users에 추가해야 합니다.
invalid_grant
기존 토큰을 삭제한 후 다시 인증하세요:
rm ~/.gmail-mcp/token.json
npm run authAvailable Tools
4 toolsget_emailA
Read one Gmail message by messageId.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | Gmail message id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states 'Read,' which implies a read-only operation with no side effects, but does not detail error handling, permissions required, or what the response contains. This is minimally adequate for a simple read tool.
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, well-structured sentence with no unnecessary words. It is front-loaded with the verb and resource, making it efficient for an agent 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 (one parameter, no output schema), the description is largely complete. It could be improved by briefly noting what the tool returns (e.g., message content or metadata), but it still provides enough context for basic usage.
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 100% description coverage for the single parameter (messageId: 'Gmail message id.'). The description adds no further meaning beyond what the schema already provides, so it meets the baseline of 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?
The description uses the specific verb 'Read' and clearly identifies the resource as 'one Gmail message by messageId.' It distinguishes from siblings like list_emails (list multiple) and search_emails (search), making the tool's purpose 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 that the tool is used when you have a specific messageId, but it does not explicitly state when to use it versus alternatives (e.g., list_emails for browsing, search_emails for filtering). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsB
List Gmail inbox messages. Supports maxResults and Gmail query filters.
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum number of emails to return. Default 10, max 50. | |
| query | No | Optional Gmail search query, applied within INBOX. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. Mentions it lists inbox messages and supports parameters, but no details on pagination, response format, or conditions like invalid queries. For a read operation, minimal disclosure.
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, no filler. Efficiently conveys the core purpose and supported features.
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 tool with 2 params and no output schema, the description covers basics but lacks usage guidelines and behavioral details, leaving gaps for an AI agent to make informed decisions.
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% with clear parameter descriptions (maxResults: default, min, max; query: optional within INBOX). Description merely restates that parameters are supported, adding no new semantic meaning 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?
Clearly states 'List Gmail inbox messages' with verb and resource, distinguishing from get_email (single email) and list_labels (labels). However, does not explicitly differentiate from search_emails, which may also list emails but with different scope.
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 alternatives like search_emails. Only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsA
List all Gmail labels and folders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source. It states the action but lacks details like pagination, data scope, or authentication requirements. For a simple list, this is adequate but minimal.
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?
A single, front-loaded sentence contains all necessary information without waste.
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 (0 parameters, no output schema) and clear sibling differentiation, the description is complete enough for an agent to use 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 input schema has no parameters and 100% coverage. With 0 parameters, the baseline is 4, and the description does not add parameter information 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?
The description 'List all Gmail labels and folders' uses a specific verb and resource, clearly distinguishing from sibling tools that deal with emails (get_email, list_emails, search_emails).
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?
While no explicit when-to-use or alternatives are stated, the sibling context makes it clear this is for labels/folders vs. emails, implying appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsA
Search Gmail messages with Gmail search syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Gmail search query string. | |
| maxResults | No | Maximum number of emails to return. Default 10, max 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It only mentions search syntax, but does not disclose output format, error behavior, or whether results include full messages or metadata.
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 with no redundancy. Every word adds meaning.
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?
Lacks details on return format (e.g., fields, pagination) and how it differs from list_emails. No output schema, so description should provide more context.
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 baseline is 3. Description adds value by specifying query uses 'Gmail search syntax', which is essential for correct invocation.
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 clearly states verb (Search) and resource (Gmail messages) using specific syntax. Distinguishes from sibling tools like get_email (single) and list_labels.
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 search vs alternatives like list_emails or get_email. The description is minimally adequate but lacks contextual differentiation.
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.0.1- First observed
get_email - First observed
list_emails - First observed
list_labels - First observed
search_emails
TDQS
Scored across 4 tools
Each tool targets a distinct operation: reading a single email by ID, listing inbox messages, searching with Gmail syntax, and listing labels. There is no overlap in functionality.
All tool names follow the consistent verb_noun pattern in snake_case: get_email, list_emails, list_labels, search_emails.
With 4 tools, the set is concise and scoped to basic read and list operations. While it covers common use cases, it could be expanded with write operations, but the count is reasonable for a focused subset.
The tool surface lacks write operations such as sending, deleting, or modifying emails and labels. Users cannot perform actions beyond reading and listing, which is a significant gap for comprehensive Gmail management.
Maintenance
Related MCP Connectors
- MailowsOAuthcom.mailows
Give AI agents their own email inboxes: list, read and send mail via scoped, revocable OAuth grants.
Email for AI agents: read, search and send from your Gmail, Outlook, Yahoo, iCloud or IMAP inbox.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive Gmail integration with LLM processing capabilities, allowing users to read, search, filter emails and handle attachments through the Model Context Protocol.25 npm2MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables full management of Gmail accounts, including messages, threads, labels, and drafts. It leverages the Gmail API to allow searching, sending, and organizing emails via secure OAuth2 authentication.MIT
- FlicenseNot gradedqualityDmaintenanceProvides access to Gmail functionality through the Model Context Protocol, allowing LLMs like Claude to interact with your email.2-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Gmail through natural language, including search, read, send, label, and draft operations via the Model Context Protocol.-