使用说明
Google Drive MCP服务器
A. 模型上下文协议(MCP) 使用限制功能提供安全Google Drive访问的服务器 drive.file OAuth作用域——服务器只能访问它创建的文件或用户通过内置的Google Picker显式选择的文件。它永远无法访问用户驱动器的其余部分。
运作原理
MCP Client (Claude Code, etc.)
│
│ JSON-RPC (stdio or HTTP)
▼
Google Drive MCP Server
├── /mcp → MCP protocol endpoint
├── / → Login + Picker web UI
└── /oauth/callback → OAuth redirect handler
│
│ Google Drive API v3 (drive.file scope)
▼
Google Drive
(permitted files only)
两种运输方式:
- 标准 --用于将服务器作为子进程启动的本地MCP客户端(例如Claude Desktop)。通过手动OAuth代码流进行身份验证。
- 超文本传输协议 --公开服务器
http://localhost:PORT/mcp,再加上基于浏览器的登录和选择器UIhttp://localhost:PORT。这是交互式使用的推荐模式。
先决条件
- Node.js 18+
- 启用了Drive API的Google Cloud项目
- OAuth 2.0凭据(桌面应用程序类型)
谷歌云设置
- 首选 Google 云控制台
- 创建或选择项目
- 启用 Google Drive API 在...之下 API和服务→ 图书馆
- 在下创建凭据 API和服务→ 凭证:
- 点击 创建凭据→ OAuth 2.0客户端ID
- 应用程序类型: 桌面应用程序
- 复制 客户端ID 和 客户端密钥
- 在...之下 API和服务→ OAuth同意屏幕:
- 将您的Google帐户电子邮件添加为 测试用户 (应用程序的发布状态为“测试”时需要)
安装
# From archive
tar -xzf google-drive-mcp-server.tar.gz
cd google-drive-mcp-server
# Install dependencies
npm install
# Build
npm run build
配置
复制 .env.example 到 .env 并设置您的凭据:
cp .env.example .env
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
# Transport: 'http' (recommended) or 'stdio'
TRANSPORT=http
# Port for HTTP transport (default: 3000)
PORT=3000
OAuth令牌会自动保存到 .tokens.json 首次登录后。在后续启动时,服务器会重新加载它们-- 您只需要验证一次.
跑步
npm start
HTTP模式(推荐)
打开 http://localhost:3000.
第一轮:
- 打开
http://localhost:3000在浏览器中 - 点击 通过 Google 登录 --您将被重定向到谷歌并自动返回
- 选择器加载--选择您希望MCP服务器访问的任何文件
- 完成。MCP工具现在可以访问这些文件
后续运行: 令牌从以下位置加载 .tokens.json,直接降落在选择器上。
stdio模式
TRANSPORT=stdio npm start
在MCP客户端中:调用 gdrive_authenticate 要获取身份验证URL,请让用户访问它,然后将重定向URL中的代码传递给 gdrive_set_credentials.
开发(热重载)
npm run dev
用途 tsx watch 用于在文件更改时自动重新启动服务器。
这 drive.file 范围和选择器
此服务器使用 https://www.googleapis.com/auth/drive.file --最严格的驱动范围:
| 可以访问 | 无法访问 |
|---|---|
| 此应用程序创建的文件 | 用户驱动器中的任何其他文件 |
| 通过Google选择器选择的文件 | 来自其他应用程序的文件 |
选择器 是授予对现有文件访问权限的机制。当用户通过Picker UI选择文件时,Google的后端注册该OAuth客户端可以访问该文件。后续驱动器API调用该文件成功。
重要实施细节: 选择器需要 setAppId 设置为Google Cloud项目编号(客户端ID的数字前缀)。否则,文件访问权限将无法正确注册。服务器会自动从 GOOGLE_CLIENT_ID.
MCP工具参考
关于人类行为工具的说明:
gdrive_authenticate和gdrive_open_picker返回需要人在浏览器中打开的URL。LLM无法点击URL——始终将其转发给用户。
认证
| 工具 | 模式 | 描述 |
|---|---|---|
gdrive_authenticate |
全部 | 返回登录说明。在HTTP模式下:指示用户 http://localhost:PORT。在stdio模式下:返回一个Google OAuth URL,并指示用户将代码传递给 gdrive_set_credentials. |
gdrive_set_credentials |
仅限stdio | 用OAuth代码交换令牌。 在HTTP模式下不需要 --浏览器回调会自动处理此问题。 |
文件访问
| 工具 | 说明 |
|---|---|
gdrive_open_picker |
返回选择器URL(http://localhost:PORT).仅限HTTP模式。用户必须打开它并选择文件,然后其他工具才能访问这些文件。 |
读取操作
| 工具 | 说明 |
|---|---|
gdrive_list_files |
列出可访问的文件。支持分页(page_token),排序(order_by),并按父文件夹进行筛选。 |
gdrive_search_files |
使用可选的MIME类型和文件夹过滤器按名称搜索可访问的文件。 |
gdrive_get_file |
获取文件的元数据和可选的文本内容。支持谷歌文档(纯文本)、表格(CSV)、幻灯片(纯文本”)和常规文本/JSON文件。 |
写入操作
| 工具 | 说明 |
|---|---|
gdrive_create_file |
创建一个包含可选文本内容的新文件。创建的文件可以在没有选择器的情况下立即访问。 |
gdrive_create_folder |
创建一个新文件夹。 |
gdrive_update_file |
更新文件的名称、文本内容和/或父文件夹。 |
gdrive_copy_file |
复制文件,可以选择重命名或将其放置在其他文件夹中。 |
gdrive_delete_file |
永久删除 一个文件。首先获取名称,以便确认显示已删除的内容。 |
所有列表/搜索工具支持 response_format: "markdown" (默认,人类可读)或 "json" (结构化、机器可读)。所有工具归还 structuredContent 用于MCP客户端的编程访问。
项目结构
src/
├── index.ts # MCP tool registration, Express routes, transport setup
├── constants.ts # Shared constants (OAuth scopes, limits, MIME type map)
├── types.ts # TypeScript interfaces (FileMetadata, FileListResult, etc.)
├── schemas/
│ ├── input-schemas.ts # Zod input schemas for all tool parameters
│ └── output-schemas.ts # Zod output schemas for tool structured responses
├── services/
│ ├── drive-service.ts # OAuth2 client, token persistence, Drive API wrapper
│ └── utils.ts # Formatting helpers, error handling, query builder
└── tests/
└── utils.test.ts # Unit tests for utility functions
已生成/git忽略的文件:
dist/--编译的JavaScript输出.env--凭据和传输配置.tokens.json--保存的OAuth令牌(首次登录后自动创建)
运行测试
npm test
使用Node.js内置测试运行器(node:test).测试涵盖 buildSearchQuery, truncateText,以及 formatError 包括404错误中的查询注入保护和Picker引导等边缘情况。
使用Claude Desktop进行配置
增添 ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"google-drive": {
"command": "node",
"args": ["/absolute/path/to/google-drive-mcp-server/dist/index.js"],
"env": {
"GOOGLE_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
"GOOGLE_CLIENT_SECRET": "your-client-secret",
"TRANSPORT": "stdio"
}
}
}
}
安全说明
.env和.tokens.json这两个git都被忽略了吗?永远不要提交它们drive.file是特权最低的驱动器范围;谷歌不需要应用程序验证- 服务器仅绑定到
localhost--它不打算暴露在互联网上 - OAuth令牌包括刷新令牌,并在重新启动时重新加载;删除
.tokens.json强制重新身份验证 - 驱动器API搜索查询中的MIME类型和名称值是单引号转义的,以防止查询注入
