Google Drive Files Mcp

io.github.zayansalman由 GitHub 账号 zayansalman 发布v0.3.0更新于 Oct 24, 2026

Minimal MCP server for Google Drive file management and Google Sheets editing.

概览

AI 生成的概览

让助手移动、上传和整理 Google Drive 文件,并就地编辑 Google 表格和文档内容。

可以做什么
这是一个本地 MCP 服务器兼命令行工具,提供 23 个单一用途工具,覆盖 Google Drive、表格和文档。Drive 工具可搜索、创建文件夹、真正移动文件,并通过可续传上传本地文件(含大型二进制文件)。表格工具可读取、写入、追加、清除、批量写入、管理标签页、冻结窗格,并设置格式、列宽和行高。文档工具可读取带字符索引的文本,并进行范围限定的替换、插入、删除和追加编辑,不影响其他格式。
适用场景
当托管版 Google Drive 连接器不够用时适合使用:需要真正的移动而非复制、需要上传本地二进制文件,或需要就地编辑表格单元格和文档文本。它适合从 MCP 客户端整理 Drive 文件夹,并对表格和文档做精确、可审计的编辑。
运行要求
以 Python 包形式(pip 或 uv 安装)通过 stdio 在本地运行,仅限桌面端。需要一个启用 Drive API 的 Google Cloud 项目(表格和文档工具还需启用相应 API)、OAuth 桌面客户端密钥 JSON,以及一次浏览器授权。通过 GDRIVE_FILES_MCP_CREDENTIALS、GDRIVE_FILES_MCP_TOKEN 和 GDRIVE_FILES_MCP_SCOPES 配置;不附带任何 API 密钥。
安装前请注意
移动任意文件需要完整的 drive 权限范围,即对所有 Drive 文件的读写删除权限;GDRIVE_FILES_MCP_TOKEN 指向的缓存令牌应视同密码,最好与只读工具隔离。写入会改动真实数据:sheets_clear、sheets_delete_tab 和 docs_delete_range 具有破坏性;真正的移动会把文件从当前文件夹移除,除非设置 keep_existing_parents。全部在本地运行,无托管方案。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Google Drive Files Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

google-drive-files-mcp

A focused Model Context Protocol server (and standalone CLI) for Google Drive file management (move, upload, organize), Google Sheets editing (cells, rows, tabs, format), and surgical Google Docs editing (replace a phrase, insert at an anchor, delete a range — leaving all other formatting untouched). Twenty-three granular, single-purpose tools — each an explicit operation, with writes returning before/after or precise indices so nothing changes silently.

Built because the hosted Google Drive connectors can search, read, and copy files, but cannot move them (copy duplicates a file with a new ID rather than relocating it), cannot reliably upload a real binary (their inline-content API needs the bytes embedded as base64, which breaks for large/binary files), and cannot edit spreadsheet or document contents in place. This server adds a true move, a resumable upload from a local path, folder creation, a full set of Google Sheets edits, and range-scoped Google Docs edits — for any MCP client (Claude Code, Claude Desktop, Cursor, Cline, etc.).

Tools

Drive — files & folders

  • drive_search(query, only_folders=False, max_results=20) — find files/folders (and their IDs).
  • drive_create_folder(name, parent=None) — create a folder (parent accepts an ID, URL, root, or an unambiguous folder name).
  • drive_move(file, dest_folder, keep_existing_parents=False) — true move (removed from its current folder); keep_existing_parents=True adds without removing.
  • drive_upload_file(local_path, parent=None, name=None, mime_type=None) — upload a local file (any type, incl. large binaries) via a resumable media upload. Stored as-is (no Google-format conversion).

Google Sheets — read, edit, structure, format

  • sheets_get_info(spreadsheet) — list tabs + sizes (call first to learn tab names).
  • sheets_read(spreadsheet, range_a1, render_option="FORMATTED_VALUE") — read a range (FORMULA/UNFORMATTED_VALUE available).
  • sheets_write(spreadsheet, range_a1, values, value_input_option="USER_ENTERED") — overwrite a range; returns before. USER_ENTERED parses numbers and makes =SUM(..) a formula; RAW writes literally.
  • sheets_append(spreadsheet, range_a1, values, ...) — append rows after a table.
  • sheets_clear(spreadsheet, range_a1) — clear values (keeps formatting); returns before.
  • sheets_batch_write(spreadsheet, updates, ...) — write many ranges atomically.
  • sheets_add_tab / sheets_rename_tab / sheets_delete_tab — manage tabs (delete is destructive).
  • sheets_freeze_panes(spreadsheet, tab, rows=None, cols=None) — freeze/unfreeze header rows/cols (0 = explicitly unfreeze; omit = untouched).
  • sheets_format(spreadsheet, range_a1, number_format=None, bold=None, background=None, wrap=None) — number pattern / bold / #RRGGBB background / text wrap.
  • sheets_set_column_width(spreadsheet, range_a1, pixel_size) — set column width in pixels for a whole-column range (e.g. 'A:C').
  • sheets_set_row_height(spreadsheet, range_a1, pixel_size) — set row height in pixels for a whole-row range (e.g. '2:5').

Google Docs — surgical in-place editing

Every Docs edit is range-scoped (documents.batchUpdate), so it changes exactly what you target and leaves every other run's native formatting byte-for-byte intact.

  • docs_get_info(document) — title + structure (paragraph/table counts, end index).
  • docs_read(document) — full text with per-segment character indices (table cells include row/col). Read this first to target edits.
  • docs_replace_text(document, find, replace, match_case=False) — replace a phrase everywhere; surrounding content/formatting untouched.
  • docs_insert_text(document, text, index=None, after_text=None, before_text=None) — insert at an index or right after/before an anchor phrase.
  • docs_delete_range(document, start_index, end_index) — delete one precise range.
  • docs_append_text(document, text) — append at the end.

No rename/copy/trash/delete of files (copy already exists in the hosted Drive connector); destructive ops (sheets_clear, sheets_delete_tab, docs_delete_range) are their own explicit tools so you control exactly when they run.

Scope warning (read this)

Moving an existing arbitrary file requires the full drive scope — read/write/delete on all your Drive files. There is no narrower scope that can change a file's parents (drive.file only covers files the app itself created). This tool is therefore far more powerful than a read-only connector. Treat its cached token like a password (stored 0600), and prefer an isolated OAuth client/token rather than sharing one with read-only tools.

Install

bash
pip install google-drive-files-mcp# or: uv tool install google-drive-files-mcp

One-time setup (~10 min)

  1. Google Cloud Console → create/pick a project.
  2. Enable the Drive API (link); for the Sheets tools also enable the Sheets API (link); for the Docs tools also enable the Docs API (link). (The full drive scope already authorizes the Sheets and Docs APIs — no extra consent, just enable each API you want.)
  3. OAuth consent screen → Internal (Workspace; no verification needed even for the restricted full-drive scope) or External + add yourself as a test user (personal Gmail).
  4. Credentials → OAuth client ID → Desktop app → download JSON.
  5. google-drive-files-mcp setup --import-credentials ~/Downloads/client_secret_*.json → consent in the browser.

Verify:

bash
google-drive-files-mcp statusgoogle-drive-files-mcp search "Reports" --folders

Claude Code

bash
claude mcp add --scope user google-drive-files google-drive-files-mcp -- serve

Find my "Q2 Report" doc and move it into the "2026 Reports" folder.

Claude Desktop

json
{  "mcpServers": {    "google-drive-files": { "command": "google-drive-files-mcp", "args": ["serve"] }  }}

CLI

bash
google-drive-files-mcp search "budget"                 # find a file + its IDgoogle-drive-files-mcp search "Reports" --folders      # find destination foldersgoogle-drive-files-mcp mkdir "2026 Reports"            # create a foldergoogle-drive-files-mcp move <file-url-or-id> "2026 Reports"   # move into it (by folder name)google-drive-files-mcp move <file-url-or-id> root      # move back to My Drive rootgoogle-drive-files-mcp upload ~/Downloads/report.zip --parent "2026 Reports"   # upload a local file
# Google Sheetsgoogle-drive-files-mcp sheet-info  <sheet-url-or-id>                 # list tabs + sizesgoogle-drive-files-mcp sheet-read  <sheet-url-or-id> "Sheet1!A1:D10" # read a rangegoogle-drive-files-mcp sheet-write <sheet-url-or-id> "Sheet1!B2:B4" '[[100],[200],[300]]'   # set numbersgoogle-drive-files-mcp sheet-format <sheet-url-or-id> "Sheet1!B2:B4" --number-format '#,##0.00' --boldgoogle-drive-files-mcp sheet-format <sheet-url-or-id> "Sheet1!A1:B2" --wrap             # wrap textgoogle-drive-files-mcp sheet-freeze-panes <sheet-url-or-id> Sheet1 --rows 1             # freeze header rowgoogle-drive-files-mcp sheet-set-column-width <sheet-url-or-id> "Sheet1!A:C" 150        # column width (px)google-drive-files-mcp sheet-set-row-height <sheet-url-or-id> "Sheet1!2:5" 40           # row height (px)
# Google Docs (surgical, in-place)google-drive-files-mcp doc-read    <doc-url-or-id>                       # text + character indicesgoogle-drive-files-mcp doc-replace <doc-url-or-id> "old phrase" "new phrase"   # preserves all other formattinggoogle-drive-files-mcp doc-insert  <doc-url-or-id> $'\n\nNew paragraph.' --after "some anchor text"

drive_move returns the before/after parents so the move is auditable:

json
{ "id": "1Abc…", "name": "Q2 Report", "moved_from": ["0OldFolderId"], "moved_to": "1NewFolderId", "parents_now": ["1NewFolderId"], "web_view_link": "https://docs.google.com/…" }

Configuration

VariableDefaultWhat
GDRIVE_FILES_MCP_CREDENTIALS~/.config/google-drive-files-mcp/credentials.jsonOAuth client secret
GDRIVE_FILES_MCP_TOKEN~/.config/google-drive-files-mcp/token.jsonCached refresh token
GDRIVE_FILES_MCP_SCOPEShttps://www.googleapis.com/auth/driveOAuth scopes (comma-separated)

Safety notes

  • True move removes the file from its current folder. Drive items can have multiple parents; keep_existing_parents=True adds without removing.
  • Folder-name destinations must be unambiguous. If two folders share a name, drive_move refuses and lists the candidates so you can pass an explicit ID.
  • The before/after parents are returned on every move so an agent (or you) can verify the result.

Troubleshooting

HttpError 403: Google Drive API has not been used in project … or it is disabled Enable the Drive API on the project that owns your OAuth client: console.cloud.google.com/apis/library/drive.googleapis.com → Enable, then wait ~1 min and retry. (This is the single most common first-run error.)

multiple folders named '…'; pass the folder ID/URL instead Two or more of your folders share that name, so a name is ambiguous. Run google-drive-files-mcp search "<name>" --folders to get the IDs and pass the exact one.

no folder named '…' found Create it first (google-drive-files-mcp mkdir "<name>") or pass a folder ID/URL/root.

HttpError 403: insufficientFilePermissions when moving Either the token lacks the full drive scope — re-authorize with google-drive-files-mcp setup --reauth — or you don't have edit rights on the file/destination (you can't move a file someone else owns unless they've granted you edit access).

No valid Google token from Claude Desktop / cron The first consent needs a browser. Run google-drive-files-mcp setup once in a terminal; later headless runs reuse and auto-refresh the cached token.

A move "removed" a file from a shared folder unexpectedly A true move removes the item from its current parent(s). If you meant to also keep it where it was, use keep_existing_parents=true (CLI --keep).

Use it from other clients (Cursor, Cline, Continue, …)

Any stdio MCP client works — see docs/other-clients.md.

Authentication — bring your own Google OAuth client

There are no API keys and no shipped secrets. The server authenticates to your Google account with an OAuth client you create, and caches a refresh token locally. The author has zero access to your data.

  • Why your own client? Google's restricted scopes (here, the full drive scope) can't be redistributed in a shared app, and an unverified shared app is capped at 100 users. "Bring your own OAuth client" is the standard pattern for personal-data MCP servers.
  • What you need: a free Google Cloud project, the Drive API enabled, an OAuth consent screen, and a Desktop OAuth client. Full walkthrough → docs/setup-google-oauth.md.
  • Where your token lives: ~/.config/google-drive-files-mcp/token.json (mode 0600). Delete it to revoke locally; revoke fully at myaccount.google.com/permissions.
  • No hosted/SaaS option — everything runs locally; your Drive data never touches a third-party server.

More guides

Related tools

Part of a small family of focused, local MCP servers for Google Workspace data the hosted connectors don't expose:

They can share one OAuth login or stay isolated — see each repo's setup.

License

MIT. See LICENSE.

来源:README.md,提交 3f99054

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.3.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分