Doubao Image MCP
Tạo hình ảnh bằng trạng thái đăng nhập Doubao trên web của bạn (Seedream 4.0/5.0), không cần API Key: đăng nhập bằng cách quét mã QR, xếp hàng nhiều tài khoản, trả về đầy đủ nhiều hình ảnh, tạo hình ảnh liên tục trong cùng một cuộc trò chuyện.
Tài liệu
豆包生图 MCP(doubao-image-mcp)
官网 / 下载页:https://haikuotianko.github.io/doubao-image-mcp/
把豆包网页版(doubao.com)的生图能力封装成本地 MCP 服务:不需要官方 API Key,用你自己的网页登录态直接调用,Seedream 4.0 / 4.5 / 5.0 全系可用。附带一个桌面端(Wails + WebView2),负责扫码登录、多账号管理、测试生图与排障。
Local MCP server that exposes Doubao's web image generation as tools for Claude Desktop / Cursor / any MCP client — no API key, just your own web session.

目录
它能做什么
MCP 对外提供 6 个工具:
| 工具 | 作用 |
|---|---|
doubao_image | 文生图 / 图生图。一次生成几张就返回几张:本地文件路径 + CDN 链接 + 尺寸 |
doubao_login | 直接从 AI 客户端弹窗扫码:没有账号或登录态失效时调它,不用切到 GUI |
doubao_models | 列出可用模型、32 种风格 key、8 种比例 |
doubao_ping | 检查当前账号登录态是否有效(也能发现 IP 风控) |
doubao_accounts | 账号池:列出 / 切换默认 / 启用 / 停用 / 删除,输出带昵称与忙碌状态 |
doubao_verify | 被风控时打开豆包窗口,让你手动拖一次滑块验证 |
doubao_login 的关键点:stdio 模式下 MCP 进程同样跑在你的桌面会话里,所以它能直接开一个 WebView2 扫码窗口(最多等 3 分钟,扫完自动保存账号并校验)。已经有可用账号时不会打扰你,直接返回「无需登录」。mac / Linux 因为没有内置浏览器,会提示改用 -set-session。
几个实现上的点,用起来能感觉到:
- 无水印直链:从 SSE 里挑
image_raw/dwm3模板地址(手工改后缀会 400,签名覆盖整个 path,只能用服务端给的)。 - 多图全量:服务端一次可能给 1~4 张,全部返回;结构化解析漏掉的图会从原文按图补回。
- 比例修正:服务端经常忽略请求比例,默认用虚化背景补齐到目标比例(偏差 3% 内不动)。
- 双通道降级:新端点
/chat/completion失败自动降级到旧的 samantha 通道。
环境要求
- Windows 10 / 11:完整支持(GUI + 扫码登录),x64 / x86 / ARM64 都有预编译包。
- macOS / Linux:有预编译命令行版(MCP 功能完整),但没有 GUI、没有内置扫码登录,登录用
-set-session手动导入(见安装 → 方式三)。想要 GUI 就在该平台上自己wails build。 - Microsoft Edge WebView2 Runtime:仅 Windows 的扫码窗口需要;Win11 自带,Win10 若缺失程序会明确提示。
- 一个豆包账号(免费账号就能用 Seedream 5.0 Flash)。
下载
到 Releases 按你的平台选一个:
| 平台 | 资产 | 形态 |
|---|---|---|
| Windows x64(64 位) | …-windows-x64.zip | GUI 完整版 |
| Windows x86(32 位) | …-windows-x86.zip | GUI 完整版(老机器) |
| Windows ARM64 | …-windows-arm64.zip | GUI 完整版 |
| macOS Apple Silicon | …-macos-arm64-cli.zip | 命令行版 |
| macOS Intel | …-macos-x64-cli.zip | 命令行版 |
| Linux x64 | …-linux-x64-cli.zip | 命令行版 |
| Linux ARM64 | …-linux-arm64-cli.zip | 命令行版 |
命令行版包含
-mcp(stdio)、-http、-set-session、-diagnose、-view等全部命令,只是没有图形界面。 每个包都是「可执行文件 + README + LICENSE」,解压即用。mac/Linux 上首次运行可能需要chmod +x doubao-image-mcp。
版本与更新检查
不需要任何服务器,直接用 GitHub 的版本管理当更新源。
-
GUI 启动时会静默请求一次 GitHub 的最新 Release,发现新版本就在顶部弹一条提示(「去下载」直接开浏览器,「忽略此版本」记在本地,下次发版还会提醒)。
-
界面右上角还有**「检查更新」按钮**:手动查一次,检查期间按钮显示转圈 +「检查中」且不可重复点击,结果直接显示在按钮上(有新版本 / 已是最新 / 检查失败)。
-
命令行也能查:
.\doubao-image-mcp.exe -version # 当前版本 .\doubao-image-mcp.exe -check-update # 有没有新版本
原理就一句话:
GET https://api.github.com/repos/haikuotianko/doubao-image-mcp/releases/latest
→ 取 tag_name(如 v1.2.0)与二进制里编译进去的版本号比较
细节:
| 事项 | 说明 |
|---|---|
| 版本号来源 | 打包时用 -ldflags "-X doubao-image-mcp/internal/version.Version=v1.2.0" 注入;go build 不注入就是 dev,开发版不提示更新 |
| 限流 | 未认证的 GitHub API 每小时 60 次(按 IP 计),启动查一次完全够用;超了只会「检查失败」,不影响生图 |
| 断网 / 失败 | 只写日志,不弹框打扰;GUI 与 -mcp 模式都不受影响 |
| 想自己改成别的更新源 | 改 internal/update/update.go 里的 Repo 常量,或换成读取仓库内静态 JSON(raw.githubusercontent.com 不限流) |
版本号比较规则:按
主.次.修订逐段比数字(v1.10.0>v1.9.0),同号时正式版高于预发布版(v1.4.0>v1.4.0-beta)。
安装
方式一:下载 Release(推荐)
Windows:
- 下载
…-windows-x64.zip(ARM 机器选windows-arm64,32 位系统选windows-x86) - 解压到任意目录(路径可以含中文和空格)
- 双击
doubao-image-mcp.exe
程序是单文件,不需要安装。配置和账号写在 %APPDATA%\doubao-image-mcp,所以移动/改名 exe 不会丢账号。
macOS / Linux(命令行版):
unzip doubao-image-mcp-v1.4.0-macos-arm64-cli.zip -d doubao-image-mcp
cd doubao-image-mcp && chmod +x doubao-image-mcp
./doubao-image-mcp -set-session "sessionid=…; ttwid=…" # 整段 Cookie 直接粘,取法见下方
./doubao-image-mcp -mcp # MCP 客户端拉起时用
首次从网上下载的二进制在 macOS 上可能被 Gatekeeper 拦,执行 xattr -d com.apple.quarantine ./doubao-image-mcp 即可。
方式二:从源码构建
需要 Go 1.22+、Node.js 18+、Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
git clone https://github.com/haikuotianko/doubao-image-mcp.git
cd doubao-image-mcp
wails build # 产出 build\bin\doubao-image-mcp.exe
只改后端时可以 go build ./... 快速验证编译。
方式三:macOS / Linux
MCP 本体(协议客户端、工具、账号池)是纯 Go,可以直接跑;缺的只是 Windows 那个内置扫码窗口,所以登录改成复制一次 Cookie。
# 需要 Go 1.22+(或者直接用 Release 里的 *-cli 包)
go build -o doubao-image-mcp .
# 1) 把浏览器里的 Cookie 整段粘进来(导入时会校验登录态、抓头像昵称)
./doubao-image-mcp -set-session "sessionid=xxxx; ttwid=yyyy; ..."
# 2) 交给 MCP 客户端
./doubao-image-mcp -mcp
怎么取 Cookie(三种都支持,任选一种)
① 复制整段 Cookie 请求头(最省事,不用自己找 sessionid)
-
用浏览器打开 https://www.doubao.com 并登录
-
按
F12打开开发者工具,切到 Network / 网络 面板 -
刷新页面(
F5),在请求列表里点任意一条doubao.com的请求(比如chat或completion) -
右侧找到 Request Headers / 请求标头 → 复制
cookie:后面那一整行 (形如sessionid=7f3c…; ttwid=1%7C…; s_v_web_id=verify_…; …) -
把整行粘到
-set-session后面:./doubao-image-mcp -set-session "sessionid=7f3c…; ttwid=1%7C…; s_v_web_id=verify_…"带不带
Cookie:前缀都行,多几个无关 cookie 也没关系——程序只认它需要的那些。
② 直接右键「Copy as cURL」
在 Network 面板里右键任意请求 → Copy → Copy as cURL,把整段命令原样粘进来:
./doubao-image-mcp -set-session "curl 'https://www.doubao.com/chat/' -H 'cookie: sessionid=7f3c…; ttwid=1%7C…'"
程序会自动从 cURL 里把 cookie 头抠出来。
③ 只复制 sessionid(最少信息)
- 开发者工具 → Application / 应用 → 左侧 Cookies →
https://www.doubao.com - 找到名为
sessionid的那一行,复制 Value(通常 32 位十六进制) ./doubao-image-mcp -set-session "7f3c0d5e9a2b4c6d8e0f1a2b3c4d5e6f"
sessionid是 HttpOnly,浏览器控制台里document.cookie看不到,必须在 Application → Cookies 或 Network → Request Headers 里复制。想用 GUI 的话,mac/Linux 上编译出的界面里「扫码登录」会变成同一个导入框,粘贴方式和上面一样。
想要 GUI 的话:
# macOS:需要 Xcode 命令行工具(xcode-select --install)
# Linux:需要 GTK/WebKit2GTK 开发包,例如 Debian/Ubuntu:
# sudo apt install libgtk-3-dev libwebkit2gtk-4.1-dev
go install github.com/wailsapp/wails/v2/cmd/wails@latest
wails build
mac/Linux 上的 GUI 里,「扫码登录」按钮会换成手动导入 sessionid 的输入框,其余功能(账号池、排队、测试生图、大图查看、另存)都一样。
未验证:作者只有 Windows 机器,mac/Linux 只验证到「交叉编译通过」(
GOOS=darwin/GOOS=linux go build .都能出二进制)。真实运行、GUI 渲染、open/xdg-open打开目录需要 macOS / Linux 用户帮忙验证;有问题请开 issue 附上-diagnose报告。
首次使用
- 打开程序,点账号卡片右上角的 「扫码登录」(mac/Linux 是「导入 sessionid」)。
- 弹出内置浏览器窗口,用豆包 App 扫码,窗口自动关闭。
- 账号出现在列表里,带头像 + 昵称(登录成功后自动抓取)。
- 在「设置」里选好输出目录(默认
图片\doubao-image-mcp)、默认模型/比例/风格。
加第二个账号:再点一次「扫码登录」。程序会先清空浏览器里的旧登录态、重新出二维码,并且把已有账号的 sessionid 排除在外,所以不会出现「一打开就显示已登录、第二个号扫不进去」的情况。
排序与默认账号:账号行可以拖动排序(顺序就是生图优先级);「设置 → 默认账号」可以指定优先用哪个号,留空则用列表里第一个启用的账号。停用的账号不参与调度,也不会出现在两个账号下拉里。
接入 MCP 客户端
客户端配置里的路径不要手抄:GUI 的「MCP 服务」卡片会按当前机器的真实位置生成好可直接粘贴的 JSON,doubao-image-mcp.exe -diagnose 也会打印同一份。
方式一:stdio(推荐,客户端自己拉起进程)
{
"mcpServers": {
"doubao": {
"command": "C:\\Users\\<你>\\Downloads\\doubao-image-mcp.exe",
"args": ["-mcp"]
}
}
}
- Claude Desktop:改
%APPDATA%\Claude\claude_desktop_config.json,重启客户端。 - Cursor:
Settings → MCP → Add new MCP server,选command类型,命令填<路径>\doubao-image-mcp.exe -mcp。 - Cherry Studio / 其他:选「stdio」传输,命令和参数同上。
-mcp 模式下日志写到 %APPDATA%\doubao-image-mcp\mcp.log,stdout 只走 JSON-RPC,不会污染协议。
方式二:本地 HTTP(常驻,多客户端共用)
在 GUI 里点「启动 HTTP」,或命令行:
.\doubao-image-mcp.exe -http 127.0.0.1:8770 # 不带地址则用配置里的地址
客户端配置:
{
"mcpServers": {
"doubao": {
"type": "http",
"url": "http://127.0.0.1:8770/mcp"
}
}
}
⚠️ 这个 HTTP 接口没有鉴权,等于「谁连上谁就能花你的额度」。默认只绑
127.0.0.1,不要改成0.0.0.0或局域网地址。
怎么确认接上了
在客户端里问一句「用 doubao_ping 看看豆包登录态」,返回 账号 xxx 登录态正常 就通了。返回「还没有登录任何豆包账号」说明账号不在配置里,回 GUI 扫码即可。
工具参考
doubao_image —— 生成图片
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt | string | ✅ | 画面描述,越具体越好 |
ratio | string | 1:1 4:3 3:4 16:9 9:16 3:2 2:3 auto;留空用配置默认 | |
model | string | Seedream 5.0 Flash(免费,推荐)/ Seedream 4.5 / Seedream 4.0 / Seedream 5.0 Pro(需订阅) | |
style | string | 风格 option_key,32 种,用 doubao_models 查 | |
ref_images | string[] | 本地绝对路径数组,传了就走图生图 | |
out_dir | string | 保存目录;留空用配置里的输出目录 | |
fit_ratio | bool | 是否裁剪/补边到请求比例;留空跟随配置(默认开) | |
timeout_seconds | int | 超时秒数,默认 180 | |
inline | bool | 为 true 时把图片本体以 base64 放进 MCP 响应(体积大),默认只给路径/链接 | |
new_chat | bool | 强制新建对话;默认沿用上一次的对话(见会话复用) | |
chat_id | string | 指定会话 id 或对话链接(https://www.doubao.com/chat/<id>),在该对话里继续生成 | |
context_mode | string | 上下文隔离:none / always / auto;留空跟随配置 |
返回里除图片外还会带 chat_id 与 chat_url:这次生成落在哪个对话,点链接就能在豆包网页版里看到(就是 https://www.doubao.com/chat/<id>)。
返回的文本是「共 N 张:」加每张一行路径;结构化输出:
{
"prompt": "海边日落,电影感",
"model": "Seedream 5.0 Flash",
"ratio": "16:9",
"channel": "ability",
"notice": "",
"images": [
{
"path": "C:\\Users\\me\\Pictures\\doubao-image-mcp\\doubao_20261106_153012_1.png",
"url": "https://p3-flow-imagex-sign.byteimg.com/...",
"width": 2048,
"height": 2048,
"format": "png"
}
]
}
调用示例(任何 MCP 客户端替我发这个请求):
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "doubao_image",
"arguments": {
"prompt": "赛博朋克风格的重庆夜景,霓虹灯、雨夜、电影感",
"ratio": "16:9",
"model": "Seedream 5.0 Flash",
"style": "image_gen_style_cyberpunk"
}
}
}
图生图就是多传参考图:
{
"name": "doubao_image",
"arguments": {
"prompt": "把这张照片改成水彩画风格",
"ref_images": ["C:\\Users\\me\\Pictures\\cat.jpg"],
"ratio": "1:1"
}
}
对 AI 说话就行,不用手写 JSON:
用 doubao_image 画一张「雪山日落,16:9,电影感」 用 doubao_image 把这四张图分别改成水彩风格:
C:\pics\1.jpg…
doubao_models —— 查模型 / 风格 / 比例
无参数。返回:
{
"models": [{"name": "Seedream 5.0 Flash", "sub": "专业快速(免费,推荐)", "needUpgrade": false}],
"defaultModel": "Seedream 5.0 Flash",
"styles": [{"key": "skill_image_styles_film", "name": "电影写真"}],
"ratios": ["1:1", "4:3", "3:4", "16:9", "9:16", "3:2", "2:3", "auto"]
}
doubao_login —— 直接弹窗扫码
无参数。调用后会在你桌面上弹出豆包登录窗口,用 App 扫码即可;扫完自动保存账号、校验登录态、抓头像昵称。最长等 3 分钟,客户端取消请求时窗口会关闭。
{"name": "doubao_login", "arguments": {}}
返回:
{"ok": true, "account": "doubao-1106-165733", "nickname": "hai_lucky", "message": "登录成功,已保存账号 doubao-1106-165733,昵称 hai_lucky"}
- 已有可用账号时不弹窗,直接返回「已经有可用账号 xxx,无需登录」。
- 非 Windows 平台返回提示:用
-set-session手动导入。 - 也可以直接对 AI 说:「先 doubao_login 登录一下,再画一张…」
doubao_ping —— 检查登录态
无参数。返回 {ok, account, message}。风控(710022002 / 710022004)和登录失效都在 message 里说明。
doubao_verify —— 过滑块验证
无参数。生图报 710022004(人机验证)时调用它:会在你桌面上打开一个豆包窗口(已带上当前账号的登录态),你随便发一条消息触发滑块、拖过去、把窗口关掉,再重新调 doubao_image 即可。
有图形界面的版本还有按钮入口:设置里的 「去验证(滑块)」。
验证状态有有效期,且和 IP 绑定;验证期间以及风控冷却期不要开豆包网页版——网页版会持续请求同样的接口,相当于一直在续命风控状态,冷却时间会被拉长。
doubao_accounts —— 账号池
| 参数 | 说明 |
|---|---|
action | list(默认)/ switch / enable / disable / remove |
name | switch、enable、disable、remove 要操作的账号名 |
返回包含 active(默认账号)、waiting(排队请求数)和账号列表:
{
"active": "doubao-1106-152143",
"waiting": 0,
"accounts": [
{"name": "doubao-1106-152143", "nickname": "hai_lucky", "enabled": true, "busy": false, "active": true}
]
}
多账号与自动排队
生图请求(MCP 与 GUI 测试共用同一个池)按下面的规则走:
- 默认账号优先,其余按列表顺序,挑一个空闲的已启用账号;
- 每个账号同一时刻只跑一个任务(豆包对并发不友好,容易踩风控);
- 全忙就排队等待,不会直接失败;排队数显示在顶部徽标和
doubao_accounts的waiting里; - 一个可调度账号都没有时,明确报「没有启用中的账号」。
排队只在同一个进程内生效。stdio 模式下每个 MCP 客户端会拉起自己的进程,多个客户端之间不共享队列;要严格串行就用 HTTP 模式(一个进程服务所有客户端)。
会话复用与上下文隔离
默认所有生成都放进同一个对话(可在「设置 → 复用对话」关掉)。这样豆包网页版里不会因为每次生图多出一堆会话,也方便你回头在网页里接着聊。
规则:
- 第一次生成时把服务端返回的会话 id(
conversation_id)记到该账号名下; - 之后的生成带上它,追加到同一个对话里;
- 找不到记录、或在这个对话里生成失败 → 自动新建一个对话重发一次,并记下新 id;
- 每个账号各记各的,换账号就是另一个对话。
因为复用对话意味着新提示词会看到前面的图,所以多了「上下文隔离」三档(设置里可选,也可用 context_mode 参数临时覆盖):
| 模式 | 实际发送的提示词 | 适用 |
|---|---|---|
auto(默认) | 「如果下面的生图请求与之前的内容无关,请忽略上文、只按新提示词生成;如果与之前有关联(同一主体换风格/换角度),可以沿用上文信息:」+ 提示词 | 大多数情况,让模型自己判断 |
always | 「这是一次全新的生图请求,与之前生成的内容没有任何关联。请忽略上面的全部上下文,只根据下面的提示词生成图片:」+ 提示词 | 完全独立的新图 |
none | 提示词原样发送 | 想要连续修改同一张图 |
想手动指定对话,把网页地址直接丢进去就行——chat_id 既收纯数字 id,也收 https://www.doubao.com/chat/<id> 这样的链接(程序会把 id 取出来)。返回里的 chat_url 就是这次落到的对话地址。
旧通道(samantha 兜底、图生图)不返回会话 id,这种情况程序会清掉本地记录,下次重新建对话,避免往一个已经不对的对话里发。
数据位置
| 内容 | 路径 |
|---|---|
| 配置与账号 | %APPDATA%\doubao-image-mcp\config.json(里面有明文 cookie,别外传) |
| WebView2 登录态 | %APPDATA%\doubao-image-mcp\webview |
| 运行日志 | %APPDATA%\doubao-image-mcp\app.log(超过 2MB 滚成 app.log.1) |
| stdio 日志 | %APPDATA%\doubao-image-mcp\mcp.log |
| 默认输出 | %USERPROFILE%\Pictures\doubao-image-mcp |
排障
扫码窗口白屏 / 打不开
登录窗口是原生 WebView2,出问题基本是运行时、代理或网络三类。程序会把这些情况写进窗口和日志:
-
加载失败时窗口里直接显示原因(连不上服务器 / DNS 失败 / 代理要认证 / 渲染进程崩溃),不再是白屏。
-
页面「加载成功但整页空白」(老 WebView2 运行时跑不动豆包前端)会被探针识别并提示。
-
跑一次自检,把报告发回来:
.\doubao-image-mcp.exe -diagnose报告落在
%APPDATA%\doubao-image-mcp\diag-<时间>.txt,含 Windows 版本、WebView2 运行时版本、配置目录可写性、代理设置、DNS/TCP/HTTPS 连通性,以及按当前机器路径生成好的 stdio 配置。
其它命令行开关
.\doubao-image-mcp.exe -login # 只开登录窗口(日志写 app.log)
.\doubao-image-mcp.exe -login -login-url about:blank # 换个地址,验证窗口本身是否正常
.\doubao-image-mcp.exe -view # 用默认账号的会话开浏览器窗口
.\doubao-image-mcp.exe -diagnose # 环境自检
.\doubao-image-mcp.exe -version # 打印当前版本
.\doubao-image-mcp.exe -check-update # 查 GitHub 上有没有新版本
生成失败
| 现象 | 原因与处理 |
|---|---|
| 「当前账号无该模型的创作额度」 | 免费额度用完了,换模型或换账号 |
错误码 710022002 / 710022004 | IP 级风控。先点「去验证」手动过滑块;不行就等约 30 分钟冷却、换网络(手机热点最快)。冷却期间别开豆包网页版,否则会一直触发风控、冷却被无限续期 |
图生图返回 710020702「系统错误」 | 旧通道脆弱,先用文生图或换账号稍后重试 |
| 返回「没有启用中的账号」 | 账号被停用了,去 GUI 打开开关 |
已知限制
- 走的是网页版接口,属于逆向实现,没有官方保证;豆包改接口就可能失效。
- 免费账号有额度限制。
- 图生图(
ref_images)走旧的 samantha 通道,比文生图脆弱。 - 服务端有时忽略请求的比例;默认的
fit_ratio会用虚化背景补齐,关掉就保留原图。 - 仅 Windows(见下)。
跨平台说明
MCP 主体是纯 Go(internal/doubao 协议客户端、internal/mcpserver 工具定义、internal/accountpool 调度、internal/config 持久化),因此 7 个平台的包都是同一份代码编出来的:
| 目标 | 产物 | 构建方式 |
|---|---|---|
| windows/amd64、windows/386、windows/arm64 | PE(GUI 完整) | wails build -platform windows/<arch> |
| darwin/arm64、darwin/amd64 | Mach-O(命令行) | GOOS=darwin GOARCH=… CGO_ENABLED=0 go build |
| linux/amd64、linux/arm64 | ELF(命令行) | GOOS=linux GOARCH=… CGO_ENABLED=0 go build |
一键打完所有包:
powershell -File scripts\build-release.ps1 -Version v1.4.0
发版后官网的下载列表要跟着更新(官网读的是仓库里的静态 docs/latest.json,不实时查 GitHub API,避免 60 次/小时的限流):
powershell -File scripts\update-latest.ps1 # 取最新 Release
powershell -File scripts\update-latest.ps1 -Tag v1.4.0 # 或指定版本
git add docs/latest.json && git commit -m "docs: 更新 latest.json" && git push
为什么 mac/Linux 没有 GUI 包:Wails 的图形界面要 cgo(mac 用 WKWebView,Linux 用 WebKitGTK),而 cgo 无法在 Windows 上交叉编译,wails build -platform darwin/arm64 会直接告警 Crosscompiling to Mac not currently supported。所以这两个平台发的是纯 Go 的命令行版——MCP 功能完整,只是没有窗口。想要 GUI 就在对应平台上跑一次 wails build。
平台差异被收敛到三处,都用构建标签分开了:
| 位置 | Windows | macOS / Linux |
|---|---|---|
internal/loginwin/window_windows.go | Win32 窗口 + WebView2,扫码登录 | stub_other.go:返回「当前平台没有内置扫码登录」,界面换成手动导入 sessionid |
diagnose.go + diagnose_windows.go / diagnose_other.go | 读注册表拿系统版本与 IE 代理 | 用 runtime.GOOS + 环境变量 |
reveal_windows.go / reveal_other.go | explorer /select | open -R(mac)/ xdg-open(Linux) |
现状:
- macOS / Linux 上 MCP 功能齐全(生成、多图、账号池、排队、
-set-session导入登录态)。 - 没有内置扫码窗口——
sessionid是 HttpOnly,只能从浏览器里手动取;这属于「用起来麻烦一点」,不是「不能用」。 - GUI 也能编译(
wails build),但作者只有 Windows 环境,GUI 在 mac/Linux 上的实际渲染与交互未经我验证。如果你跑了,欢迎把结果/截图开 issue 反馈。
想补上原生扫码登录的话,路径是:mac 用 WKWebView + WKHTTPCookieStore 取 cookie,Linux 用 WebKitGTK 的 CookieManager;接口已经按 Options/Window/WaitLogin 抽好,加一个 window_darwin.go 即可,不需要动上层。
开发
wails build # 产出 build\bin\doubao-image-mcp.exe
wails dev # 热重载
go build ./... # 只编译后端
go test ./internal/... # 账号池 / 配置的单元测试
交叉编译自检(不需要 Mac 也能确认平台代码没断):
GOOS=darwin GOARCH=arm64 go build -o /tmp/mac .
GOOS=linux GOARCH=amd64 go build -o /tmp/linux .
代码结构:
main.go 启动模式(GUI / -mcp / -http / -diagnose / -login / -view)
diagnose.go 环境自检报告
app.go Wails 绑定:设置、账号、扫码登录、测试生图、图片另存、落盘日志
internal/config 配置与账号持久化(账号池顺序、启用状态、昵称头像)
internal/accountpool 账号调度:按优先级取空闲账号,全忙排队
internal/doubao 豆包协议客户端(SSE 解析、多图归并、图生图、上传、比例修正、资料抓取)
internal/loginwin 原生 Win32 + WebView2 登录窗口(取 HttpOnly cookie、错误页、空白探针)
internal/mcpserver MCP 工具定义(stdio / streamable HTTP)
internal/update GitHub Releases 版本检查与版本号比较(不需要自建服务器)
internal/version 构建时用 -ldflags 注入的版本号
frontend/ Vanilla JS + vite
调试小技巧:设 DOUBAO_MCP_DUMP_SSE=<文件路径> 会把这次生成的原始 SSE 写到该文件,方便服务端改结构时对齐字段。
许可证与免责
MIT。软件按「现状」提供,不附带任何明示或暗示的担保。
⚠️ 非官方项目:这里调用的是豆包网页版接口,属于逆向实现,随时可能因服务端调整而失效。仅供个人学习与自用,请遵守豆包用户协议;请不要用它批量刷额度、对外提供服务或分发他人账号。