Skip to main content
Glama
README.md
# flow-mcp — Google Flow MCP Server

Google Flow 的独立 MCP server(从 [media-gen-mcp](https://github.com/wangdong233/media-gen-mcp) 分离):**0 积分 AI 生图** + 计费视频生成(Veo / abra),全部经**你本机的 Chrome 会话**(CDP 页面上下文)驱动 —— 无 API key、无配额、不走第三方转发。

- 生图 / 图片放大 / 上传 / 状态查询 / 下载 / 删除 / 分享 / 取消 / 角色实体:**全部 0 积分**
- 生视频:**消耗 Google Flow 积分**(abra 7-20 / veo lite 10 / fast 20 / quality 100 每条;1080p 超分 0)—— 工具描述里显式警示,默认只在用户点名时使用

## 安装

前置(一次性):

1. 本机安装 [lasso](https://www.npmjs.com/package/lasso-mcp)(CC 全交互抓手中的 Chrome 启动器)
2. 启动带 CDP 的 Chrome 并登录 labs.google:

```bash
lasso launch-chrome --port 9223 --mode visible   # 首次:窗口出现,完成 Google 登录(2FA 同)
# 之后每天只需:hidden 模式静默驻留
lasso launch-chrome --port 9223
```

3. 在该 Chrome 打开 https://labs.google/fx/tools/flow 任意项目页(保持运行)

接入 Claude Code:

```bash
claude mcp add flow-mcp -- node /path/to/flow-mcp/dist/index.js
# 或发布后:npx flow-mcp-server
```

与 media-gen-mcp 可同时接入,互不冲突(见下方「与 media-gen-mcp 共存」)。

## 工具(4 个)

| 工具 | 积分 | 用途 |
|---|---|---|
| `flow_generate_image` | **0** | 文生图 / 图生图(底图+参考图)/ 2K 放大。NARWHAL(Nano Banana 2,默认)/ HARBOR_SEAL / GEM_PIX_2(Nano Banana Pro)。支持 `aspect`(16:9/9:16/1:1/3:4/4:3)与 `seed` 精确复现 |
| `flow_generate_video` | 🔴 **计费** | 视频提交(t2v/i2v/r2v/首尾帧/延长/编辑/超分)。**只提交不等待**,立刻返回 mediaId 句柄 |
| `flow_status` | **0** | 一站式自省:积分余额 / 实时模型目录(每个 key 的积分价与耗时)/ 媒体列表 / 单媒体状态与下载 / 批量删除 / 公开分享链接 / 取消生成中任务。**也是视频句柄的轮询路径** |
| `flow_entity` | **0** | 角色实体:建角色卡 / 绑 30 选 1 预设语音 / 绑形象图 |

典型流程:

```
flow_status                                    # 先看:余额 + 目录(per-key creditsAtServiceTier)
flow_generate_image(prompt=..., aspect="16:9") # 0 积分生图,产出落盘并回传 mediaId+seed
flow_generate_video(model="abra_t2v_8s", ...)  # 🔴 计费提交 → 返回 mediaId 句柄(不阻塞)
flow_status(mediaId="...")                     # 轮询(0 积分;in_progress 会给 retry_after_seconds)
flow_status(mediaId="...", download=true)      # completed 后落盘 mp4
```

## 配置(与 media-gen-mcp 共享一个文件)

配置文件:`~/.media-gen-mcp/config.json`(两包读同一份 —— 「同一功能的不同实现渠道」在一个文件里统一开/关)。目录名沿用历史名,**勿改**(Flow 项目 ID 永久记录在 `~/.media-gen-mcp/flow-project.json`,改名会孤儿化)。

```json
{
  "flow": {
    "enabled": true,
    "imageRouting": "prefer",
    "videoRouting": "explicit-only",
    "toolDeadlineMs": 110000
  },
  "providers": {
    "flow": { "cdpPort": 9223 }
  }
}
```

| 字段 | 默认 | 作用 |
|---|---|---|
| `flow.enabled` | `true` | `false` = S000 门禁:4 个工具**仍注册**,但调用即刻返回 `[flow] S000` 结构化错误(自带修复指引)。改配置后须重启会话 |
| `flow.imageRouting` | `"prefer"` | `prefer` = 生图工具描述注入「0 积分优先」引导(软路由);`on-demand` = 仅当用户点名 Flow 时使用 |
| `flow.videoRouting` | `"explicit-only"` | `explicit-only`(积分红线)= 视频工具仅在用户显式要求 Flow/Veo/abra 时使用;`prefer` = 作为首选(仍警示计费) |
| `flow.toolDeadlineMs` | `110000` | 单次工具调用硬上限(防卡死;超时返回 `[flow] S410`,生成在服务端继续,可经 `flow_status` 找回) |
| `providers.flow.cdpPort` | `9223` | CDP 端口(与 `lasso launch-chrome --port` 一致) |
| `providers.flow.projectId` | (缺省) | 缺省读 `flow-project.json` 的永久项目(推荐 —— 项目 ID 永久复用) |
| `providers.flow.models.video.default` | (无) | 刻意无内置默认:视频计费,必须显式传 `model` 或在此显式配置 |

完整示例见 [`config.example.json`](./config.example.json)。

### 与 media-gen-mcp 共存

- 两包**共享** `~/.media-gen-mcp/config.json`;media-gen 自己的 `imageProviderPriority` / `videoProviderPriority` 链只在它包内生效
- 分离后的跨包优先级 = 本包工具描述软路由(`imageRouting`/`videoRouting` 引导 Claude 选 `flow_generate_image` 优先)+ `enabled` 总闸 —— 不存在跨包硬重定向(物理上两包互不可见,诚实设计)
- `flow-project.json` / `flow-entities.json` 归本包;media-gen 侧摘除 Flow 后不再读写

## 错误码速查(`[flow] S<code>`)

| 码 | 含义 | 处置 |
|---|---|---|
| `S000` | 配置已禁用 | 按错误里的指引把 `flow.enabled` 改回 `true`,重启会话 |
| `S100` | CDP 不可连 | `lasso launch-chrome --port 9223` |
| `S101` | 无 labs.google 页面 | 在该 Chrome 打开 Flow 项目页 |
| `S102` | 未登录 | 在该 Chrome 完成 labs.google 登录 |
| `S104` | reCAPTCHA 失败 | 停留在 Flow 页面重试 |
| `S1xx` 其余 | 环境前置 | 环境就绪后重试;生图可回落其他图像工具 |
| `S2xx` | 页面 fetch 失败 | 看 message 内的上游响应片段 |
| `S300/S301/S303` | 模型/参数/模式校验 | 按 message 指引换 key 或参数(提交前拦截,零消耗) |
| `S400` | mediaId 不在本项目 | 不带参数调 `flow_status` 查看全部 media |
| `S402` | 下载不完整 | 直接重试 |
| `S410` | 工具层截止(防卡死) | 生成仍在服务端进行;`flow_status` 不带参数找回 |

## 环境要求

- Node.js ≥ 18
- 本机 Chrome(经 lasso 以 `--remote-debugging-port=9223` 启动)并登录 labs.google
- FFmpeg 随包自带(ffmpeg-static;仅用于产物合法性自检,缺失时自动降级为提示)

## License

MIT

TDQS

A4.6/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a completely distinct purpose: video generation, image generation, status/introspection (including download/delete/share/cancel), and character entity management. There is zero overlap or ambiguity between them, even for an agent scanning descriptions.

Naming Consistency4/5

All tools share the 'flow_' prefix, creating a clear namespace. Two tools use verb_noun (flow_generate_video, flow_generate_image) while the others are simply noun-like (flow_status, flow_entity), but the pattern is still predictable and readable. Minor deviation from a strict verb_noun convention.

Tool Count4/5

Four tools is on the small side but well-suited for a focused media-generation server. Each tool covers a necessary capability (generate video, generate image, manage/inspect, and entity handling). The count feels slightly thin but not incomplete for the domain.

Completeness4/5

The surface covers the full lifecycle: generation (video/image), status polling, download, delete, share, cancel, and entity CRUD (via flow_entity and flow_status). Minor gaps exist (e.g., no explicit list/update for media aside from status, but those are handled through flow_status arguments), so agents can accomplish all expected workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing