使用说明
Gmail MCP服务器
A. 模型上下文协议 (MCP)服务器,为AI助手提供只读的Gmail访问权限,如 克劳德代码.内置Java 21使用官方 MCP Java SDK.
特性
| 工具 | 说明 |
|---|---|
list_emails |
使用可选查询和标签过滤器列出最近的电子邮件 |
read_email |
通过邮件ID读取电子邮件的完整内容(包括附件元数据) |
search_emails |
使用搜索电子邮件 Gmail搜索语法 |
get_attachment |
根据邮件ID和附件索引获取附件内容 |
list_labels |
列出所有Gmail标签 |
所有访问权限均为 只读 (GMAIL_READONLY 范围)。服务器无法发送、修改或删除电子邮件。
附件是通过以下方式发现的 read_email (其中包括 attachments 带有元数据的数组),并通过以下方式单独获取 get_attachment:
- 文本附件 (
text/*)内联返回解码内容 - 图片附件 (
image/*,最多10MB)以内联方式返回ImageContent用于视觉分析 - 其他二进制附件 (PDF、文档等)保存到
~/.gmail-mcp/attachments/<messageId>/并返回文件路径
先决条件
- Java 21+
- Maven 3.6+
- 启用Gmail API的谷歌云项目
- OAuth 2.0凭据(桌面应用程序类型)
设置
1.谷歌云凭据
- 去 Google 云控制台
- 创建项目(或选择现有项目)
- 启用 Gmail API 在API和服务下
- 首选 凭证 > 创建凭据 > OAuth客户端ID
- 选择 桌面应用程序 作为应用程序类型
- 下载JSON文件并将其另存为
~/.gmail-mcp/client_secret.json
2.建造
git clone https://github.com/wrxck/gmail-mcp.git
cd gmail-mcp
mvn clean package
这会产生一个超级罐子 target/gmail-mcp-1.3.0.jar.
3.身份验证
java -jar target/gmail-mcp-1.3.0.jar --auth
这将打开您的浏览器以获得Google OAuth同意。授权后,凭据将保存到 ~/.gmail-mcp/tokens/ 并在到期时自动刷新。你只需要做一次。
4.用克劳德代码注册
claude mcp add --scope user --transport stdio gmail -- \
java -jar /path/to/gmail-mcp-1.3.0.jar
重新启动克劳德代码。4个Gmail工具将立即可用。
用法示例
一旦注册,你可以问克劳德:
- “查看我最近的电子邮件”
- “搜索来自的电子邮件john@example.com关于项目建议书”
- “阅读电子邮件
<message-id>" - “我有什么标签?”
- “在我的收件箱中查找本周以来的未读电子邮件”
安全
电子邮件内容是不受信任的第三方数据,直接返回到LLM的上下文中。恶意电子邮件可能包含旨在操纵代理采取意外行动的文本。此服务器应用了深度防御缓解措施:
- 随机内容边界 --每个工具响应都会生成一个加密随机的边界字符串(通过
SecureRandom).不受信任的字段(from,subject,snippet,body,filename,content)用这个边界包裹,这样LLM就可以区分电子邮件数据和系统结构。由于边界是不可预测的,攻击者无法将其嵌入电子邮件中以逃离内容区域。 - 安全背景序言 --每个电子邮件工具响应都包含一个前导文本块,解释边界标记并指示LLM将有界内容仅视为数据。
- 工具描述警告 --The
list_emails,read_email,search_emails,以及get_attachment工具说明明确警告返回的内容不受信任。 - 车身截断 --超过50000个字符的电子邮件正文将被截断
[TRUNCATED]指示器,以防止超大有效载荷压倒上下文。附件内容被截断为100000个字符。 - 类型化附件处理 —
text/*附件内联返回解码内容。image/*附件(最大10 MB)将作为返回ImageContent用于视觉分析。所有其他二进制附件都保存到~/.gmail-mcp/attachments/使用经过净化的文件名,并返回文件路径。对电子邮件中的文件名进行净化,以防止路径遍历攻击。
建筑
Claude Code <--stdio (JSON-RPC)--> gmail-mcp.jar <--HTTPS--> Gmail API
|
~/.gmail-mcp/
client_secret.json
tokens/StoredCredential
- 运输:stdio(Claude Code将服务器作为子进程生成)
- OAuth:
GoogleAuthorizationCodeFlow随着FileDataStoreFactory处理令牌持久性和自动刷新 - 日志记录:所有日志都转到stderr(stdout保留给MCP JSON-RPC)
配置
凭据存储在 ~/.gmail-mcp/ 具有受限权限(rwx------):
~/.gmail-mcp/
client_secret.json # OAuth client credentials (you provide this)
tokens/ # Stored OAuth tokens (auto-managed)
StoredCredential
attachments/ # Saved binary attachments (auto-managed, rwx------)
<messageId>/
<sanitized-filename>
发展
# Build
mvn clean package
# Run tests
mvn test
# Run auth flow
java -jar target/gmail-mcp-1.3.0.jar --auth
# Run server (blocks on stdio — use with Claude Code or an MCP client)
java -jar target/gmail-mcp-1.3.0.jar
项目结构
src/main/java/com/gmail/mcp/
GmailMcpServer.java # Main class, MCP tool definitions
GmailAuth.java # OAuth flow, credential management
GmailClient.java # Gmail API wrapper
ContentSanitizer.java # Prompt injection mitigations
src/test/java/com/gmail/mcp/
ContentSanitizerTest.java # Boundary wrapping, truncation, sanitization
ResponsePipelineTest.java # End-to-end response pipeline (email vs label tools)
GmailClientTest.java # HTML stripping, base64 decoding, body extraction
GmailMcpServerTest.java # Argument parsing