Google Drive文件管理服务器

一个基于Model Context Protocol (MCP)的服务器,提供与Google Drive API的无缝集成,支持文件列表、搜索、创建、删除和分享等功能。

  • by brijchavda
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 brijchavda/google-drive-mcp

使用说明

Google Drive MCP服务器

A. 模型上下文协议(MCP) 提供与Google Drive API无缝集成的服务器。该服务器使AI助手和其他MCP客户端能够与Google Drive交互,允许他们列出、搜索、创建、删除和共享文件。

特性

✨ OAuth 2.0身份验证 -使用Google Drive API进行安全身份验证
📁 文件管理 -列出、搜索、创建和删除文件
🔗 文件共享 -与特定用户共享文件或将其公开
📊 驱动信息 -获取存储配额和用户信息
🔍 高级搜索 -使用Google Drive强大的查询语法搜索文件

目录

先决条件

在使用此MCP服务器之前,您需要:

  1. Python 3.11或更高版本
  2. 谷歌云项目 启用Google Drive API
  3. OAuth 2.0凭据 对于桌面应用程序
  4. 紫外线 -Python包管理器(安装指南)

OAuth设置

按照以下步骤为Google Drive API设置OAuth凭据:

1.创建谷歌云项目

  1. 首选 谷歌云控制台
  2. 点击“选择项目”→ “新项目”
  3. 输入项目名称,然后单击“创建”

2.启用Google Drive API

  1. 在Google Cloud控制台中,导航到 API和服务 → 图书馆
  2. 搜索“Google Drive API”
  3. 点击它并按“启用”

或者,使用此直接链接: 启用Google Drive API

3.配置OAuth同意屏幕

  1. 首选 API和服务 → OAuth同意屏幕
  2. 选择 外部 用户类型(如果使用谷歌工作区,则为内部)
  3. 点击“创建”
  4. 填写所需信息:
    • 应用程序名称:选择一个名称(例如“Google Drive MCP服务器”)
    • 用户支持电子邮件:您的电子邮件地址
    • 开发人员联系信息:您的电子邮件地址
  5. 点击“保存并继续”
  6. 上 范围 在页面上,单击“添加或删除范围”
  7. 添加以下范围:
    • https://www.googleapis.com/auth/drive (查看和管理文件)
    • https://www.googleapis.com/auth/drive.file (查看和管理特定文件)
  8. 点击“更新”,然后点击“保存并继续”
  9. 上 测试用户 页面,添加您的Google帐户电子邮件
  10. 点击“保存并继续”
  11. 查看并单击“返回仪表板”

4.创建OAuth 2.0凭据

  1. 首选 API和服务 → 凭证
  2. 点击“创建凭据”→ “OAuth客户端ID”
  3. 选择 桌面应用程序 作为应用程序类型
  4. 输入名称(例如,“Google Drive MCP客户端”)
  5. 点击“创建”
  6. 将出现一个对话框,其中包含您的客户端ID和密码
  7. 点击“下载JSON”
  8. 将下载的文件另存为 credentials.json 在您的项目目录中

安装

  1. 克隆或下载此存储库:
cd /path/to/google_drive_mcp
  1. 使用安装依赖项 uv:
uv sync

这将:

  • 创建虚拟环境
  • 安装所有必需的依赖项
  • 设置开发包

配置

  1. 放置您的OAuth凭据:

    • 复制 credentials.json 您从谷歌云控制台下载的文件
    • 重要提示: 把它放在 项目根目录 (与同级别 pyproject.toml):
      <folder_path>/google_drive_mcp/
      ├── credentials.json          # ← Your OAuth credentials go HERE
      ├── src/
      ├── pyproject.toml
      └── ...
      
    • MCP服务器从该目录运行,因此凭据必须在此处
  2. 首次身份验证:

    • 服务器首次访问Google云端硬盘(非启动期间)
    • 当您首次使用资源或工具时,浏览器窗口将打开
    • 使用您的Google帐户登录
    • 授予请求的权限
    • A. token.json 文件将在项目根目录中自动创建
    • 未来的运行将使用此令牌(不需要浏览器弹出窗口)
  3. 运作原理:

    • 服务器初始化 没有 检查凭据(快速启动)
    • 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 (字符串,必填):要共享的文件ID
  • email (字符串,可选):电子邮件地址(用户/组类型需要)
  • role (字符串,必填):权限级别- reader, writer,或 owner
  • type (字符串,必填):权限类型- 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身份验证流程的工作原理如下:

  1. 首次运行:

    • 服务器检查 token.json
    • 如果未找到,请检查 credentials.json
    • 通过浏览器启动OAuth流
    • 用户登录并授予权限
    • 服务器接收授权码
    • 交换访问令牌和刷新令牌的代码
    • 将令牌保存到 token.json
  2. 后续运行:

    • 服务器从加载凭据 token.json
    • 使用现有访问令牌
    • 如果过期,则使用刷新令牌自动刷新
    • 更新 token.json 使用新的访问令牌
  3. 令牌到期时间:

    • 访问令牌将在约1小时后过期
    • 刷新令牌是长期有效的(直到被撤销)
    • 服务器自动处理令牌刷新

故障排除

错误:“超过上下文截止日期”(MCP客户端超时)

原因: 当MCP服务器初始化时间过长时,通常在第一次连接尝试期间,会发生此错误。

解决方案:

  1. 服务器已更新,将OAuth身份验证推迟到实际需要时
  2. 确保 credentials.json 位于项目根目录中: <folder_path>/google_drive_mcp/credentials.json
  3. 如果您已经拥有有效 token.json,服务器应立即连接
  4. 如果这是你第一次:
    • 服务器将成功连接
    • OAuth仅在您首次使用Google Drive资源或工具时才会触发
    • 浏览器将在此时打开(而不是在服务器启动期间)
  5. 放置凭据后重新启动MCP客户端

错误:“找不到凭据文件'Credentials.json'”

解决方案: 从谷歌云控制台下载OAuth凭据并放置 credentials.json 在项目根目录中。看 OAuth设置.

错误:“token.json文件存储无效凭据”

解决方案: 删除 token.json 并重新认证:

rm token.json
uv run google-drive-mcp

错误:“拒绝访问”或“权限不足”

解决方案:

  1. 删除 token.json
  2. 确保OAuth同意屏幕包括所需的范围
  3. 出现提示时重新进行身份验证

OAuth同意屏幕显示“未经验证的应用程序”警告

解决方案: 这对于处于测试模式的应用程序来说是正常的。点击“高级”→ “转到[应用程序名称](不安全)”继续。对于生产用途,请提交您的应用程序进行谷歌验证。

错误:“redirect_uri_mismatch”

解决方案: 确保您的OAuth客户端配置为“桌面应用程序”类型,而不是“Web应用程序”。

服务器已启动,但MCP客户端无法连接

解决方案:

  1. 验证MCP客户端配置中的绝对路径
  2. 确保 uv 已安装并位于您的PATH中
  3. 检查一下 credentials.json 位置正确
  4. 尝试手动运行服务器以测试身份验证

发展

项目结构

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

添加新功能

要添加新工具或资源,请执行以下操作:

  1. 添加新工具 在 server.py:

    • 在中添加工具定义 handle_list_tools()
    • 在中实现处理程序 handle_call_tool()
    • 添加相应的方法(例如。, _my_new_tool())
  2. 添加新资源 在 server.py:

    • 在中添加资源定义 handle_list_resources()
    • 在中实现处理程序 handle_read_resource()
    • 添加相应的方法(例如。, _get_my_resource())

测试

以独立模式运行服务器进行测试:

uv run google-drive-mcp

依赖项

由管理的核心依赖项 uv:

  • mcp -模型上下文协议SDK
  • google-api-python-client -Google Drive API客户端
  • google-auth-httplib2 -用于身份验证的HTTP库
  • google-auth-oauthlib -OAuth 2.0流实现

安全说明

🔒 重要安全注意事项:

  1. 凭证保护:

    • 从不分享 credentials.json 或 token.json
    • 默认情况下,git会忽略这些文件
    • 将它们安全地存储在本地计算机上
  2. 范围限制:

    • 默认情况下,服务器使用完整的驱动器访问范围
    • 对于生产,考虑使用更严格的范围
    • 修改 SCOPES 在 server.py 限制访问
  3. OAuth应用程序验证:

    • 处于测试模式的应用程序有用户限制(通常为100)
    • 为了更广泛地分发,请提交谷歌验证
    • 未经验证的应用程序向用户显示安全警告
  4. 令牌管理:

    • 令牌以纯文本形式存储在本地
    • 对于生产,考虑加密存储
    • 根据需要实施代币轮换政策

资源

许可证

此项目按原样提供,用于模型上下文协议。

支持

关于以下问题: