zaungast¶
可以,而且这反而更适合你的约束。
关键点是:zaungast 现在不需要你在 target machine 上装 Rust。它的公开安装方式是通过 Node.js/npm 运行,要求是 New Teams + Node.js ≥ 22.5;常见方式就是 npx -y zaungast,它会自动发现本地 Teams 数据库。(GitHub)
Gemini CLI 本身也支持直接注册 stdio MCP server,命令形式是:
所以最直接的版本就是:
默认写到当前项目的 .gemini/settings.json;如果你想用户级全局可用,可以加:
Gemini CLI 官方文档确认 gemini mcp add 支持 stdio server,并且会把 command/args 写进 mcpServers 配置。(GitHub)
不过你这里真正的限制不是 Rust/Python,而是“外部 npm registry 能不能访问”。
npx -y zaungast 的工作方式本质上是:
所以如果 target machine 不能访问公共 npm registry,那么单纯:
仍然会失败。
你的环境下,我建议优先考虑这三种部署方式,按优先级排序:
-
如果内部 npm registry 已经 mirror 了
zaungast,直接让 npm 指向内部 registry,然后照常npx。 -
如果内部源没有
zaungast,在允许联网的机器上把 Node package 打包成 tarball,然后通过内部 artifact repository/软件分发渠道下发。 -
最稳的是预先把
zaungast和它的 npm dependencies vendoring/打包成一个目录或内部 npm package,然后 Gemini 直接启动本地 executable,不运行在线安装。
对于受限生产机,我最推荐第 3 种。最终 target machine 上的配置应该更像:
{
"mcpServers": {
"zaungast": {
"command": "node",
"args": [
"C:\\tools\\zaungast\\dist\\index.js"
]
}
}
}
或者如果包本身提供 bin entrypoint:
而不是每次 Gemini 启动都:
原因很简单:npx -y 是 deployment-time dependency resolution,不够 deterministic。你的 target machine 是受控环境,最好把 dependency resolution 放在 build/staging machine 完成,target 只执行已经审批过的 artifact。
架构上因此可以进一步大幅简化。你之前那套 Python ingestion layer 甚至可能第一版完全不要:
Target machine
New Teams local cache
↓
zaungast
↓ MCP
Gemini CLI
↓
teams-digest skill
↓
structured digest
你的 skill 不需要自己:
而是告诉 Gemini:
1. 调用 zaungast 搜索近期 Teams 内容
2. 按 topic/thread 获取相关 conversation
3. 不要 bulk dump
4. 基于 message evidence 提取
- decisions
- actions
- blockers
- open questions
5. 输出 digest
这实际上更符合 MCP 的设计:让 zaungast 负责 deterministic data access,让 Gemini skill 负责 reasoning/orchestration。
还有一个细节值得注意。Gemini CLI 会给 MCP tools 加 server alias 前缀,因此如果 server alias 是 zaungast,模型看到的工具会类似:
Google 还特别建议 MCP server alias 不要带 underscore,因为它的 policy engine 会基于第一个 underscore 解析 server 名。zaungast 这个名字本身没有问题。(GitHub)
所以你新的 deployment strategy 我建议直接改成:
Build/staging machine
|
+-- obtain/audit zaungast
+-- npm install/package
+-- pin exact version
+-- package dependencies
+-- publish approved artifact internally
|
v
Target machine
|
+-- Node.js >= 22.5
+-- Gemini CLI
+-- approved local zaungast artifact
|
v
gemini mcp add zaungast <local command>
|
v
teams-digest agent skill
这样 target machine 完全不需要 Rust,也几乎不需要额外 Python package。
甚至如果你的 digest 本身完全交给 Gemini CLI,Python 可以归零:
唯一我仍然会考虑加 Python 的情况,是你需要长期的:
incremental state
cross-day digest snapshots
SQLite evidence database
action-item lifecycle
decision supersession tracking
那时 Python 是“digest state layer”,而不是 Teams extraction layer。这样 Python 包也可以压到几乎只有 stdlib + pydantic,甚至纯 stdlib。
基于你现在这个新约束,我会修改之前的方案:第一版不要自己解析 Teams,不要装 dfindexeddb,不要依赖任何附件解析 Python 包。先验证 Gemini CLI ↔ zaungast MCP ↔ local Teams 这条链能否工作。
验证只需要:
然后安装/放置 zaungast,注册:
最后:
Gemini CLI 会显示 MCP connection 状态;stdio server 在受信任目录下才会被正常测试连接。(GitHub)
如果这条链通了,你的整个 teams-digest 项目就从“写一个 Teams data pipeline”变成“写一个很薄的 Gemini Agent Skill”。这会简单一个数量级。