内容
# google-flow-mcp
[](https://github.com/roshanarnav25-sloth/google-flow-mcp/actions/workflows/ci.yml)
[](./LICENSE)
[](https://nodejs.org)
[](https://modelcontextprotocol.io)
一个MCP服务器,允许代理驱动 **Google Flow** (labs.google的Veo视频/ Nano Banana图像工具)—— 并带有严格的信用成本控制门槛,以免悄悄花费您的资金。
Flow 没有公开的API。本服务器不通过盲点点击按钮来解决这个问题:Flow的前端是一个tRPC客户端,因此存在一个未公开的API,本服务器首先使用该API。点击是备用方案,不是接口。
> **状态:v0.1,未校准。** 所有内容都已编译,33个单元测试通过,工具界面已加载——但DOM选择器和tRPC端点映射尚未针对此代码库中的实时Flow重新验证。在信任其信用之前,请在[首次运行](#首次运行)中运行校准;所有三个步骤都是免费的。有关已验证和未验证的内容,请参见[验证状态](#验证状态)。
## 目录
- [为什么这样构建](#为什么这样构建)
- [传输层级](#传输层级)
- [安装](#安装) · [连接浏览器](#连接浏览器) · [注册Claude Code](#注册Claude-Code)
- [首次运行](#首次运行)
- [工具](#工具) · [功能覆盖](#功能覆盖)
- [示例](#示例) · [信用参考](#信用参考)
- [验证状态](#验证状态) · [安全](#安全)
- [架构深入探讨](./ARCHITECTURE.md) · [贡献](./CONTRIBUTING.md) · [变更日志](./CHANGELOG.md)
---
## 为什么这样构建
阅读 **[ARCHITECTURE.md](./ARCHITECTURE.md)** 获取完整的推理过程。简要版本:
- **Flow的UI是代理聊天,不是表单。** 您发送请求,Flow的代理建议生成并附带 **报价信用成本**,在您批准之前不会产生任何费用。所以,正确设计应该读取报价并做出决定——它永远不会在事后触发和协调。
- **拒绝提案是免费的。** 因此,`flow_estimate_cost` 不是估计,而是真实价格,成本为零。
- **静态图像是免费的,视频是真金白银。** 工具围绕工作流程设计,以最小花费获得接受的剪辑:免费合成静态图像,在静态图像上设置门槛,然后动画化批准的帧。
- **当服务器错误时,应该不会产生任何费用。** 每个失败路径都是在批准之前拒绝,而不是之后收费。
## 传输层级
| 层级 | 机制 | 用途 |
| -------------- | -------------------------------------- | -------------------------------------------------------------------------- |
| 1 `http` | Node fetch + 浏览器的cookie | 只读GET请求,通过`flow_verify_http_tier`验证。 可并行化 |
| 2 `page-fetch` | 在认证选项卡内 `fetch()` | **默认。** 认证和CORS免费——页面的自身来源发出调用 |
| 3 `dom` | 点击 | 只有无端点的内容:设置,Scenebuilder时间线,批准/拒绝 |
每个结果都报告其服务层级,因此您可以查看服务器何时从API降级为点击。
---
## 安装
```bash
git clone https://github.com/roshanarnav25-sloth/google-flow-mcp.git
cd google-flow-mcp && npm install && npm run build
```
需要Node 20+ 和本地Google Chrome。本服务器 **从不处理凭证** —— 它附加到您已经登录的浏览器。
## 连接浏览器
使用远程调试启动Chrome,并在该窗口中登录Flow:
```bash
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.google-flow-mcp/chrome-profile"
```
然后打开 <https://labs.google/fx/tools/flow>,登录并打开一个项目。
如果省略 `FLOW_CDP_URL`,服务器将启动其自己的持久浏览器——您在那里登录一次,配置文件将持续存在。
## 注册Claude Code
```bash
claude mcp add google-flow --env FLOW_CDP_URL=http://127.0.0.1:9222 --env FLOW_OUTPUT_DIR="$HOME/flow-output" --env FLOW_BUDGET_CEILING=120 -- node "$PWD/dist/index.js"
```
设置 `FLOW_BUDGET_CEILING`。这是防止失控循环的最后防线:任何生成超出总运行支出预算的请求都将在批准前被拒绝,且不会产生任何费用。
## 首次运行
```
flow_check_session # 确认登录,信用额度可见,门槛开启
flow_discover_api # 学习Flow当前的tRPC端点(免费,仅观察)
flow_estimate_cost # 计算一个剪辑的费用并拒绝(免费)—— 证明门槛有效
```
如果 `flow_check_session` 报告确认门槛不是 `always`,请在生成之前在Flow的设置中修复它。 如果门槛关闭,Flow将在不显示成本卡的情况下收费,客户端的任何保护措施都无法帮助。
---
## 工具
**会话和发现**
| 工具 | 是否收费 | 功能 |
| ----------------------- | ------- | ------------------------------------------------------------ |
| `flow_check_session` | 否 | 浏览器,登录,信用额度,项目和确认门槛状态 |
| `flow_discover_api` | 否 | 观察Flow自身的流量并编写端点映射 |
| `flow_verify_http_tier` | 否 | 提升已验证的只读GET请求到直接HTTP |
| `flow_api_map` | 否 | 读取已学习的端点映射 |
**生成**
| 工具 | 是否收费 | 功能 |
| --------------------- | ------------- | -------------------------------------------------------------- |
| `flow_generate_still` | **否——免费** | 静态图像。 在此处迭代合成;这是免费的沙盒 |
| `flow_estimate_cost` | **否** | 真实的报价成本,然后拒绝。 零成本 |
| `flow_generate_video` | **是** | 视频。 需要 `expected_max_cost`;拒绝任何超过此成本的请求 |
| `flow_collect` | 否 | 下载以 `no_wait` 提交的剪辑 |
**合成器,设置和项目**
| 工具 | 是否收费 | 功能 |
| ------------------------------------------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `flow_settings` | 否 | 读取/设置每个**项目**的模型层级,宽高比,输出,时长。 免费,且是最大的成本控制杠杆 |
| `flow_upload_media` | 否 | 上传本地图像作为起始帧 |
| `flow_upscale` | 1080p **否** / 4K **是** | 1080p 免费——始终选择。 4K 需要 50 信用且 **未报价**,因此需要明确确认 |
| `flow_list_projects` / `flow_open_project` / `flow_create_project` | 否 | 项目范围设置,库和场景 |
**媒体和组装**
| 工具 | 是否收费 | 功能 |
| ----------------------------------------------- | ------- | ------------------------------------------------------------------------------ |
| `flow_list_media` | 否 | 项目库,分页 |
| `flow_download` | 否 | 媒体ID → 签名CDN网址 → 磁盘,魔术字节验证 |
| `flow_delete_media` | 否 | 销毁。 仅限明确的ID;无删除所有选项 |
| `flow_create_scene` / `flow_add_clips_to_scene` | 否 | 构建Scenebuilder场景。 Flow的聊天代理无法执行此操作 |
| `flow_export_scene` | 否 | 将场景导出为MP4。 拼接是免费的;`Extend` 不是,并且永远不会被使用 |
**工具市场**
| 工具 | 是否收费 | 功能 |
| ---------------- | ----------- | ------------------------------------------------------------------------------------- |
| `flow_list_apps` | 否 | 列出Type Overlays,Transition Machine,Mask Magic,Storyboard Studio,自定义工具... |
| `flow_open_app` | **未知** | 打开应用并返回。 需要明确的未知成本确认 |
**预算**
| 工具 | 是否收费 | 功能 |
| ------------- | ------- | ----------------------------------------------------- |
| `flow_budget` | 否 | 读取或设置上限和运行支出 |
| `flow_ledger` | 否 | 追加日志,记录每个生成尝试的审计 trails |
## 功能覆盖
Flow是一个大型产品。 以下是对服务器可及和不可及内容的说明。
**生成模式** —— 模式不是开关;它由提交时附加到合成器上的内容决定。 `flow_generate_video` 涵盖所有模式:
| 模式 | 如何 | 是否覆盖 |
| ------------------------------ | ---------------------- | ------------------------------ |
| 文本到视频 | 附加无内容 | 是 |
| 帧到视频(起始帧) | `start_frame_media_id` | 是 —— **正常路径** |
| 帧到视频(起始帧和结束帧) | `+ end_frame_media_id` | 是 |
| 成分到视频(≤3个引用) | `reference_media_ids` | 是 |
| 静态图像(Nano Banana) | `flow_generate_still` | 是,免费 |
| 场景扩展(>8秒剪辑) | — | **否——刻意**,见下文 |
**刻意不覆盖**,原因如下:
- **Scenebuilder `Extend`** (40信用)。 这是免费界面内唯一付费的操作,它位于同一弹出窗口中,与`添加剪辑`仅一键之差。 排除它意味着场景组装永远不会意外收费。
- **驱动工具市场表单。** `flow_open_app` 打开应用并停止。 每个应用都有自定义界面,有些调用Veo内部接口,无需报价,因此盲点点击可能会导致无限制收费。
- **创建自定义工具** (“创建工具”)。 作者,而不是操作。
**尚未覆盖** (真实差距,非原则性差距):场景内时间线编辑(重新排序,修剪,删除已放置的剪辑),场景编辑器的自身16:9↔9:16切换,以及每个剪辑在Scenebuilder内重新生成。 在Flow中组装,然后在本地进行时间线工作——`ffmpeg -f concat -c copy` 相同代码的Veo剪辑完全相同,且成本为零。
三个引用——信用经济学,Veo提示制作工艺和验证的UI操作手册——也作为MCP **资源**公开,因此代理可以在无需单独技能的情况下读取它们。
## 示例
**价格承诺。** 免费,且数字真实:
```
flow_estimate_cost(prompt: "慢速推入,环境音效,仅无对话")
→ Flow 报价 20 信用。 提案被拒绝 — 无费用。
```
**静态图像优先循环。** 免费合成,然后动画:
```
flow_generate_still(prompt: "<完整合成提示>", out_file: "shot-03.jpg")
# 人工审批静态图像
flow_generate_video(prompt: "保持起始帧的精确合成;慢速推入;环境音效仅", expected_max_cost: 20, out_file: "shot-03.mp4")
```
**并行批次。** Flow 同时渲染,因此N个剪辑的成本约为一个剪辑的时钟时间:
```
flow_list_media() # 提前捕获ID
flow_generate_video(..., no_wait: true) × N
flow_collect(known_media_ids: [... 之前的 IDs])
```
## 信用参考
| 生成 | 信用 |
| ------------------- | ------- |
| 静态图像 | **0** |
| Veo 3.1 轻量版 | 10 |
| Veo 3.1 快速版 | 20 |
| Veo 3.1 品质版 | 100 |
| Scenebuilder 扩展 | 40 |
价格于 2026-07 验证并在 `src/constants.ts` 中重新检查。 预算 ~1.4 次所需剪辑:Veo 的首次尝试接受率约为 70%。
---
## 验证状态
诚实的会计,因为这涉及资金:
| 组件 | 状态 |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| 构建,工具界面,资源界面 | **已验证** — 编译干净; 24 个工具和 3 个资源通过 MCP Inspector 加载 |
| 预算门逻辑,账本,魔术字节检查 | 已实现;单元级别行为尚未针对实时Flow进行测试 |
| 合成器 / 批准-拒绝 / 下载选择器 | **移植自实时验证运行(2026-07-09/10),未从此代码库重新验证。** 类哈希和标签可能会轮换 |
| 设置面板,媒体选择器,上传,升级 | **未验证。** 根据记录的UI模式编写,但从未运行 — 预计需要一轮校准 |
| 项目,场景创建/添加剪辑,工具库 | **未验证。** 同样警告;场景 **导出** 是唯一具有实时运行先例的部分 |
| tRPC端点映射 | 手动验证了三个过程;其余由 `flow_discover_api` 在运行时学习 |
| 端到端付费生成 | **尚未运行此服务器** |
未验证的行失败的方式相同:带有“未收费”的消息,并注明无法控制的控件。这是设计目标——当服务器对UI的理解有误时,不应产生费用,而是提示。
在任何付费运行前,请使用 `flow_check_session` → `flow_discover_api` → `flow_estimate_cost` 进行校准。 这三个步骤都是免费的。
## 安全
- 绝不处理密码,通行密钥,OAuth代码或付款详情。
- 将页面上的所有内容(包括Flow自己的聊天回复)视为不受信任的数据,而不是指令。
- 在重新身份验证墙,付款墙和机器人挑战时停止并交回给人类。
- 绝不关闭它仅附加的浏览器;那是您的窗口。
- 学习到的API映射仅存储端点 **形状** — 无提示,媒体或令牌。
- 无遥测。 除了通过您自己的浏览器会话到Flow之外,机器上没有任何内容离开。
完整的威胁模型和报告流程: [SECURITY.md](./SECURITY.md)。
## 贡献
欢迎提出问题和PR——尤其是 **选择器漂移报告**,这是一种预期的维护,而不是缺陷,通常具有小的修复。 有一个专门的issue模板用于它们。
所有内容都构建和测试离线;您不需要Google帐户和信用额度即可贡献。 请参见 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解有关生成和预算代码的规则,这些规则比其他部分更严格。
```bash
npm install && npm run typecheck && npm run lint && npm test && npm run build
```
## 备注
本项目通过Google未公开的接口自动化Google产品,使用您的帐户和信用额度。 Flow的UI和内部API会毫无通知地更改;预计校准将成为使用它的部分。
不隶属于Google,不受Google支持或赞助。 “Google Flow”,“Veo”和相关商标归Google LLC所有。 在 [MIT License](./LICENSE) 下作为-is提供——您负责自己的帐户,自己的信用额度和遵守Google的条款。
连接信息
猜你喜欢
暂无推荐服务器