使用说明
Google Drive MCP服务器
A. 模型上下文协议(MCP) 提供与Google Drive API无缝集成的服务器。该服务器使AI助手和其他MCP客户端能够与Google Drive交互,允许他们列出、搜索、创建、删除和共享文件。
特性
✨ OAuth 2.0身份验证 -使用Google Drive API进行安全身份验证
📁 文件管理 -列出、搜索、创建和删除文件
🔗 文件共享 -与特定用户共享文件或将其公开
📊 驱动信息 -获取存储配额和用户信息
🔍 高级搜索 -使用Google Drive强大的查询语法搜索文件
目录
先决条件
在使用此MCP服务器之前,您需要:
- Python 3.11或更高版本
- 谷歌云项目 启用Google Drive API
- OAuth 2.0凭据 对于桌面应用程序
- 紫外线 -Python包管理器(安装指南)
OAuth设置
按照以下步骤为Google Drive API设置OAuth凭据:
1.创建谷歌云项目
- 首选 谷歌云控制台
- 点击“选择项目”→ “新项目”
- 输入项目名称,然后单击“创建”
2.启用Google Drive API
- 在Google Cloud控制台中,导航到 API和服务 → 图书馆
- 搜索“Google Drive API”
- 点击它并按“启用”
或者,使用此直接链接: 启用Google Drive API
3.配置OAuth同意屏幕
- 首选 API和服务 → OAuth同意屏幕
- 选择 外部 用户类型(如果使用谷歌工作区,则为内部)
- 点击“创建”
- 填写所需信息:
- 应用程序名称:选择一个名称(例如“Google Drive MCP服务器”)
- 用户支持电子邮件:您的电子邮件地址
- 开发人员联系信息:您的电子邮件地址
- 点击“保存并继续”
- 上 范围 在页面上,单击“添加或删除范围”
- 添加以下范围:
https://www.googleapis.com/auth/drive(查看和管理文件)https://www.googleapis.com/auth/drive.file(查看和管理特定文件)
- 点击“更新”,然后点击“保存并继续”
- 上 测试用户 页面,添加您的Google帐户电子邮件
- 点击“保存并继续”
- 查看并单击“返回仪表板”
4.创建OAuth 2.0凭据
- 首选 API和服务 → 凭证
- 点击“创建凭据”→ “OAuth客户端ID”
- 选择 桌面应用程序 作为应用程序类型
- 输入名称(例如,“Google Drive MCP客户端”)
- 点击“创建”
- 将出现一个对话框,其中包含您的客户端ID和密码
- 点击“下载JSON”
- 将下载的文件另存为
credentials.json在您的项目目录中
安装
- 克隆或下载此存储库:
cd /path/to/google_drive_mcp
- 使用安装依赖项
uv:
uv sync
这将:
- 创建虚拟环境
- 安装所有必需的依赖项
- 设置开发包
配置
-
放置您的OAuth凭据:
- 复制
credentials.json您从谷歌云控制台下载的文件 - 重要提示: 把它放在 项目根目录 (与同级别
pyproject.toml):<folder_path>/google_drive_mcp/ ├── credentials.json # ← Your OAuth credentials go HERE ├── src/ ├── pyproject.toml └── ... - MCP服务器从该目录运行,因此凭据必须在此处
- 复制
-
首次身份验证:
- 服务器首次访问Google云端硬盘(非启动期间)
- 当您首次使用资源或工具时,浏览器窗口将打开
- 使用您的Google帐户登录
- 授予请求的权限
- A.
token.json文件将在项目根目录中自动创建 - 未来的运行将使用此令牌(不需要浏览器弹出窗口)
-
运作原理:
- 服务器初始化 没有 检查凭据(快速启动)
- OAuth仅在您实际使用Google Drive功能时发生
- 这可以防止MCP客户端连接期间出现超时错误
[!警告] 永不承诺
credentials.json或token.json版本控制! 这些文件包含敏感的身份验证数据。它们已经在.gitignore.
用法
独立运行服务器
要独立测试服务器,请执行以下操作:
uv run google-drive-mcp
或者使用Python模块语法:
uv run python -m google_drive_mcp
使用MCP客户端运行
该服务器旨在与Claude Desktop、IDE或自定义应用程序等MCP客户端一起使用。看 MCP客户端集成 了解详情。
可用资源
资源提供对Google Drive数据的只读访问:
| 资源URI | 描述 |
|---|---|
drive://files |
列出Google Drive中的文件(前20个包含元数据的文件) |
drive://about |
获取用户信息和存储配额 |
drive://file/{file_id} |
获取特定文件的详细元数据 |
资源使用示例
列出文件:
Resource: drive://files
Returns: List of files with names, IDs, types, modification dates, and links
获取驱动器信息:
Resource: drive://about
Returns: User email, display name, and storage usage/quota
可用工具
工具支持写操作和高级功能:
1. search_files
使用Google Drive的查询语法搜索文件。
参数:
query(字符串,必填):搜索查询page_size(整数,可选):结果数量(默认值:10)
示例查询:
name contains 'report'
mimeType = 'application/pdf'
modifiedTime > '2024-01-01T00:00:00'
'parent_folder_id' in parents
fullText contains 'meeting notes'
2. create_file
在Google云端硬盘中创建新文件或文件夹。
参数:
name(字符串,必填):文件或文件夹名称mime_type(字符串,必填):MIME类型parent_id(字符串,可选):父文件夹ID
常见MIME类型:
- 文件夹:
application/vnd.google-apps.folder - 谷歌文档:
application/vnd.google-apps.document - 谷歌表格:
application/vnd.google-apps.spreadsheet - 谷歌幻灯片:
application/vnd.google-apps.presentation
例子:
{
"name": "My New Folder",
"mime_type": "application/vnd.google-apps.folder"
}
3. delete_file
从Google云端硬盘删除文件。
参数:
file_id(string,必填):要删除的文件的ID
例子:
{
"file_id": "1abc123def456ghi789"
}
4. share_file
与用户共享文件或将其公开。
参数:
file_id(字符串,必填):要共享的文件IDemail(字符串,可选):电子邮件地址(用户/组类型需要)role(字符串,必填):权限级别-reader,writer,或ownertype(字符串,必填):权限类型-user,group,domain,或anyone
示例:
与特定用户共享:
{
"file_id": "1abc123def456ghi789",
"email": "colleague@example.com",
"role": "writer",
"type": "user"
}
使公众可读:
{
"file_id": "1abc123def456ghi789",
"role": "reader",
"type": "anyone"
}
MCP客户端集成
克劳德桌面版
将此服务器添加到您的Claude Desktop配置中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"google-drive": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/google_drive_mcp",
"run",
"google-drive-mcp"
]
}
}
}
替换 /absolute/path/to/google_drive_mcp 与这个项目的实际路径。
其他MCP客户端
对于自定义MCP客户端,请使用stdio传输:
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(
command="uv",
args=[
"--directory",
"/path/to/google_drive_mcp",
"run",
"google-drive-mcp"
],
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List available resources
resources = await session.list_resources()
# Call a tool
result = await session.call_tool("search_files", {
"query": "name contains 'report'"
})
身份验证流程
OAuth 2.0身份验证流程的工作原理如下:
-
首次运行:
- 服务器检查
token.json - 如果未找到,请检查
credentials.json - 通过浏览器启动OAuth流
- 用户登录并授予权限
- 服务器接收授权码
- 交换访问令牌和刷新令牌的代码
- 将令牌保存到
token.json
- 服务器检查
-
后续运行:
- 服务器从加载凭据
token.json - 使用现有访问令牌
- 如果过期,则使用刷新令牌自动刷新
- 更新
token.json使用新的访问令牌
- 服务器从加载凭据
-
令牌到期时间:
- 访问令牌将在约1小时后过期
- 刷新令牌是长期有效的(直到被撤销)
- 服务器自动处理令牌刷新
故障排除
错误:“超过上下文截止日期”(MCP客户端超时)
原因: 当MCP服务器初始化时间过长时,通常在第一次连接尝试期间,会发生此错误。
解决方案:
- 服务器已更新,将OAuth身份验证推迟到实际需要时
- 确保
credentials.json位于项目根目录中:<folder_path>/google_drive_mcp/credentials.json - 如果您已经拥有有效
token.json,服务器应立即连接 - 如果这是你第一次:
- 服务器将成功连接
- OAuth仅在您首次使用Google Drive资源或工具时才会触发
- 浏览器将在此时打开(而不是在服务器启动期间)
- 放置凭据后重新启动MCP客户端
错误:“找不到凭据文件'Credentials.json'”
解决方案: 从谷歌云控制台下载OAuth凭据并放置 credentials.json 在项目根目录中。看 OAuth设置.
错误:“token.json文件存储无效凭据”
解决方案: 删除 token.json 并重新认证:
rm token.json
uv run google-drive-mcp
错误:“拒绝访问”或“权限不足”
解决方案:
- 删除
token.json - 确保OAuth同意屏幕包括所需的范围
- 出现提示时重新进行身份验证
OAuth同意屏幕显示“未经验证的应用程序”警告
解决方案: 这对于处于测试模式的应用程序来说是正常的。点击“高级”→ “转到[应用程序名称](不安全)”继续。对于生产用途,请提交您的应用程序进行谷歌验证。
错误:“redirect_uri_mismatch”
解决方案: 确保您的OAuth客户端配置为“桌面应用程序”类型,而不是“Web应用程序”。
服务器已启动,但MCP客户端无法连接
解决方案:
- 验证MCP客户端配置中的绝对路径
- 确保
uv已安装并位于您的PATH中 - 检查一下
credentials.json位置正确 - 尝试手动运行服务器以测试身份验证
发展
项目结构
google_drive_mcp/
├── src/
│ └── google_drive_mcp/
│ ├── __init__.py # Package initialization
│ ├── __main__.py # Entry point
│ └── server.py # Main server implementation
├── credentials.json # OAuth credentials (not in repo)
├── token.json # OAuth tokens (not in repo)
├── pyproject.toml # Project configuration
├── .python-version # Python version
├── .gitignore # Git ignore rules
└── README.md # This file
添加新功能
要添加新工具或资源,请执行以下操作:
-
添加新工具 在
server.py:- 在中添加工具定义
handle_list_tools() - 在中实现处理程序
handle_call_tool() - 添加相应的方法(例如。,
_my_new_tool())
- 在中添加工具定义
-
添加新资源 在
server.py:- 在中添加资源定义
handle_list_resources() - 在中实现处理程序
handle_read_resource() - 添加相应的方法(例如。,
_get_my_resource())
- 在中添加资源定义
测试
以独立模式运行服务器进行测试:
uv run google-drive-mcp
依赖项
由管理的核心依赖项 uv:
mcp-模型上下文协议SDKgoogle-api-python-client-Google Drive API客户端google-auth-httplib2-用于身份验证的HTTP库google-auth-oauthlib-OAuth 2.0流实现
安全说明
🔒 重要安全注意事项:
-
凭证保护:
- 从不分享
credentials.json或token.json - 默认情况下,git会忽略这些文件
- 将它们安全地存储在本地计算机上
- 从不分享
-
范围限制:
- 默认情况下,服务器使用完整的驱动器访问范围
- 对于生产,考虑使用更严格的范围
- 修改
SCOPES在server.py限制访问
-
OAuth应用程序验证:
- 处于测试模式的应用程序有用户限制(通常为100)
- 为了更广泛地分发,请提交谷歌验证
- 未经验证的应用程序向用户显示安全警告
-
令牌管理:
- 令牌以纯文本形式存储在本地
- 对于生产,考虑加密存储
- 根据需要实施代币轮换政策
资源
许可证
此项目按原样提供,用于模型上下文协议。
支持
关于以下问题: