Googledocmcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Googledocmcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
一个最小可运行的 MCP 项目骨架,先打通这条闭环:
google_doc_readgoogle_sheet_readobsidian_note_writeobsidian_sync_google_doc_ssotApache License 2.0. See LICENSE.
默认支持本地 credential 文件:
service_accountaccess_token如果使用 service_account,需要把目标 Google Doc / Google Sheet 分享给该服务账号邮箱。
google-service-account.json当前项目默认推荐用 service_account 做最小闭环,因为它最适合“本地放一个 credential 文件,然后 MCP 直接调用 Google Docs API”这种工作方式。
IAM & Admin -> Service Accounts。Create service account。Service account nameDescriptionDone,或者按需继续给它分配项目级角色。创建完成后,Google 会给这个 service account 分配一个邮箱,格式通常像:
your-service-account-name@your-project-id.iam.gserviceaccount.com后面你需要把目标 Google Doc 分享给这个邮箱。
Google Cloud 的创建向导里,Grant this service account access to project 这一步本身就是可选的。对我们这个项目当前的最小闭环来说,我建议这样选:
#### 推荐选择
Grant this service account access to project:不选任何角色,直接继续
Service account users role field:不填
Service account admins role field:不填
#### 为什么这样选
这个 MCP 当前只是:
这类访问更适合靠两件事来控制:
而不是一上来就给这个 service account 宽泛的项目级 IAM 角色。
#### 什么时候才需要在这里选角色
只有当你明确希望这个 service account 去访问你项目里的其他 Google Cloud 资源时,才需要在这一步给它加项目级 IAM 角色。比如它将来要访问 GCS、BigQuery、Cloud Run 之类的资源。
对于当前这个项目:
不需要在这里给项目角色
仍然通常不需要在这里给项目角色;更重要的是把目标 Google Doc 共享给这个 service account,并在本项目配置中把 scope 从只读切到可编辑
#### 你作为操作者自己需要的权限
这里要区分两类权限:
如果你是创建者,Google 官方列出的常见前置权限是:
Create Service Accounts / roles/iam.serviceAccountCreator
Project IAM Admin / roles/resourcemanager.projectIamAdmin
Service Account Key Admin / roles/iam.serviceAccountKeyAdmin
Service Usage Admin / roles/serviceusage.serviceUsageAdmin
如果公司策略禁止创建 service account key,你可能即使能创建 service account,也看不到 Create new key,这时需要管理员额外放开组织策略。
Service Accounts 页面里,点击你刚创建的 service account。Keys 标签页。Add key -> Create new key。JSON。Create。建议把下载下来的文件重命名为:
google-service-account.json然后放到仓库根目录下的:
secrets/google-service-account.json这样就能直接匹配当前默认配置。
确认 config/local.json 里这段路径是对的:
{
"google": {
"auth": {
"mode": "service_account",
"credentialPath": "../secrets/google-service-account.json"
}
}
}如果你把文件放在别的位置,改 credentialPath 就可以。
这一步很关键。
因为这个 MCP 之后是以 service account 身份访问 Google Docs API,所以如果目标文档本来不属于这个 service account,就需要把文档共享给它。
操作方式和给普通邮箱共享文档一样:
Share。Viewer 权限;如果后面要做写回,再给更高权限。如果不做这一步,最常见结果就是调用 API 时返回 403 PERMISSION_DENIED。
google-service-account.json 提交到 git。#### 看不到 Create new key
通常是以下几种原因:
先确认自己能进入该 service account 的 Keys 标签页。如果公司策略禁了 key,需要管理员放开,或者后面改成别的认证方案。
#### 已经有 key,但读 Google Doc 还是报 403
优先检查:
#### 报 404
通常检查:
直接编辑 config/local.json,或者参考 config/config.example.json:
默认凭据路径指向仓库根目录下的 secrets/google-service-account.json。
google_workspace MCP 加到 ~/.codex/config.toml如果你希望在 Codex 里直接把这个项目作为一个可调用的 MCP 使用,可以把它注册到全局 Codex 配置文件 ~/.codex/config.toml。
找到这个文件:
~/.codex/config.toml如果文件已经存在,就在里面追加一个新的 mcp_servers.google_workspace 配置块。
把下面内容加入 ~/.codex/config.toml:
[mcp_servers.google_workspace]
command = "/opt/homebrew/bin/node"
args = ["/absolute/path/to/GoogleDoc MCP/src/index.js"]
startup_timeout_sec = 30.0
tool_timeout_sec = 120.0
[mcp_servers.google_workspace.env]
GOOGLE_WORKSPACE_MCP_CONFIG = "/absolute/path/to/GoogleDoc MCP/config/local.json"上面这段配置里的 /absolute/path/to/GoogleDoc MCP 只是占位符。
请替换成你本机上这个项目的真实绝对路径,例如:
/Users/erik/Documents/GoogleDoc MCP请确认这几个路径在你机器上都成立:
command 指向你本机可用的 Node 可执行文件args 指向这个项目的 src/index.jsGOOGLE_WORKSPACE_MCP_CONFIG 指向这个项目的 config/local.json如果你的 Node 不在 /opt/homebrew/bin/node,可以先在终端里用 which node 找到真实路径,再替换掉这里的值。
config/local.json 已经可用这个 MCP 启动时会读取:
/absolute/path/to/GoogleDoc MCP/config/local.json你需要确保里面至少配置好了:
credentialPathscopes如果你使用 service_account,也要确认 credentialPath 对应的 JSON key 文件已经放好。
如果你要读取 Google Sheet,scopes 至少要包含:
[
"https://www.googleapis.com/auth/documents.readonly",
"https://www.googleapis.com/auth/spreadsheets.readonly"
]改完 ~/.codex/config.toml 后,建议直接重启 Codex App。
这样最稳妥,因为新加的 MCP server 一般需要在 Codex 重新启动后才会被完整加载。
重启后,你就可以在 Codex 里尝试调用这个 MCP 提供的工具,例如:
google_doc_readgoogle_sheet_readobsidian_note_writeobsidian_sync_google_doc_ssot如果工具能被识别,说明 google_workspace MCP 已经接入成功。
下面这些文件或目录默认不会提交到 git:
secrets/config/local.json.codex/.learnings/这样做是为了避免把 service account key、本机调试配置和私有运行痕迹一起推到远端仓库。
#### 配置改了,但 Codex 里还是看不到工具
优先检查:
~/.codex/config.toml 里的 TOML 语法是否正确command 的 Node 路径是否真实存在args 里的 src/index.js 路径是否正确GOOGLE_WORKSPACE_MCP_CONFIG 指向的 local.json 是否存在#### MCP 启动了,但调用 Google API 失败
优先检查:
credentialPath 是否正确google_sheet_read 支持这几种最小输入方式:
sheet 指定页签名gid 指定页签 idrange 指定 A1 区间示例:
{
"source": {
"url": "https://docs.google.com/spreadsheets/d/your-sheet-id/edit#gid=0"
}
}{
"source": {
"id": "your-sheet-id",
"sheet": "Sheet1",
"range": "A1:F20"
}
}返回结果里会包含:
titlesheetTitlesheetIdrequestedRangemarkdownplainTextrowsavailableSheetsnode src/index.js---
google_doc_ssot_url: https://docs.google.com/document/d/your-doc-id/edit
---
# 我的笔记
这里是我自己维护的内容,不会在同步时被覆盖。
## Google Doc SSOT Sync
<!-- google-doc-ssot:start -->
<!-- google-doc-ssot:end -->obsidian_sync_google_doc_ssot 只会更新 <!-- google-doc-ssot:start --> 和 <!-- google-doc-ssot:end --> 之间的内容。
append-only~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.