使用说明
🚀 Google Drive MCP服务器
生产准备就绪 模型上下文协议(MCP)服务器 适用于Google Drive的运营 OAuth2多用户支持使用AI编码助手(OpenCode、Cline、Cursor等)通过自然语言管理Google Drive文件。
🤔 什么是MCP?
MCP(模型上下文协议)是一种标准化协议,允许AI工具与外部服务通信。你可以告诉你的人工智能助手:
- “列出我的Google Drive文件”
- “将此报告上载到驱动器”
- “在我的驱动器中查找所有PDF”
人工智能将自动使用MCP工具!
✨ 特性
-
6谷歌云端硬盘操作 通过MCP:
工具 说明 list_files列出带分页的文件 upload_file上传文件(大文件可自动恢复) download_file下载文件(100MB+的流媒体) delete_file永久删除文件 search_files全文+姓名搜索 get_file_metadata获取文件详细信息 -
多用户OAuth2身份验证:
- 用户使用自己的Google帐户进行身份验证
- 每个用户都可以单独访问自己的驱动器
- 自动令牌刷新
- 基于会话的身份验证
-
混合身份验证(可选):
- OAuth2(推荐):每用户身份验证
- 服务帐户:向后兼容的单帐户模式
-
生产就绪:
- ✅ 具有抖动的指数回退(速率限制弹性)
- ✅ 承载令牌身份验证(API_KEY或会话令牌)
- ✅ 健康检查端点(
/health,/ready) - ✅ OAuth令牌的SQLite数据库
- ✅ Docker多阶段构建
- ✅ 部署到零配置渲染
🚀 快速开始
先决条件
- Python 3.11+
- 谷歌云平台帐户(免费)
- Git
选项1:OAuth2(推荐)
用户使用自己的Google帐户进行身份验证。
第一步:设置Google OAuth(10分钟)
- 首选 谷歌云控制台
- 创建或选择项目
- 启用Google Drive API:搜索“Google Drive API”→ 启用
- 创建OAuth凭据:
- 转到API和服务→ 凭证
- 点击“创建凭据”→ OAuth客户端ID
- 应用程序类型: 网络应用程序
- 授权重定向URI:
https://yourdomain.com/auth/callback - 授权的JavaScript来源:
https://yourdomain.com
- 复制 客户端ID 和 客户端密钥
步骤2:生成加密密钥
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
步骤3:运行服务器
# Clone
git clone https://github.com/himanshu231204/google-drive-mcp.git
cd google-drive-mcp
# Create virtual environment
python -m venv venv
# Windows: venv\Scripts\activate
# Mac/Linux: source venv/bin/activate
# Install
pip install -r requirements.txt
# Set environment variables
export GOOGLE_CLIENT_ID="your-client-id"
export GOOGLE_CLIENT_SECRET="your-client-secret"
export GOOGLE_REDIRECT_URI="https://yourdomain.com/auth/callback"
export ENCRYPTION_KEY="your-encryption-key-from-step-2"
# Run
uvicorn app.main:app --host 0.0.0.0 --port 10000 --reload
选项2:服务帐户(旧版)
为所有用户使用单个服务帐户(所有用户共享相同的驱动器访问权限)。
步骤1:获取谷歌服务帐户(5分钟)
- 首选 console.cloud.google.com
- 创建或选择项目
- 启用Google Drive API:搜索“Google Drive API”→ 启用
- 创建服务帐户:
- IAM和管理员→ 服务账户→ 创建
- 姓名:
google-drive-mcp→ 创建→ 继续→ Done
- 创建JSON密钥:单击服务帐户→ Keys → 添加关键点→ JSON
📁 重要:将Drive文件夹与您的服务帐户电子邮件共享(例如。,
google-drive-mcp@project.iam.gserviceaccount.com)这样它就可以访问它们。
步骤2:运行服务器
# Set environment variables
export GOOGLE_CREDENTIALS_JSON='{"type":"service_account",...}' # One line!
export API_KEY="your-secure-key"
# Run
uvicorn app.main:app --host 0.0.0.0 --port 10000 --reload
🔌 如何使用AI助手
OpenCode
添加到您的 .opencode/config.json:
{
"mcpServers": {
"GoogleDrive": {
"type": "remote",
"url": "https://your-server.onrender.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_SESSION_TOKEN"
}
}
}
}
Cline/Cursor/其他MCP客户端
{
"mcpServers": {
"google-drive": {
"url": "https://your-server.onrender.com/mcp",
"type": "remote",
"auth": {
"type": "bearer",
"token": "YOUR_SESSION_TOKEN"
}
}
}
}
OAuth登录流程
- 访问
/auth/login获取OAuth授权URL - 用户重定向到谷歌并授权
- Google重定向到
/auth/callback带有身份验证码 - 服务器交换令牌代码并设置会话cookie
- 在MCP请求中使用会话令牌
AI提示示例
连接后,尝试以下提示:
"Can you list the files in my Google Drive?"
"Please upload this document to my Drive, folder 'Reports'"
"Find all PDF files in my Drive that contain 'invoice'"
"Download the file with ID abc123 and tell me its size"
"Can you get the metadata for that presentation file?"
🧪 测试MCP服务器
健康检查
curl http://localhost:10000/health
OAuth状态
curl http://localhost:10000/auth/status
直接MCP工具调用
curl -X POST http://localhost:10000/mcp \
-H "Authorization: Bearer YOUR_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_files",
"arguments": {}
}
}'
API文档
访问http://localhost:10000/docs用于交互式API文档。
🌐 部署以渲染(免费)
一键部署
- 将代码推送到GitHub
- 首选 render.com/new
- 选择“Web服务”
- 连接您的GitHub仓库
- 配置:
- 运行时:Python 3.11
- 生成命令:
pip install -r requirements.txt - 启动命令:
uvicorn app.main:app --host 0.0.0.0 --port $PORT
- 添加环境变量:
对于OAuth2:
GOOGLE_CLIENT_ID=您的OAuth客户端IDGOOGLE_CLIENT_SECRET=您的OAuth客户端密钥GOOGLE_REDIRECT_URI=https://your-app.onrender.com/auth/callbackENCRYPTION_KEY=您的Fernet加密密钥
对于服务帐户(可选):
GOOGLE_CREDENTIALS_JSON=您的服务帐户JSONAPI_KEY=您的安全密钥
- 部署!
📚 MCP工具参考
列表文件
按页码列出文件夹中的文件。
list_files(folder_id: str = None, page_size: int = 50, page_token: str = None)
上传文件
上传文件(大文件可自动恢复)。
upload_file(file_path: str, folder_id: str = None, resumable: bool = True)
下载文件
下载文件(大于100MB的文件流)。
download_file(file_id: str, output_path: str = None)
删除文件
永久删除文件。
delete_file(file_id: str)
搜索文件
按名称或内容搜索文件。
search_files(query: str, limit: int = 50)
获取_文件_元数据
获取详细的文件信息。
get_file_metadata(file_id: str)
🔐 OAuth API端点
| 端点 | 方法 | 描述 |
|---|---|---|
/auth/login |
GET | 获取OAuth授权URL |
/auth/callback |
GET | 处理OAuth回调 |
/auth/logout |
POST | 注销当前用户 |
/auth/me |
GET | 获取当前用户信息 |
/auth/status |
GET | 检查身份验证状态 |
⚙️ 环境变量
OAuth2模式(推荐)
| 变量 | 必填 | 描述 |
|---|---|---|
GOOGLE_CLIENT_ID |
✅ 是 | 来自谷歌云控制台的OAuth客户端ID |
GOOGLE_CLIENT_SECRET |
✅ 是 | OAuth客户端密钥 |
GOOGLE_REDIRECT_URI |
✅ 是 | OAuth回调URL |
ENCRYPTION_KEY |
✅ 是 | 用于加密令牌的Fernet密钥(使用生成 python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())") |
PORT |
无 | 服务器端口(默认值:10000) |
LOG_LEVEL |
否 | 调试、信息、警告、错误 |
CORS_ORIGINS |
否 | 允许使用逗号分隔的起源 |
服务帐户模式(传统)
| 变量 | 必填 | 描述 |
|---|---|---|
GOOGLE_CREDENTIALS_JSON |
✅ 是 | 服务帐户JSON(一行) |
API_KEY |
✅ 是 | 用于身份验证的承载令牌 |
PORT |
无 | 服务器端口(默认值:10000) |
LOG_LEVEL |
否 | 调试、信息、警告、错误 |
CORS_ORIGINS |
否 | 允许使用逗号分隔的起源 |
🐛 故障排除
| 错误 | 修复 |
|---|---|
GOOGLE_CLIENT_ID not set |
在环境中设置OAuth凭据 |
ENCRYPTION_KEY not set |
生成方式 python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" |
GOOGLE_CREDENTIALS_JSON not set |
设置服务帐户JSON(服务帐户模式) |
401 Unauthorized |
检查承载头中的会话令牌或API_KEY |
OAuth callback error |
检查GOOGLE_REDIRECT_URI是否与谷歌云控制台匹配 |
403 Permission denied |
对于服务帐户:与服务帐户电子邮件共享驱动器文件夹 |
429 Too Many Requests |
等待;服务器自动重试并回退 |
📁 项目结构
google-drive-mcp/
├── app/
│ ├── main.py # FastAPI app entry point
│ ├── mcp_server.py # FastMCP 6 tools
│ ├── drive_service.py # Google Drive API wrapper
│ ├── auth.py # Service account auth
│ ├── schemas.py # Pydantic models
│ ├── utils.py # Helpers
│ ├── oauth/
│ │ ├── handlers.py # OAuth2 logic
│ │ └── routes.py # OAuth endpoints
│ └── database/
│ ├── models.py # SQLAlchemy models
│ └── __init__.py # Database session
├── tests/ # 69 unit tests
│ └── test_oauth.py # OAuth tests
├── .github/workflows/ # CI/CD
├── requirements.txt # Dependencies
├── Dockerfile # Container build
├── render.yaml # Render config
└── README.md # This file
🤝 贡献
看 贡献.md 如何做出贡献。
📄 许可证
MIT许可证-请参阅 许可证.
👤 作者
希曼舒 (@himanshu231204)
内置于 ❤️ 使用Python+快速API+快速MCP+OAuth2
