Skip to main content
Glama
mcp_doubao_lld.md10.5 kB
# Doubao MCP 文生图 详细设计(LLD) 本设计文档遵循 `rules/LLDesign.md` 要求,面向当前迭代(仅文生图,MCP stdio,固定模型与端点,无外部配置),并包含项目初始化方案(uv)。 ## 项目结构与总体设计 - 目标:构建一个 Python MCP Server,通过 stdio 暴露单一工具 `generate_images`,调用 Doubao Ark 的 `images.generate` 实现“文生图(text-to-image)”。 - 约束与确认: - 仅文生图;不实现图生文或图生图(参考图)。 - 模型与端点固定为示例常量;鉴权与配置不暴露为环境变量(API Key 写为代码常量,开发演示用)。 - 不实现专门的超时、重试、并发控制。 - 依赖与打包使用 `uv + pyproject.toml`。 - 交互:客户端调用 MCP 工具 `generate_images(prompt, num_images<=3, size?, watermark?)`,MCP 转 Doubao Ark SDK 请求,返回图片 URL 与 size 列表。 ## 目录结构 seedream_mcp/ # 当前项目根目录 pyproject.toml # ✅ 已存在,需添加 volcengine 依赖 README.md # ✅ 已存在 main.py # ✅ 已存在 uv.lock # ✅ uv 依赖锁定文件 .venv/ # ✅ 虚拟环境目录 .python-version # ✅ Python 版本文件 .gitignore # ✅ Git 忽略文件 docs/ mcp_doubao_lld.md # ✅ 当前设计文档 rules/ # ✅ 项目规则文档 LLDesign.md app.md coding.md codingplan.md pages.md src/mcp_doubao/ # ✅ 已创建的主要代码目录 __init__.py # ✅ 已创建 server.py # ✅ 已创建 tools.py # ✅ 已创建 doubao_client.py # ✅ 已创建 config.py # ✅ 已创建 types.py # ✅ 已创建 scripts/ # ✅ 已创建目录 run_stdio.sh # ✅ 占位文件已创建 examples/ # ✅ 已创建目录 prompts.txt # ✅ 占位文件已创建 tests/ # ✅ 已创建目录 test_generate_images.py # ✅ 占位文件已创建 说明: - `server.py`:MCP 服务器入口(stdio),注册工具。 - `tools.py`:定义 `generate_images` 工具参数校验与输出封装。 - `doubao_client.py`:封装 Doubao Ark SDK 调用。 - `config.py`:按本迭代要求仅内置常量(API Key 等)。 - `types.py`:请求/响应数据结构(TypedDict 或 dataclass)。 - `examples/`、`tests/`、`scripts/`:为后续迭代保留;当前占位。 ## 整体逻辑和交互时序图 - 核心流程:Client 发起 MCP 工具调用 → `server` 路由到 `tools.generate_images` → `doubao_client` 调用 Ark SDK `images.generate` → 返回 URL 列表。 ```mermaid sequenceDiagram participant CL as client/editor participant SV as src/mcp_doubao/server.py participant TL as src/mcp_doubao/tools.py participant DC as src/mcp_doubao/doubao_client.py participant ARK as Doubao Ark API CL->>SV: call tool "generate_images" {prompt, num_images<=3, size?, watermark?} SV->>TL: route tool invocation (args) TL->>DC: DoubaoClient.generate_images(prompt, count, size, watermark) DC->>ARK: images.generate(model=const, prompt, size, sequential_image_generation="auto", options.max_images=count, response_format="url", watermark) ARK-->>DC: imagesResponse {data: [{url, size}, ...]} DC-->>TL: ImageItem[] (url, size) TL-->>SV: MCP ToolResponse {images: [{url, size}], count} SV-->>CL: result ``` ## API 接口定义(MCP 工具) - 工具名:`generate_images` - 方式:MCP tool over stdio(JSON-RPC 样式调用,由 MCP 框架处理) - 入参: - `prompt`: string,必填。生成图像的文本描述。 - `num_images`: integer,选填,默认 1,范围 [1, 3]。 - `size`: string,选填,默认 "2K"。 - `watermark`: boolean,选填,默认 true。 - 出参: - `images`: Array<{ `url`: string, `size`: string }> - `count`: number - 错误: - 参数错误(`ValueError`) - 提供方调用错误(`ProviderError`):Doubao Ark 返回错误码或 SDK 异常 - 说明: - 不支持传入参考图或本地图片;仅文生图。 - 批量通过 `num_images` 控制,最大 3,对应 Ark 的 `SequentialImageGenerationOptions(max_images=n)`。 ## 数据库表设计 - 本迭代:不涉及数据库与持久化。 - 预留(迭代n再实现,用固定返回值占位): - `mcp_invocations`:记录调用日志、prompt、返回数量、时间、耗时、错误码。 - `generated_images`:记录 url、size、关联调用 id。 ## 数据实体结构深化 - 实体: - `GenerateImagesRequest` - `prompt`: string - `num_images`: int (1-3) - `size`: string (default "2K") - `watermark`: bool (default true) - `ImageItem` - `url`: string - `size`: string - `GenerateImagesResponse` - `images`: `ImageItem[]` - `count`: int ```mermaid erDiagram GenerateImagesRequest ||--o{ GenerateImagesResponse : produces GenerateImagesResponse ||--|{ ImageItem : contains GenerateImagesRequest { string prompt int num_images string size bool watermark } ImageItem { string url string size } GenerateImagesResponse { int count } ``` ## 配置项 - 本迭代不引入外部可变配置;常量硬编码于 `src/mcp_doubao/config.py`: - `BASE_URL = "https://ark.cn-beijing.volces.com/api/v3"` - `MODEL_ID = "doubao-seedream-4-0-250828"` - `ARK_API_KEY = "REPLACE_WITH_YOUR_KEY"` // 开发演示用,占位待手动替换 - `DEFAULT_SIZE = "2K"` - `MAX_IMAGES = 3` - 提示:按你的要求本迭代不做外部配置,API Key 将以内联常量形式存在(仅用于演示/开发)。 ## 模块化文件详解(File-by-File Breakdown) ### `src/mcp_doubao/server.py` - 用途:MCP 服务器入口;创建 MCP 应用、注册工具、启动 stdio。 - 函数/方法详解: - `run_stdio()` - 用途:启动 MCP stdio 服务。 - 输入:无。 - 输出:无(进程常驻)。 - 实现流程: 1. 初始化 MCP 应用。 2. 注册 `tools.generate_images`。 3. 监听 stdin/stdout(stdio transport)。 4. 路由请求,返回工具执行结果。 ### `src/mcp_doubao/tools.py` - 用途:声明 MCP 工具 `generate_images` 的参数校验与适配;调用 Doubao 客户端。 - 函数/方法详解: - `generate_images(prompt: str, num_images: int = 1, size: str = "2K", watermark: bool = True) -> dict` - 用途:将 MCP 请求转换为 Doubao Ark SDK 调用,并将响应规范化为 MCP 返回结构。 - 输入:见签名。 - 输出:`{"images": [{"url": str, "size": str}], "count": int}`。 - 时序: ```mermaid sequenceDiagram participant TL as tools.generate_images participant DC as doubao_client TL->>TL: validate(num_images in [1,3]) TL->>DC: generate_images(prompt, count=num_images, size, watermark) DC-->>TL: ImageItem[] TL-->>TL: build response {images, count} TL-->>TL: return response ``` ### `src/mcp_doubao/doubao_client.py` - 用途:封装豆包 Ark SDK 调用细节。 - 函数/方法详解: - `generate_images(prompt: str, count: int, size: str, watermark: bool) -> List[ImageItem]` - 输入:prompt、count、size、watermark。 - 输出:`ImageItem[]`(url、size)。 - 实现要点: - 初始化 Ark 客户端 `Ark(base_url=BASE_URL, api_key=ARK_API_KEY)`。 - 调用: - `client.images.generate(model=MODEL_ID, prompt=prompt, size=size, sequential_image_generation="auto", sequential_image_generation_options=SequentialImageGenerationOptions(max_images=count), response_format="url", watermark=watermark)`。 - 解析 `imagesResponse.data` → `ImageItem[]`。 ### `src/mcp_doubao/config.py` - 用途:集中放置常量(本迭代内嵌)。 - 常量:`BASE_URL`、`MODEL_ID`、`ARK_API_KEY`、`DEFAULT_SIZE`、`MAX_IMAGES`。 - 未来演进:可迁移为环境变量或 .env 管理。 ### `src/mcp_doubao/types.py` - 用途:请求/响应与内部模型定义(`TypedDict` 或 `dataclass`)。 - 类型:`GenerateImagesRequest`、`ImageItem`、`GenerateImagesResponse`。 ### `README.md` - 用途:说明安装、运行、客户端集成与工具示例。 - 关键内容: - 安装与运行(uv)。 - MCP 客户端如何注册(stdio)。 - 调用示例(使用 `prompt` 生成 1-3 张图片)。 - 注意事项(API Key 常量需手动替换)。 ## 项目初始化(使用 uv) - 目标:生成可用的 Python 包工程(src 布局),安装 MCP 与 Doubao Ark 依赖。 - 建议步骤(在项目根目录 `seedream_mcp/` 执行): 1. ✅ 已完成:项目目录已存在,`pyproject.toml` 已初始化。 2. ✅ 已完成:`uv add mcp` 已执行。 3. ✅ 已完成:`uv add "volcengine-python-sdk[ark]"` 已执行。 4. ✅ 已完成:`src/mcp_doubao/` 目录及相关 Python 模块已创建。 5. 待实现:编写各模块代码内容。 6. 运行服务器(开发):`uv run python -m mcp_doubao.server`。 - 说明: - `uv` 会生成 `uv.lock` 进行锁定;不需要手动编辑。 ## 最小可用测试方案 - 启动:`uv run python -m mcp_doubao.server`。 - 在 MCP 客户端注册 stdio 服务器。 - 调用工具: - `prompt`: "生成3张女孩和奶牛玩偶在游乐园开心地坐过山车的图片,涵盖早晨、中午、晚上" - `num_images`: 3 - `size`: "2K" - 预期:返回 3 个 `{url, size}`。 - 稳定性:本迭代无重试/超时;SDK 或服务异常将直接抛出提供方错误。 ## 迭代演进依据 - 配置外化:将常量(BASE_URL、MODEL_ID、API Key)迁移到环境变量与 `.env`,提供安全指引。 - 可靠性增强:超时、重试、限流与错误分类;并发控制。 - 观测性:结构化日志与调用统计;必要时持久化(数据库 schema 已预留)。 - 工具扩展:`get_models`、`get_quota`、`describe_image` 等;或支持流式、细化尺寸枚举。 - 能力扩展:`image-to-image` 与参考图;如需本地路径,需支持上传或本地→可访问 URL 的桥接模块。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mingforpc/seedream_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server