Skip to main content
Glama

豆包生图 MCP(doubao-image-mcp)

Listed on mcpservers.org

官网 / 下载页: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.

界面

目录

Related MCP server: Higgsfield Unlimited MCP

它能做什么

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:

  1. 下载 …-windows-x64.zip(ARM 机器选 windows-arm64,32 位系统选 windows-x86)

  2. 解压到任意目录(路径可以含中文和空格)

  3. 双击 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 请求头(最省事,不用自己找 sessionid)

  1. 用浏览器打开 https://www.doubao.com 并登录

  2. 按 F12 打开开发者工具,切到 Network / 网络 面板

  3. 刷新页面(F5),在请求列表里点任意一条 doubao.com 的请求(比如 chat 或 completion)

  4. 右侧找到 Request Headers / 请求标头 → 复制 cookie: 后面那一整行 (形如 sessionid=7f3c…; ttwid=1%7C…; s_v_web_id=verify_…; …)

  5. 把整行粘到 -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(最少信息)

  1. 开发者工具 → Application / 应用 → 左侧 Cookies → https://www.doubao.com

  2. 找到名为 sessionid 的那一行,复制 Value(通常 32 位十六进制)

  3. ./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 报告。

首次使用

  1. 打开程序,点账号卡片右上角的 「扫码登录」(mac/Linux 是「导入 sessionid」)。

  2. 弹出内置浏览器窗口,用豆包 App 扫码,窗口自动关闭。

  3. 账号出现在列表里,带头像 + 昵称(登录成功后自动抓取)。

  4. 在「设置」里选好输出目录(默认 图片\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 测试共用同一个池)按下面的规则走:

  1. 默认账号优先,其余按列表顺序,挑一个空闲的已启用账号;

  2. 每个账号同一时刻只跑一个任务(豆包对并发不友好,容易踩风控);

  3. 全忙就排队等待,不会直接失败;排队数显示在顶部徽标和 doubao_accounts 的 waiting 里;

  4. 一个可调度账号都没有时,明确报「没有启用中的账号」。

排队只在同一个进程内生效。stdio 模式下每个 MCP 客户端会拉起自己的进程,多个客户端之间不共享队列;要严格串行就用 HTTP 模式(一个进程服务所有客户端)。

会话复用与上下文隔离

默认所有生成都放进同一个对话(可在「设置 → 复用对话」关掉)。这样豆包网页版里不会因为每次生图多出一堆会话,也方便你回头在网页里接着聊。

规则:

  1. 第一次生成时把服务端返回的会话 id(conversation_id)记到该账号名下;

  2. 之后的生成带上它,追加到同一个对话里;

  3. 找不到记录、或在这个对话里生成失败 → 自动新建一个对话重发一次,并记下新 id;

  4. 每个账号各记各的,换账号就是另一个对话。

因为复用对话意味着新提示词会看到前面的图,所以多了「上下文隔离」三档(设置里可选,也可用 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,出问题基本是运行时、代理或网络三类。程序会把这些情况写进窗口和日志:

  1. 加载失败时窗口里直接显示原因(连不上服务器 / DNS 失败 / 代理要认证 / 渲染进程崩溃),不再是白屏。

  2. 页面「加载成功但整页空白」(老 WebView2 运行时跑不动豆包前端)会被探针识别并提示。

  3. 跑一次自检,把报告发回来:

    .\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。软件按「现状」提供,不附带任何明示或暗示的担保。

⚠️ 非官方项目:这里调用的是豆包网页版接口,属于逆向实现,随时可能因服务端调整而失效。仅供个人学习与自用,请遵守豆包用户协议;请不要用它批量刷额度、对外提供服务或分发他人账号。

Available Tools

6 tools
doubao_accountsB

查看/切换/移除已登录的豆包账号。

Inputs: name, action. Returns: active, waiting, accounts

doubao_imageA

用豆包网页版生成图片(文生图;给了 ref_images 就是图生图)。返回本地路径与图片链接。没登录时先调 doubao_login。

Inputs: prompt (required), model, ratio, style, +8 more. Returns: model, ratio, images, notice, +4 more

doubao_loginA

弹出扫码登录窗口,让用户用豆包 App 扫码。没有账号、登录态失效、或 doubao_image 报「未登录」时调用它。

Returns: ok, account, message, nickname

doubao_modelsA

列出豆包可用的生图模型、风格 option_key 与常用比例。

Returns: models, ratios, styles, defaultModel

doubao_pingA

检查当前账号登录态是否有效(顺带判断是否被 IP 风控)。

Returns: ok, account, message

doubao_verifyA

打开豆包窗口让你手动完成人机验证(滑块)。生图被风控(710022004 / 710022002)时调用它,拖完滑块再重试 doubao_image。

Returns: ok, account, message, nickname

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 6 tools

    Disambiguation4/5

    The core tool (doubao_image) is clearly distinct, and the supporting tools map to specific auth situations: login (scan QR), verify (captcha slider), ping (session validity), accounts (manage sessions). The only mild overlap is between doubao_ping and doubao_accounts, since both touch login-state, but the descriptions clarify that one checks validity/freshness and the other manages the account list.

    Naming Consistency5/5

    Every tool uses the same doubao_ prefix followed by a short lowercase snake_case identifier, with no deviations in casing or style. The verb-vs-noun mix (login/verify/ping vs models/accounts/image) is natural for this domain and still predictable.

    Tool Count5/5

    Six tools is well-scoped: one generation tool, one discovery tool (models), and four auth/anti-bot helpers that are genuinely needed because Doubao's web flow requires QR login and captcha handling. Each tool has a reason to exist, with no filler.

    Completeness4/5

    The surface covers the full lifecycle needed to generate images: discovering models/styles, logging in, recovering from captcha blocks, checking session health, switching accounts, and both text-to-image and image-to-image generation. Minor gaps exist, such as no explicit logout/history/task-status tool, but agents can work around these.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      MCP server for generating images and videos using Z.AI models (GLM-Image, CogView-4, CogVideoX-3, Vidu Q1, etc.) with support for synchronous and asynchronous generation, downloads, and multiple input modes.
      10
      46 npm
      3
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      MCP server for Higgsfield AI that enables unlimited-mode image, video, audio generation, uploads, and job management via multiple parallel accounts, using browser session authentication.
      35
      17
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that gives non-image-capable models like DeepSeek the ability to generate images using backends such as Qwen-Image, Seedream, and CogView, saving them locally and returning file paths instead of base64 data.
      1
      MIT