mcpField
U
Ultimate Google Docs & Drive MCP Server

Ultimate Google Docs & Drive MCP Server

本地服务
github.com/a-bonus记忆与知识6782 天前更新

关于 Ultimate Google Docs & Drive MCP Server

Ultimate Google Docs & Drive MCP Server 将 MCP 客户端连接到 Google Docs、Sheets、Drive、Gmail 和 Calendar。它提供内容读写、文件与邮件管理及日程操作工具,并支持本地授权或远程部署到 Cloud Run。

主要功能

  1. 01读取和编辑 Google Docs
  2. 02管理 Sheets 数据、格式和表格
  3. 03搜索并整理 Drive 文件
  4. 04读取、起草和发送 Gmail 邮件
  5. 05列出并管理 Calendar 日程
  6. 06创建和更新 Apps Script 项目

适用场景

  1. 01通过 MCP 客户端编辑文档和电子表格
  2. 02搜索 Drive 文件并创建文件夹
  3. 03整理收件箱、起草或发送 Gmail 邮件
  4. 04创建和更新 Calendar 日程

MCP 相关

该服务向 MCP 客户端提供操作 Google Docs、Sheets、Drive、Gmail、Calendar 和 Apps Script 的工具。它可在本地运行,也可部署到 Cloud Run 并使用 MCP OAuth 2.1。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"google-docs": {
"command": "npx",
"args": [
"-y",
"@a-bonus/google-docs-mcp"
]
}
}
}
启动命令npx -y @a-bonus/google-docs-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@a-bonus/google-docs-mcp

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Google Docs、Sheets、Drive、Gmail 和 Calendar MCP 服务

MCP Toplist

演示动画

将 Claude Desktop、Cursor 或任何 MCP 客户端连接到你的 Google Docs、Google Sheets、Google Drive、Gmail 和 Google Calendar。


快速入门

1. 创建 Google Cloud OAuth 客户端
  1. 前往 Google Cloud Console
  2. 创建或选择一个项目
  3. 启用 Google Docs API、Google Sheets API、Google Drive API、Gmail API 和 Google Calendar API
  4. 配置 OAuth 同意屏幕(选择 External,将你的邮箱添加为测试用户,并在 Docs/Sheets/Drive 范围之外添加 gmail.modify 和 calendar.events 范围)
  5. 创建 OAuth 客户端 ID(选择 Desktop app 类型)
  6. 从确认页面复制 Client ID 和 Client Secret

需要更多详情?请参阅本页底部的分步说明。

2. 授权
GOOGLE_CLIENT_ID="your-client-id" \
GOOGLE_CLIENT_SECRET="your-client-secret" \
npx -y @a-bonus/google-docs-mcp auth

这会在浏览器中打开 Google 授权页面。批准后,刷新令牌会保存到 ~/.config/google-docs-mcp/token.json。

3. 添加到 MCP 客户端

Claude Desktop / Cursor / Windsurf:

{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

MCP 客户端需要时,服务会自动启动。

远程部署(Cloud Run)

部署一次即可供团队使用——无需本地安装。该服务使用 MCP OAuth 2.1,因此 MCP 客户端会自动处理身份验证。

gcloud run deploy google-docs-mcp \
  --source . \
  --region europe-west3 \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "^|^MCP_TRANSPORT=httpStream|BASE_URL=https://your-service.run.app|GOOGLE_CLIENT_ID=...|GOOGLE_CLIENT_SECRET=...|TOKEN_STORE=firestore|JWT_SIGNING_KEY=your-secret-key"

然后,每位用户只需将 URL 添加到自己的 MCP 客户端——无需 npx、令牌或本地配置:

{
  "mcpServers": {
    "google-docs": {
      "type": "streamableHttp",
      "url": "https://your-service.run.app/mcp"
    }
  }
}

首次连接时,MCP 客户端会提示用户登录 Google。详情请参阅远程部署。


它能做什么?

适用于 Google Docs、Sheets 和 Drive 的工具:

Google Docs
Tool描述
readDocument以纯文本、JSON 或 Markdown 格式读取内容
appendText在文档末尾追加文本
insertText在指定位置插入文本
deleteRange按索引范围删除内容
modifyText替换、前置或转换文档中的文本
findAndReplace在文档中查找并替换文本
findElement定位文本出现位置(含索引范围),或列出段落/表格
listTabs列出多标签页文档中的所有标签页
addTab在文档中添加新标签页
renameTab重命名文档标签页
replaceDocumentWithMarkdown用 Markdown 替换整个文档内容
replaceRangeWithMarkdown用 Markdown 内容替换指定范围
appendMarkdown追加 Markdown 格式的内容
applyTextStyle设置粗体、斜体、颜色、字号和链接
applyParagraphStyle设置对齐方式、间距和缩进
insertTable创建空表格
insertTableWithData创建预填数据的表格
insertPageBreak插入分页符
insertSectionBreak插入分节符(NEXT_PAGE 或 CONTINUOUS)
updateSectionStyle更新分节样式:切换页面方向、调整页边距
insertImage从 URL 或本地文件插入图片
评论
工具描述
listComments查看所有评论及其作者和日期
getComment获取特定评论及其回复
addComment创建锚定到文本的评论
replyToComment回复现有评论
resolveComment将评论标记为已解决
deleteComment删除评论
建议

写入工具接受 suggestMode: true,可将编辑作为待审核建议应用, 而非直接编辑(需要 Node 22+;googleapis@184)。

工具描述
listSuggestions查看待处理建议及其作者、日期和 ID
manageSuggestions接受、拒绝或删除待处理的建议主题
Google Sheets
工具描述
readSpreadsheet读取指定范围(A1 表示法)中的数据
writeSpreadsheet将数据写入指定范围
batchWrite在一次调用中写入多个范围
appendRows向工作表添加行
clearRange清除单元格值
createSpreadsheet创建新的电子表格
addSheet添加工作表/标签页
deleteSheet移除工作表/标签页
duplicateSheet在同一电子表格中复制工作表
copySheetTo将工作表复制到另一个电子表格
renameSheet重命名工作表/标签页
getSpreadsheetInfo获取元数据和工作表列表
listSpreadsheets查找电子表格
formatCells设置范围内的粗体、颜色、对齐方式、垂直对齐方式和换行策略
copyFormatting将一个范围的格式复制到另一个范围
readCellFormat读取单元格范围的格式详情
setCellBorders设置各边框(上/下/左/右/内部)的样式和颜色
freezeRowsAndColumns固定标题行/列
setDropdownValidation为单元格添加/移除下拉列表
setColumnWidths以像素为单位设置列宽
setRowHeights以像素为单位设置行高
autoResizeColumns根据内容自动调整列宽
autoResizeRows根据内容自动调整行高
protectRange锁定范围或整个工作表(仅显示警告或完全锁定)
addConditionalFormatting添加条件格式规则
getConditionalFormatting列出条件格式规则及其索引(JSON)
deleteConditionalFormatting按索引删除条件格式规则
groupRows对行进行分组,以创建可折叠的部分
ungroupAllRows移除所有行分组
createSheetsComment创建电子表格评论,可选择附带指向特定单元格的直接链接
createSheetsCellNote创建附加到单元格或范围的原生单元格备注
insertChart根据数据创建图表
deleteChart移除图表
Google Sheets 表格
工具描述
createTable创建包含列类型的新命名表格
listTables列出电子表格或工作表中的所有表格
getTable按名称或 ID 获取详细的表格元数据
deleteTable删除表格(可选择清除数据)
updateTableRange修改表格维度(添加/删除行和列)
appendTableRows向表格追加行(按表格结构插入)
Google Drive
工具描述
listDocuments列出文档,可按日期筛选
searchDocuments按名称或内容搜索
getDocumentInfo获取文档元数据
createDocument创建新文档
createDocumentFromTemplate根据现有模板创建
createFolder创建文件夹
listFolderContents列出文件夹内容
getFolderInfo获取文件夹元数据
moveFile将文件移至其他文件夹
copyFile复制文件
renameFile重命名文件
deleteFile移至回收站或永久删除
listDriveFiles使用筛选条件列出 Drive 中的任意文件类型
searchDriveFiles按名称或内容搜索 Drive 中的所有文件
downloadFile下载文件内容
createMarkdownFile创建原生 Markdown(.md)文件
readMarkdownFile读取原生 .md 文件的原始源代码
updateMarkdownFile替换或追加 .md 文件的原始源代码
Gmail
工具描述
listMessages使用 Gmail 查询语法(is:unread、from:、newer_than: 等)列出或搜索邮件
getMessage获取单封邮件,包含解码后的标头、纯文本正文、HTML 正文和附件元数据
sendEmail发送纯文本邮件。支持抄送、密送,以及通过 replyToMessageId 发送带线程的回复
trashMessage将邮件移至垃圾箱(可撤销,效果与点击 Gmail 界面中的“删除”相同)
modifyMessageLabels为邮件添加或移除标签——可用于加星标、归档(移除 INBOX)、标记为已读(移除 UNREAD)
listLabels列出所有系统标签和自定义标签及其 ID
createDraft撰写草稿而非立即发送——适用于撰写/审核/发送工作流
listDrafts列出现有草稿及其收件人、主题和摘要
getDraft获取单封草稿的完整标头和正文
updateDraft替换现有草稿的内容(完整替换,而非补丁)
sendDraft按 ID 发送现有草稿
deleteDraft永久删除草稿(不会移至垃圾箱,而是彻底删除)
triageInbox组合工具: 获取未读邮件内容及启发式标记(简报、会议、待办),一次性完成收件箱分拣
Google Calendar
工具描述
listEvents使用 q、timeMin、timeMax、maxResults 列出或搜索日程(默认使用主日历)
createEvent创建日程,包含标题、开始/结束时间、描述、地点、参会者,以及可选的 Google Meet 链接
updateEvent类似 PATCH 的更新——仅更改传入的字段。可用于重新安排时间、更改标题或参会者
deleteEvent永久删除日程。可选的 sendUpdates 会向参会者发送取消通知
quickAddEvent使用自然语言创建日程:"Lunch with Sarah tomorrow 12pm"——其余内容由 Google 解析
Apps Script

自动化自动化流程:创建和编辑 Doc 或 Sheet 背后的 Apps Script,例如 onEdit 触发器、自定义菜单、定时任务,而不是让用户手动将代码粘贴到编辑器中。

工具说明
createAppsScriptProject创建项目,可通过 parentId 将其绑定到 Doc/Sheet/Slides/Form,并在同一次调用中写入初始文件
getAppsScriptContent读取项目文件——传入 includeSource: false 可快速列出文件,或传入 versionNumber 读取已保存的版本
updateAppsScriptContent写入文件。merge(默认值)会替换同名文件并保留其余文件;replace 会让项目内容完全等于你传入的文件

除常规设置外,还需要满足两项条件:

  1. 必须为每个 Google 账号启用 Apps Script API,网址为 https://script.google.com/home/usersettings——默认处于关闭状态;如果错误消息中包含 "Apps Script API",并返回 403 错误,就说明遗漏了此步骤。
  2. script.projects 范围,该范围已包含在 SCOPES 中。现有安装必须重新授权一次才能启用该范围。

使用示例

Google Docs
"Read document ABC123 as markdown"
"Append 'Meeting notes for today' to document ABC123"
"Make the text 'Important' bold and red in document ABC123"
"Replace the entire document with this markdown: # Title\n\nNew content here"
"Insert a 3x4 table at index 50 in document ABC123"
Google Sheets
"Read range A1:D10 from spreadsheet XYZ789"
"Write [[Name, Score], [Alice, 95], [Bob, 87]] to range A1 in spreadsheet XYZ789"
"Create a new spreadsheet titled 'Q1 Report'"
"Format row 1 as bold with a light blue background in spreadsheet XYZ789"
"Freeze the first row in spreadsheet XYZ789"
"Add a dropdown with options [Open, In Progress, Done] to range C2:C100"
"Create a table named 'Tasks' in range A1:D10 with columns: Task (TEXT), Status (DROPDOWN: 'Not Started','In Progress','Done'), Priority (NUMBER)"
"Add a medium solid border around A1:D10 in spreadsheet XYZ789"
"Protect the header row so collaborators can't accidentally edit it"
"Auto-fit row heights for rows 2–50 after wrapping text"
Google Drive
"List my 10 most recent Google Docs"
"Search for documents containing 'project proposal'"
"Create a folder called 'Meeting Notes' and move document ABC123 into it"
Gmail
"Show me my 20 most recent unread emails"
"Search Gmail for messages from [email protected] in the last 7 days"
"Read the full body of message ID 18c3f4a2b1d9"
"Send an email to [email protected] with the subject 'Weekly update' and this body..."
"Reply to message 18c3f4a2b1d9 with 'Thanks, confirmed.'"
"Star message 18c3f4a2b1d9 and archive it"
"Move message 18c3f4a2b1d9 to Trash"
"List all my Gmail labels"
"Draft a reply to that email but don't send it yet — let me review first"
"Show me my drafts, then send the one to bob@"
"Triage my unread inbox: tell me which 20 emails need attention and which are noise"
Google Calendar
"What's on my calendar this week?"
"Create an event titled 'Project review' tomorrow from 2pm to 3pm Pacific time"
"Quick add: lunch with Alex Friday 12:30"
"Reschedule event abc123 to next Monday at 10am"
"Delete the 'Standup' event tomorrow"
"List all events on my calendar between April 15 and April 22"
"Schedule a 30-minute meeting with [email protected] next Wednesday at 11am with a Google Meet link"
Markdown 工作流

该服务支持完整的 Markdown 往返工作流:

  1. 将文档读取为 Markdown:使用 readDocument 并设置 format='markdown'
  2. 在本地编辑 Markdown
  3. 推送更改:使用 replaceDocumentWithMarkdown

支持:标题、粗体、斜体、删除线、链接、项目符号列表/编号列表、水平分隔线。

实时 Docs 验证

此代码库包含针对真实 Google Docs API 的 cloneTable 实时集成测试,可选择启用。默认跳过该测试。

要求:

  • 有效的 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET
  • 已通过 npx -y @a-bonus/google-docs-mcp auth 存储授权令牌

运行方式:

GOOGLE_DOCS_LIVE_TESTS=1 npm run test:live:docs

此测试会创建临时源和目标 Google Docs,验证 cloneTable,然后删除测试文件。


远程部署

将服务集中部署到 Google Cloud Run(或任何容器托管平台),让团队无需本地安装即可使用。该服务使用 MCP OAuth 2.1 和 FastMCP 内置的 GoogleProvider——MCP 客户端会自动处理身份验证流程。

访问服务根 URL(/),查看设置说明和可直接复制的客户端配置。

环境变量
变量描述
MCP_TRANSPORT设置为 httpStream 以启用远程模式(默认值:stdio)
BASE_URL已部署服务的公开 URL(OAuth 重定向必需)
GOOGLE_CLIENT_IDOAuth 客户端 ID(Web 应用类型)
GOOGLE_CLIENT_SECRETOAuth 客户端密钥
MCP_TOOL_GROUPS可选的逗号分隔工具组列表,用于注册:docs、drive、sheets、utils、gmail、calendar、script 或 all
ALLOWED_DOMAINS允许访问的 Google Workspace 域名列表,以逗号分隔(可选)
PORTHTTP 端口(默认值:8080)
TOKEN_STORE设置为 firestore 以持久化存储令牌(默认值:内存)
JWT_SIGNING_KEY固定签名密钥,使令牌在重启后仍然有效(未设置时自动生成)
REFRESH_TOKEN_TTL刷新令牌有效期(秒)(默认值:2592000 / 30 天)
GCLOUD_PROJECTFirestore 的 GCP 项目 ID(当 TOKEN_STORE=firestore 时必需)
MCP_STATELESS设置为 true 以用于无服务器部署(Cloud Run 等)——禁用会话跟踪,以便在缩容至零后继续运行
GOOGLE_DOCS_MCP_DOWNLOAD_ROOTSdownloadFile 在 stdio 模式下可写入的目录,以 : 分隔(Windows 上为 ;)。默认为工作目录
GMAIL_ATTACHMENT_ROOTSGmail 草稿在 stdio 模式下可附加文件的目录,以 : 分隔(Windows 上为 ;)。未设置时禁用附件
设置
  1. 创建 GCP 项目并启用 Docs、Sheets 和 Drive API
  2. 创建 OAuth 客户端(Web 应用类型,而非 Desktop)
  3. 将授权重定向 URI 设置为 {BASE_URL}/oauth/callback
  4. 部署到 Cloud Run:
gcloud run deploy google-docs-mcp \
  --source . \
  --region europe-west3 \
  --port 8080 \
  --allow-unauthenticated \
  --set-env-vars "^|^MCP_TRANSPORT=httpStream|BASE_URL=https://your-service.run.app|ALLOWED_DOMAINS=yourdomain.com|GOOGLE_CLIENT_ID=...|GOOGLE_CLIENT_SECRET=...|TOKEN_STORE=firestore|JWT_SIGNING_KEY=your-secret-key"

注意: ^|^ 前缀会将环境变量分隔符从 , 改为 |,因为 ALLOWED_DOMAINS 包含逗号。

工作原理
  • 默认情况下,OAuth 会话存储在内存中,重启后会丢失
  • 用于生产环境时,设置 TOKEN_STORE=firestore 和 JWT_SIGNING_KEY,以便在重新部署和冷启动后持续进行身份验证
  • 在无服务器平台(Cloud Run 等)上,设置 MCP_STATELESS=true——MCP 会话保存在内存中,因此缩容至零会清除这些会话。无状态模式会完全禁用会话跟踪;每个请求都通过 JWT/Firestore 令牌流程独立进行身份验证
  • ALLOWED_DOMAINS 限制对特定 Google Workspace 域名的访问
  • 访问令牌会自动刷新;不活跃的会话会在 30 天后过期
  • 用户可随时通过 Google 账号权限撤销访问权限
更新部署

将更改合并到 main 不会自动更新你的 Cloud Run 服务。每次部署都是独立的——需要新功能或修复时,你必须手动重新部署。

更新方法:

  1. 拉取最新代码:

    git pull origin main
    
  2. 重新部署到 Cloud Run:

    gcloud run deploy your-service-name --source . --region your-region
    

    现有环境变量会保留——无需再次传入 --set-env-vars。

重新部署时机:

  • Bug 修复和安全补丁——尽快重新部署
  • 新功能——方便时重新部署
  • 破坏性更改——重新部署前查看发行说明

你可以在 发行页面 将当前版本与最新发行版进行比较。


身份验证选项

OAuth(默认)

将 Google Cloud OAuth 客户端凭据作为环境变量传入:

变量描述
GOOGLE_CLIENT_ID来自 Google Cloud Console 的 OAuth 客户端 ID
GOOGLE_CLIENT_SECRET来自 Google Cloud Console 的 OAuth 客户端密钥
服务账号(企业版)

适用于使用全域委派的 Google Workspace:

变量描述
SERVICE_ACCOUNT_PATH服务账号 JSON 密钥文件的路径
GOOGLE_IMPERSONATE_USER要模拟的用户邮箱(可选)
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "SERVICE_ACCOUNT_PATH": "/path/to/service-account-key.json",
        "GOOGLE_IMPERSONATE_USER": "[email protected]"
      }
    }
  }
}
令牌存储

OAuth 刷新令牌存储在 ~/.config/google-docs-mcp/token.json 中(遵循 XDG_CONFIG_HOME)。OAuth 客户端 ID 和客户端密钥不会存储在令牌文件中。要重新授权,请再次运行 auth 命令或删除令牌文件。

多个 Google 账号

设置 GOOGLE_MCP_PROFILE,将令牌存储在特定配置文件的子目录中。这样即可为不同项目使用不同的 Google 账号:

变量描述
GOOGLE_MCP_PROFILE用于隔离令牌存储的配置文件名称(可选)
{
  "mcpServers": {
    "google-docs": {
      "command": "npx",
      "args": ["-y", "@a-bonus/google-docs-mcp"],
      "env": {
        "GOOGLE_CLIENT_ID": "...",
        "GOOGLE_CLIENT_SECRET": "...",
        "GOOGLE_MCP_PROFILE": "work"
      }
    }
  }
}

令牌按配置文件存储:

~/.config/google-docs-mcp/
├── token.json              # default (no profile)
├── work/token.json         # GOOGLE_MCP_PROFILE=work
├── personal/token.json     # GOOGLE_MCP_PROFILE=personal

未设置 GOOGLE_MCP_PROFILE 时,行为保持不变。


已知限制

  • 评论锚定: 通过程序创建的评论会显示在评论列表中,但在 Google Docs 界面中不会明显锚定到文本。这是 Google Drive API 的限制。
  • Sheets 评论锚定: 通过 API 创建的电子表格评论可以存储锚定元数据,但 Google Workspace 编辑器会将 Drive API 锚点视为未锚定评论。使用 createSheetsComment 并设置 includeCellLink=true,可获取指向目标单元格的可点击链接;如果需要将审阅文字附加到单元格本身,则使用 createSheetsCellNote。
  • 评论解决状态: 在 Google Docs 界面中,已解决状态可能无法保留。
  • 转换后的文档: 从 Word 转换而来的 Docs 可能不支持所有 API 操作。
  • Markdown 图片: Markdown 到 Docs 的转换目前尚不支持图片。
  • 深层嵌套列表: 嵌套层级达到 3 层或以上的列表可能会出现格式问题。
  • Gmail 永久删除: trashMessage 会将邮件移至垃圾箱(可撤销)。永久删除需要更广泛的 https://mail.google.com/ scope,且 v0.1 尚未提供此功能。
  • Gmail 附件: getMessage 会返回附件元数据,但目前尚不下载附件内容。
  • Gmail 发送 HTML 邮件: sendEmail 仅发送纯文本。若要使用 HTML 正文,请将 HTML 粘贴到 body 字段中——内容将以文本形式发送,而不会被渲染。
  • Calendar scope: calendar.events 允许对现有日历中的事件执行 CRUD 操作,但无法创建或删除整个日历。
  • Apps Script API 默认关闭: 每个账号都必须在 https://script.google.com/home/usersettings 手动启用一次。工具无法代为开启。
  • Apps Script 部署: 工具可以编辑项目源代码。目前尚未提供创建版本、部署和可安装触发器的功能——onEdit 和 onOpen 等简单触发器无需这些功能即可运行。
  • Calendar 定期事件: updateEvent 和 deleteEvent 会修改整个定期事件系列,除非你使用 listEvents(设置 singleEvents=true)返回的特定实例 ID 作为目标。

故障排除

  • 服务无法启动:
    • 确认已在 MCP 配置的 env 块中设置 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET。
    • 尝试手动运行:npx @a-bonus/google-docs-mcp,并检查 stderr 中是否有错误。
  • 授权错误:
    • 确认已在 Google Cloud Console 中启用 Docs、Sheets、Drive、Gmail 和 Calendar API。
    • 确认 OAuth 同意屏幕中已将你的电子邮件地址列为测试用户,并已添加所有必需的范围(Docs、Sheets、Drive、gmail.modify、calendar.events)。
    • 重新授权:npx @a-bonus/google-docs-mcp auth
    • 如果正在升级,请删除 ~/.config/google-docs-mcp/token.json 并重新授权——Gmail 和 Calendar 范围是在较新版本中添加的,因此现有令牌必须刷新。
    • 远程(Cloud Run)用户必须先在 MCP 客户端中退出登录,再重新登录,以便 Google 使用新的范围列表重新征求同意。
  • 标签页错误:
    • 使用 listTabs 查看可用的标签页 ID。
    • 对于单标签页文档,请省略 tabId。
  • 远程部署中通过 OAuth 登录时,claude.ai 显示“找不到页面”:
    • 现象:点击自定义 MCP 连接器上的“连接”后,进入 Claude 的“找不到页面”页面,而不是 Google 登录页面。
    • 原因:Cloud Run 冷启动。对闲置服务的首次请求会在容器完成启动前超时,Claude 随后会将失败的重定向导向其 404 页面。
    • 解决方法:强制刷新页面(macOS 上按 Cmd+Shift+R,Windows/Linux 上按 Ctrl+Shift+R)。第二次请求会命中已启动的实例,OAuth 流程便会正常继续。
    • 永久解决方法:在 Cloud Run 服务上设置 --min-instances=1,以确保始终有一个实例处于预热状态(gcloud run services update <service> --region <region> --min-instances=1)。内存预留费用约为每月 $2–3。
  • 重新部署后意外要求重新认证(远程部署):
    • 原因:JWT_SIGNING_KEY 会在每次容器启动时自动生成,因此重新部署会使之前颁发的所有会话失效。
    • 解决方法:在 Cloud Run 服务上设置稳定的 JWT_SIGNING_KEY 环境变量,使其在重启后保持不变:gcloud run services update <service> --region <region> --update-env-vars JWT_SIGNING_KEY=$(openssl rand -hex 32)。此更改后创建的会话在之后的重新部署中仍会有效。
  • **多个 MCP 会话导致 CPU 使用率过高:**某些客户端会非常频繁地调用 tools/list。否则,FastMCP 会在每次请求时为每个工具重新计算 JSON Schema,这可能导致每个进程占满一个 CPU 核心。此服务会在 stdio 启动前预先计算一次负载,并将 tools/list 处理程序替换为缓存快照。如果负载仍持续偏高,请使用 sample <pid> 1 10(macOS)或 node --cpu-prof 采集几秒钟的数据并报告问题。

Google Cloud 设置详情

Google Cloud Console 分步说明

对于远程部署,请创建类型为 Web application 的 OAuth 客户端(而非 Desktop app)。仅在本地 stdio 用法中使用 Desktop app。

  1. 前往 Google Cloud Console: 打开 console.cloud.google.com
  2. 创建或选择项目: 点击项目下拉菜单 > “NEW PROJECT”。为项目命名(例如,“MCP Docs Server”),然后点击“CREATE”。
  3. 启用 API:
    • 前往 “APIs & Services” > “Library”
    • 搜索并启用:Google Docs API、Google Sheets API、Google Drive API、Gmail API、Google Calendar API
  4. 配置 OAuth 同意屏幕:
    • 前往 “APIs & Services” > “OAuth consent screen”
    • 选择 “External”,然后点击“CREATE”
    • 填写:应用名称、用户支持邮箱、开发者联系邮箱
    • 点击“SAVE AND CONTINUE”
    • 添加范围:documents、spreadsheets、drive、gmail.modify、calendar.events
    • 点击“SAVE AND CONTINUE”
    • 将你的 Google 邮箱添加为测试用户
    • 点击“SAVE AND CONTINUE”
  5. 创建凭据:
    • 前往 “APIs & Services” > “Credentials”
    • 点击“+ CREATE CREDENTIALS” > “OAuth client ID”
    • 应用类型:“Desktop app”
    • 点击“CREATE”
    • 复制 Client ID 和 Client Secret

贡献

欢迎贡献!有关开发环境设置、架构概述和指南,请参阅 CONTRIBUTING.md。

许可证

MIT —— 详情请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。