English | 中文
这个MCP服务器允许语言模型通过 SiliconFlow FLUX 系列模型生成图像。项目基于 Python、mcp-sdk
及 FastMCP
框架实现,专为 Streamable HTTP 传输协议 设计,旨在作为独立的 HTTP 服务运行,适用于 Docker 容器化部署或直接在物理/虚拟机上运行。
- 🎨 图像生成工具: 向 MCP 客户端提供一个名为
generate_image
的核心工具。 - 🤖 多模型支持: 允许在图像生成时指定不同的 SiliconFlow FLUX 模型。
- ⚙️ 参数可配置: 支持自定义图像的宽高比、推理步数、引导强度及种子(seed)。
- 🔑 API密钥轮询: 可配置一个以逗号分隔的 SiliconFlow API 密钥列表。服务器将以轮询方式使用这些密钥,以增强服务可靠性并辅助管理速率限制。
- 🔧 智能参数处理: 采用增强的参数处理机制,自动兼容各种MCP客户端的参数格式,提高稳定性。
- 🛠️ 环境变量配置: 通过
.env
文件或系统环境变量进行便捷配置。 - 🐳 Docker 就绪: 包含
Dockerfile
,简化容器化部署流程。 - 📜 日志记录与轮换: 实现日志文件轮换功能,便于服务监控与问题排查。
本服务器采用了增强的参数处理机制,能够自动处理不同客户端发送的各种参数格式,包括JSON字符串、嵌套结构等。但为了确保最佳交互效果和稳定性,强烈建议您在配置 MCP 客户端时,选用能够精确遵循工具调用规范大型语言模型,包括:
- Google Gemini 2.5 系列
- OpenAI GPT-4.x (不包括nano) / O 系列
- DeepSeek R1 / V3 系列
- Claude Sonnet / Haiku 系列
为什么这很重要?
一些较旧或能力较弱的小型模型,在理解和执行 MCP 工具调用指令时,可能无法严格按照工具中定义的 arguments
格式(例如,错误地添加包裹层、遗漏必需参数或错误处理参数类型)。这种不匹配可能导致工具调用失败,甚至在某些情况下导致服务器端出现崩溃。
- 🐍 Python: 版本需为
3.11
或更高。 - ⚡
uv
: 一个用 Rust 编写的高性能 Python 包管理工具。- 安装指南:
curl -LsSf https://astral.sh/uv/install.sh | sh
(Linux/macOS) 或powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
(Windows PowerShell)。请根据您的操作系统选择合适的命令,并在安装后重启终端以确保uv
命令可用。
- 安装指南:
- 🗝️ SiliconFlow API 密钥: 至少需要一个。请从 SiliconFlow官网 获取。
- 🐳 Docker (可选): 若计划在容器中运行本服务器,则需要安装 Docker。
-
克隆代码仓库:
git clone https://github.com/snakeying/Flux-mcp-server-python.git cd flux-mcp-server-python
-
创建并激活 Python 虚拟环境 (推荐): 使用
uv
:uv venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows (cmd) # .\.venv\Scripts\Activate.ps1 # Windows (PowerShell)
-
配置 API 密钥: 复制项目根目录下的
.env.example
文件为.env
:cp .env.example .env
编辑
.env
文件,并填入您的 SiliconFlow API 密钥:SILICONFLOW_API_KEYS=sk-您的密钥1,sk-您的密钥2_若有多个 # 可选: 覆盖默认的图像生成参数 # DEFAULT_MODEL_ID=Pro/black-forest-labs/FLUX.1-schnell # DEFAULT_ASPECT_RATIO="16:9" # DEFAULT_NUM_INFERENCE_STEPS=25 # DEFAULT_GUIDANCE_SCALE=7.0 # 可选: 覆盖默认的服务器 HTTP 设置 # MCP_HTTP_HOST=0.0.0.0 # MCP_HTTP_PORT=8008 # 注意:若在此处配置,本地运行命令可不带 --port 参数,除非想覆盖 # MCP_LOG_LEVEL=INFO # 日志级别: DEBUG, INFO, WARNING, ERROR, CRITICAL
- 若提供多个 API 密钥,请使用逗号分隔。服务器将按顺序轮流使用。
-
安装依赖及服务器: 在已激活的虚拟环境中执行:
uv pip install -e .
此命令将以可编辑模式安装服务器,使得
flux-mcp-server
命令在当前环境中可用。
完成安装和配置后,在激活的虚拟环境中执行:
flux-mcp-server --host 0.0.0.0 --port 8008
- 若仅允许本地连接,可将
0.0.0.0
替换为localhost
或127.0.0.1
。 8008
为服务器监听的端口号,可按需修改 (如果.env
文件中设置了MCP_HTTP_PORT
,命令行参数会覆盖它)。- 服务器启动后,控制台将显示运行日志,如
Uvicorn running on http://0.0.0.0:8008
。 - 日志文件将写入项目根目录下的
logs/flux_mcp_server.log
,并支持基于大小的轮换 (默认每 5MB 一个文件,保留 1 个备份)。
本服务器采用 Streamable HTTP 传输协议。请按以下方式配置您的 MCP 客户端:
- 启动 Python MCP 服务器: 参考上一节 (例如,执行
flux-mcp-server --port 8008
)。 - 在 MCP 客户端的服务器配置部分:
- 类型 (Type): 选择
可流式传输的HTTP (streamableHttp)
。 - URL: 输入正在运行的服务器的访问地址。
- 若服务器与客户端在同一台机器:
http://localhost:8008/mcp
(请将8008
替换为服务器实际监听的端口。/mcp
是客户端通常请求的路径,服务器会通过重定向(至/mcp/
)或直接处理来响应)。 - 若服务器部署在不同机器,请使用服务器的 IP 地址或主机名。
- 若服务器与客户端在同一台机器:
- 命令 (Command)、参数 (Arguments)、环境变量 (Environment Variables - 特指客户端对此服务器的配置): 这些字段应保持为空或不适用。服务器是独立运行的,其 API 密钥通过自身环境(如
.env
文件或 Docker 启动时传递的环境变量)获取。
- 类型 (Type): 选择
服务器运行且客户端配置完成后,即可使用 generate_image
工具,配合system prompt
效果更佳!
工具参数详解:
prompt
(字符串, 必需): 用于图像生成的详细文本提示 (推荐使用英文)。model_id
(字符串, 可选): 指定使用的 SiliconFlow 模型。- 默认值:
black-forest-labs/FLUX.1-schnell
(或由.env
文件中的DEFAULT_MODEL_ID
决定)。 - 支持模型列表:
black-forest-labs/FLUX.1-schnell
,black-forest-labs/FLUX.1-dev
,Pro/black-forest-labs/FLUX.1-schnell
,LoRA/black-forest-labs/FLUX.1-dev
。
- 默认值:
aspect_ratio
(字符串, 可选): 期望的图像宽高比。- 默认值:
1:1
(或由.env
文件中的DEFAULT_ASPECT_RATIO
决定)。 - 支持的宽高比字符串:
"1:1"
,"1:2"
,"3:2"
,"3:4"
,"16:9"
,"9:16"
。服务器将自动映射为 API 支持的像素尺寸。
- 默认值:
num_inference_steps
(整数, 可选): 推理步数 (有效范围 1-50)。- 默认值:
20
(或由.env
文件中的DEFAULT_NUM_INFERENCE_STEPS
决定)。
- 默认值:
guidance_scale
(浮点数, 可选): 提示词引导强度。- 默认值:
7.5
(或由.env
文件中的DEFAULT_GUIDANCE_SCALE
决定)。
- 默认值:
seed
(整数, 可选, >=0): 用于结果可复现的随机数种子。
工具输出格式:
该工具返回一个多行字符串,包含以下内容:
- 一个 HTML
<img>
标签,其src
属性指向生成的图像 URL,alt
文本根据输入的提示生成。⚠️ 重要提示: SiliconFlow 返回的图像 URL 具有时效性 (通常约为 30 分钟)。请及时保存您希望保留的图片。
- 生成该图像时实际使用的种子值 (如果适用)。
- 生成该图像时使用的完整提示文本。
-
构建 Docker 镜像 (在项目根目录下执行):
docker build -t flux-mcp-server-py:latest .
-
运行 Docker 容器:
方式一:通过
-e
单独设置环境变量 (适用于少量关键变量)docker run -d --rm \ -p 8008:8080 \ -e SILICONFLOW_API_KEYS="sk-您的密钥1,sk-您的密钥2" \ -e MCP_LOG_LEVEL="INFO" \ -v /您宿主机的日志目录路径:/app/logs \ --name my_flux_mcp_service \ flux-mcp-server-py:latest # 可选的额外环境变量: # -e MCP_HTTP_HOST="0.0.0.0" # 覆盖默认主机设置 # -e MCP_HTTP_PORT="8080" # 覆盖默认端口设置 # -e DEFAULT_MODEL_ID="Pro/black-forest-labs/FLUX.1-schnell" # 覆盖默认模型
参数说明:
-d
: 使容器在后台运行。--rm
: 容器停止时自动将其移除。-p 8008:8080
: 将宿主机的8008
端口映射到容器内部的8080
端口 (容器内服务监听8080
)。客户端应配置连接到宿主机的8008
端口 (例如http://localhost:8008/mcp
)。-e SILICONFLOW_API_KEYS="sk-您的密钥1,sk-您的密钥2"
: 关键,通过环境变量向容器传递 API 密钥。-e MCP_LOG_LEVEL="INFO"
: (可选) 设置应用的日志级别。- 其他
-e
参数可用于覆盖代码或.env
文件中的默认设置,例如DEFAULT_MODEL_ID
等。 -v /您宿主机的日志目录路径:/app/logs
: 推荐。将宿主机的一个目录 (例如/data/flux_mcp_logs
,请替换为实际有效路径) 挂载到容器内的/app/logs
目录。此操作可将容器产生的日志文件持久化存储到宿主机。请确保宿主机上的该目录已创建。--name my_flux_mcp_service
: 为容器指定一个易于管理的名称。flux-mcp-server-py:latest
: 您构建的 Docker 镜像名称及标签。
方式二:通过
--env-file
传递所有配置 (推荐用于管理多个配置项)如果您在本地有一个
.env
文件 (可以从.env.example
复制并修改),并且希望容器使用该文件中的所有配置,可以使用--env-file
标志:docker run -d --rm \ -p 8008:8080 \ --env-file ./.env \ -v /您宿主机的日志目录路径:/app/logs \ --name my_flux_mcp_service \ flux-mcp-server-py:latest # 注意: .env 文件应位于执行 docker run 命令的当前目录下
- 使用此方式时,Docker 会读取指定的
.env
文件,并将其中的每一行KEY=VALUE
设置为容器的环境变量。 - 这对于管理较多配置项(如 API 密钥、默认模型、日志级别等)更为便捷,无需在命令行中通过多个
-e
手动指定。 - 注意:通过
--env-file
设置的变量会覆盖 Dockerfile 中ENV
指令设置的同名变量,但可能会被后续的-e
标志覆盖(如果同时使用)。
- 请检查服务器的控制台输出以及项目根目录下
logs/flux_mcp_server.log
文件中的日志信息。 - 确认
.env
文件中的SILICONFLOW_API_KEYS
已正确配置且密钥有效。 - 确保 Python 环境版本为
3.11
或更高。 - 检查
uvicorn
及项目其他依赖是否已在当前 Python 环境中正确安装。 - 若从其他设备连接服务器,请确保服务器启动时使用了
--host 0.0.0.0
,并且网络防火墙允许访问指定端口。 - 若遇到与 MCP 协议本身相关的问题或疑问,可以查阅 Model Context Protocol 官方文档。
本项目基于 MIT 许可证授权。