萨瓦🦉
一 MCP服务器 这就提供了代理编码工具,如 克劳德代码 亲自访问您的谷歌工作区——日历、电子邮件、任务、文档以及您信任的其他任何内容。
以欧亚鹰鸮命名。静静地看着你的文档,把建议放在重要的地方,甚至知道如何使用谷歌文档的“暗示”模式——谷歌自己的API 还是做不到 经过十年的礼貌请求。
它做什么
阅读(基于API)
| 工具 | 说明 |
|---|---|
read_doc | 阅读任何文件:谷歌文档、谷歌表格、Word(.docx)、Excel(.xlsx)、PDF |
list_files | 列出Sava在Google云端硬盘上可访问的所有文件 |
write_sheet | 写入谷歌表格(A1符号) |
文档编辑(基于剧作家)
所有文档交互都经过无头Playwright浏览器自动化。这是唯一一种在原生谷歌文档和 .docx 文件处于兼容模式。
| 工具 | 说明 |
|---|---|
suggest_edit | 创建跟踪建议(建议模式)——绿色添加,红色删除线删除 |
anchor_comment | 在特定文本上突出显示评论 |
list_comments | 列出UI中可见的所有评论和建议 |
delete_all_comments | 删除Sava撰写的所有评论 |
suggest_edit 是建议更改的首选方式。使用 anchor_comment 仅适用于不能作为文本替换表达的注释、问题或解释。
已知限制
- Google Docs API无法创建建议 — 自2016年以来已知萨瓦与剧作家合作解决了这个问题。
- Google Docs API无法锚定评论 --内部
kix.*段落ID 未暴露萨瓦使用剧作家。 - 驱动器API注释在上不可见
.docx文件 -API默默地接受它们,但它们不会在GoogleDocs兼容模式下呈现。Sava使用Playwright进行所有评论/建议交互。 - 谷歌的教程弹出窗口 (“欢迎使用Office编辑”、“编辑可以查看您的视图历史记录”等)可以阻止Playwright。Sava在页面加载时忽略了这些,但新的弹出窗口类型可能需要更新。
- 编剧工具速度较慢 (约15-30秒),因为它们启动了无头浏览器。
日历
| 工具 | 说明 |
|---|---|
list_calendars | 列出主要用户可见的所有日历 |
list_events | 列出即将发生的事件(默认为接下来的7天) |
create_event | 使用位置、描述、时区创建定时或全天事件 |
update_event | 修补现有事件上的特定字段 |
delete_event | 按ID删除事件 |
Gmail(只读)
| 工具 | 说明 |
|---|---|
list_emails | 使用Gmail查询语法搜索电子邮件 |
read_email | 按邮件ID读取完整的电子邮件内容 |
任务(只读)
| 工具 | 说明 |
|---|---|
list_task_lists | 列出所有任务列表 |
list_tasks | 在任务列表中列出任务 |
它要去哪里
capabilities/
gdocs.py # ✅ docs, sheets, PDFs, comments, suggestions
calendar.py # ✅ events CRUD
gmail.py # ✅ read-only search and read
tasks.py # ✅ read-only list
gcp.py # 🔜
github.py # 🔜一个助理,一个身份(sava@yourdomain.com),逐步获得更多功能的信任。
设置
1.谷歌云
创建GCP项目并启用所需的API:
gcloud projects create sava-the-owl
gcloud services enable docs.googleapis.com drive.googleapis.com sheets.googleapis.com calendar-json.googleapis.com gmail.googleapis.com tasks.googleapis.com --project=sava-the-owl创建服务帐户:
gcloud iam service-accounts create sava-agent \
--display-name="Sava" \
--project=sava-the-owl
gcloud iam service-accounts keys create ~/.config/gcloud/sava-agent.json \
--iam-account=sava-agent@sava-the-owl.iam.gserviceaccount.com \
--project=sava-the-owl
chmod 600 ~/.config/gcloud/sava-agent.json在中的服务帐户上启用全域委派 谷歌云控制台 → IAM和管理员→ 服务账户→ 高级设置。
2.谷歌工作区
为Sava创建工作区用户(例如。 sava@yourdomain.com)in admin.google.com。这给了Sava一个真实的身份——建议和评论在谷歌文档中显示为“Sava”。
设置域范围的委派,以便服务帐户可以充当此用户:
- 首选 admin.google.com/ac/owl/domainwidedelegation
- 添加服务帐户 客户端ID (找到它
gcloud iam service-accounts describe sava-agent@sava-the-owl.iam.gserviceaccount.com --format="value(uniqueId)") - 为设置OAuth作用域 Sava用户 (文档编辑):
https://www.googleapis.com/auth/documents,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets- 为设置OAuth作用域 主要用户 (日历、电子邮件、任务——授权访问人员帐户):
https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/gmail.readonly,https://www.googleapis.com/auth/tasks.readonly共享您希望Sava访问的任何文档 sava@yourdomain.com 作为编辑(不是服务帐户电子邮件)。
3.安装
git clone https://github.com/gszep/sava.git
cd sava && uv sync
uv run playwright install chromium4.浏览器登录(一次性)
基于Playwright的工具需要保存浏览器会话。运行登录脚本,在打开的浏览器窗口中以Sava用户身份登录,然后关闭它:
uv run python -c "
from playwright.sync_api import sync_playwright
with sync_playwright() as pw:
browser = pw.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto('https://accounts.google.com/')
page.wait_for_event('close', timeout=300000)
context.storage_state(path='$HOME/.config/gcloud/sava-playwright-state.json')
browser.close()
"5.用克劳德代码注册
claude mcp add -s user \
-e GOOGLE_SERVICE_ACCOUNT_FILE=$HOME/.config/gcloud/sava-agent.json \
-e GOOGLE_IMPERSONATE_USER=sava@yourdomain.com \
-e GOOGLE_PRIMARY_USER=you@yourdomain.com \
-- sava uv run --directory /path/to/sava sava6.创建斜线命令
创建 ~/.claude/commands/sava.md:
You are Sava — a personal AI assistant with access to Google Workspace.
When making changes to documents, always use `suggest_edit` to create inline diffs (green additions, red strikethrough deletions) in the document body. This is Google Docs' "Suggesting" mode — the same as a human switching to Suggesting mode and typing edits.
Only use `anchor_comment` when you need to leave a note, ask a question, or explain something that cannot be expressed as a text replacement.
Never make direct edits to documents (Editing mode). All changes must go through `suggest_edit` (Suggesting mode) so that AI modifications are tracked and reviewable by humans.
Available tools: read_doc, list_files, list_comments, suggest_edit, anchor_comment, delete_all_comments, write_sheet, list_calendars, list_events, create_event, update_event, delete_event, list_emails, read_email, list_task_lists, list_tasks.
$ARGUMENTS重新启动克劳德代码。然后使用 /sava 从任何项目中调用Sava。
用法
/sava read the research plan summary
/sava review the English consent form and suggest corrections
/sava list comments on the ethics application
/sava update cell A1 in the feedback spreadsheet这 /sava 前缀在正常的Claude Code会话(编码、文件编辑、git)和Sava的功能层(Google Workspace)之间创建了一个清晰的边界。没有 /sava,MCP工具将不会被调用。
安全
- 服务帐户密钥 (
~/.config/gcloud/sava-agent.json)--皇冠上的宝石。chmod 600,永远不要承诺。 - 剧作家会议 (
~/.config/gcloud/sava-playwright-state.json)像饼干罐一样对待。包含的浏览器会话sava@yourdomain.com. - 全域授权 --范围包括文档、驱动器、表格(作为Sava用户)和日历、Gmail、任务(作为主要用户)。服务帐户只能模拟委托用户,Sava只能访问与其显式共享的文件。
- 无管理员角色 --Sava Workspace用户应该没有管理员权限。只是一个普通用户。
