OpenRouter / VectorEngine Image MCP (VS Code Extension)
这是一个 VS Code 原生的 MCP 服务器扩展,用可配置的图像上游给 Copilot 增加可调用工具。
当前支持两个上游服务端点,默认服务端点为 OpenRouter。
- OpenRouter (必选/默认端点)
- 向量引擎 VectorEngine (可选供应商)。由于中国地区用户可能无法访问 OpenRouter,提供此作为备选服务。点击此处注册 VectorEngine
当前提供两个工具:
generate_image: 生成图片,并把结果保存到当前工作区
list_image_models: 列出服务器内置的模型建议、价格信息,并尽量拉取实时图片模型列表
它的行为更接近 read / edit 这类工具:
- 接受结构化参数
- 在工作区内读写真实文件
- 返回可消费的结果摘要,而不是只给一段自由文本
功能
- 根据配置自动切换 OpenRouter 或 VectorEngine
- OpenRouter 走
/api/v1/chat/completions
- VectorEngine 支持
/v1/chat/completions、/v1/images/generations、/v1/images/edits
- 支持
modalities 图片输出
- 支持参考图输入
- 参考图既可以是工作区内的本地图片路径,也可以是
http(s) URL
- 把返回的 base64 data URL 保存到工作区内
- 默认写入
generated-images/
- 可选控制模型、宽高比、图片尺寸和输出目录
generate_image 支持在不写具体模型名时用 pickBy=price|quality|edit 自动选型
- 内置 OpenRouter 和 VectorEngine 两份图片模型目录,并尽量拉取实时模型列表
list_image_models 会输出价格、计费方式、成本档和分辨率提示,方便模型自己在“省钱”和“画质”之间权衡
list_image_models 支持 sortBy=price|quality|edit,可按便宜优先、画质优先、编辑优先排序
- OpenRouter 目录会优先解析
/models 的实时 pricing 字段,并按 1 USD ≈ 7 CNY 给出人民币估算,便于和 VectorEngine 近似对比
插件配置
请在 VS Code 设置 (Settings) 中搜索 OpenRouter Image MCP,并配置以下选项:
Openrouter Api Key (必填): 你的 OpenRouter API Key
Vectorengine Api Key (选填): 你的 VectorEngine API Key
由于这是一个原生的 VS Code MCP 插件,你不再需要手工编辑工作区内的 .env 文件。配置好 Key 以后,Copilot Chat 以及其他兼容 MCP 的插件即可直接调用 openrouter-image-mcp Provider。
兼容性说明:
- 旧的
OPENROUTER_API_KEY、OPENROUTER_BASE_URL、OPENROUTER_IMAGE_MODEL 仍然可用
- 如果你把旧的
OPENROUTER_BASE_URL 指到 https://api.vectorengine.ai/v1,服务器也会自动识别为 VectorEngine 模式
- 也支持
VECTORENGINE_API_KEY、VECTORENGINE_BASE_URL、VECTORENGINE_IMAGE_MODEL
- 如果你希望在同一个 MCP 里同时可选两个上游,推荐同时配置
OPENROUTER_* 和 VECTORENGINE_*;然后在调用工具时通过 provider 参数按次覆盖
优先级和常见误区:
- 如果你填写的是通用变量
IMAGE_PROVIDER、IMAGE_API_KEY、IMAGE_API_BASE_URL、IMAGE_MODEL,它们会优先生效
- 如果你同时保留了
OPENROUTER_* 和 VECTORENGINE_*,只是新增 VECTORENGINE_API_KEY 并不会自动把默认 provider 切到 VectorEngine
- 想把默认 provider 切到 VectorEngine,请显式设置
IMAGE_PROVIDER=vectorengine,或者在工具调用时传 provider=vectorengine
- 改完
.env 后必须重启 openrouterImage MCP 服务器;仅保存 .env 不会自动让已运行的 MCP 进程重新加载环境变量
VS Code 已通过 .vscode/mcp.json 配好这个服务器。改完 .env 后,在命令面板里运行 MCP: List Servers,对 openrouterImage 执行 restart 即可。
向量引擎支持范围
当前接入的是最适合这个 MCP 使用方式的一层:
- OpenAI 兼容图片接口:
/v1/images/generations、/v1/images/edits
- Gemini chat 兼容图片接口:
/v1/chat/completions
这意味着以下模型家族可以直接纳入统一的 generate_image 工具:
gpt-image-1 / gpt-image-1.5
gpt-image-1-mini / gpt-image-1-all / gpt-image-1.5-all
dall-e-3
flux-kontext-pro / flux-kontext-max
flux-dev / flux-schnell / flux-pro / flux-pro-max / flux-pro-1.1-ultra
grok-imagine-image / grok-imagine-image-pro
gemini-2.5-flash-image、gemini-2.5-flash-image-preview、gemini-3.1-flash-image-preview、gemini-3-pro-image-preview
qwen-image-max / qwen-image-edit-2509 / z-image-turbo
doubao-seedream-3.0 / doubao-seededit-3.0 / doubao-seedream-4.0 / doubao-seedream-4.5 / doubao-seedream-5.0
暂未统一封装的,是向量引擎里那些需要独立任务流或专有请求格式的模型,例如 Midjourney、Ideogram、Kling、VIDU 等。它们不是这个版本的 generate_image 接口目标范围。
两种上游怎么合并
可以合并,但要分两层看:
- 目录层:已经支持合并。
list_image_models 现在可传 provider=all,把 OpenRouter 和 VectorEngine 的目录合并输出,并保留每条模型所属 provider。
- 调用层:也支持按次覆盖。
generate_image 现在可传 provider=openrouter 或 provider=vectorengine,不必每次都改 .env 再重启。
这样做的好处是:
- 模型先用
list_image_models(provider=all) 横向比较价格和能力
- 再在真正生成时选择更合适的 provider
如果你不想让上游 LLM 每次都先浏览完整目录,可以直接在 generate_image 里省略 model,改传 pickBy:
pickBy=price: 倾向低成本
pickBy=quality: 倾向高质量
pickBy=edit: 倾向参考图编辑能力
当 provider 也省略时,服务器会优先按当前配置自动选;而在 price、quality、edit 这几种模式下,如果两个 provider 都已配置,服务器可以跨 OpenRouter 和 VectorEngine 自动挑一个更合适的模型。
不建议把两个上游在 generate_image 里做完全自动无感路由,因为同名模型在不同上游的可用参数、价格和稳定性可能并不完全一致。现在的做法是“目录合并 + 调用显式选 provider”,边界更清楚。
全局安装
如果你不想把当前源码目录当作日常运行位置,推荐把这个 MCP 服务器安装到一个单独目录,例如:
C:\Tools\openrouter-image-mcp
推荐步骤:
1. 把源码放到单独目录
你可以把整个项目复制、移动,或者重新 clone 到别的位置,例如:
git clone <你的仓库地址> C:\Tools\openrouter-image-mcp
Set-Location C:\Tools\openrouter-image-mcp
如果你不是从 Git 安装,也可以直接把当前目录内容复制过去。
2. 在安装目录执行依赖安装
Set-Location C:\Tools\openrouter-image-mcp
npm install
3. 注册全局命令
这个包现在提供了一个可执行命令:
openrouter-image-mcp
你可以在安装目录执行:
npm install -g .
这一步会把 openrouter-image-mcp 注册到 npm 全局命令目录。
如果你只是想先验证打包是否正常,也可以执行:
npm pack
4. 改成用户级 MCP 配置
不要再依赖当前工作区里的 .vscode/mcp.json。改用用户级 mcp.json:
- 在 VS Code 里运行
MCP: Open User Configuration
- 把
examples/user-mcp.example.json 的内容复制进去
- 保存后重启
openrouterImage
这个示例做了两件关键的事:
command 使用全局命令 openrouter-image-mcp
cwd 使用 ${workspaceFolder},也就是把“当前打开的工作区”当作运行目标,而不是安装目录
如果你想让 VS Code 像填写 OpenRouter key 一样也弹出 VectorEngine 的全局输入项,关键就是在用户级 mcp.json 里同时增加:
- 一个
inputs 条目,比如 id: "vectorengine-api-key"
- 一条
env 映射:"VECTORENGINE_API_KEY": "${input:vectorengine-api-key}"
示例里已经配好了这两项,同时还加了:
VECTORENGINE_BASE_URL=https://api.vectorengine.ai/v1
VECTORENGINE_IMAGE_MODEL=${input:vectorengine-image-model}
这样保存后,VS Code 就会像处理 OpenRouter 一样记住这组用户级输入;MCP 服务启动时会把它注入成 VECTORENGINE_API_KEY 环境变量。
5. 全局可用范围
改成用户级配置以后,这个 MCP 服务器会在任意打开的工作区里可用,而不是只在当前这个仓库里可用。
但它仍然是“工作区驱动”的工具,所以有一个边界:
- 打开任意文件夹或 workspace 时可用
- 打开纯空白窗口、没有 workspace 时,不适合使用,因为它需要一个工作区根目录来读写图片文件
6. 如果命令不在 PATH 里
在 Windows 上,npm 全局命令通常位于:
%AppData%\npm
如果 VS Code 找不到 openrouter-image-mcp,可以把用户级 mcp.json 里的 command 改成绝对路径,例如:
{
"command": "C:/Users/<用户名>/AppData/Roaming/npm/openrouter-image-mcp.cmd"
}
7. 如果你不想当前仓库继续注册这个服务器
你可以删除或重命名当前仓库里的 .vscode/mcp.json,避免工作区级和用户级配置同时存在。
在 Chat 中使用
安装依赖后,VS Code 识别到 openrouterImage 服务器,就会把这两个工具暴露出来。
1. 纯文字生图
用 generate_image 生成一张清晨薄雾中的海边灯塔海报,16:9,输出到 generated-images/posters
如果你不知道该选哪个模型:
用 generate_image,pickBy=quality,生成一张电影感很强的海边灯塔海报
2. 带参考图编辑
用 generate_image 基于 assets/reference/lighthouse.png 这张参考图,生成一张更复古的海报,输出到 generated-images/posters
3. 查询模型
调用 list_image_models,列出适合参考图编辑的模型
如果你已经切到向量引擎,也可以直接这样问:
调用 list_image_models,列出向量引擎里适合海报编辑的模型
如果你想跨两个上游一起比较:
调用 list_image_models,provider=all,sortBy=price,列出便宜但支持参考图编辑的模型
如果你想先看高质量模型:
调用 list_image_models,provider=all,sortBy=quality,列出更适合精品出图的模型
如果你想先看编辑能力强的模型:
调用 list_image_models,provider=vectorengine,sortBy=edit,列出适合参考图编辑的模型
如果你想临时改用另一个上游生成:
用 generate_image,provider=vectorengine,model=qwen-image-max,生成一张中文海报
如果你知道模型名但不知道它属于哪个 provider,也可以直接写模型名,服务器会在常见模型上尽量自动识别 provider:
用 generate_image,model=qwen-image-max,生成一张中文科技海报
工具参数
generate_image
prompt: 图片提示词,必填
provider: 可选。openrouter 或 vectorengine。不传时使用 .env 的默认 provider
model: 模型 ID。若省略,可结合 pickBy 由服务器自动选型
pickBy: 自动选型方式。default 为默认推荐,price 为便宜优先,quality 为画质优先,edit 为编辑优先
outputDir: 工作区内输出目录,默认 generated-images
fileNamePrefix: 文件名前缀
aspectRatio: 例如 1:1、16:9、9:16
imageSize: OpenRouter 可用 1K、2K、4K;VectorEngine 的 OpenAI 兼容图片接口更推荐传显式尺寸,例如 1024x1024、1536x1024、1024x1536
referenceImages: 可选数组。每项可以是工作区内图片路径、http(s) URL,或 data URL
includeText: 是否同时请求模型返回说明文本。对于仅支持图片输出的模型,服务器会自动降级为只请求图片;VectorEngine 的 /images/* 路由通常只返回图片
本地参考图目前支持的文件类型:
.png
.jpg
.jpeg
.webp
.gif
list_image_models
provider: 可选。openrouter、vectorengine 或 all。all 会合并两个上游目录
search: 可选关键词过滤
maxResults: 最多返回多少个模型,默认 12
includePreview: 是否包含 preview 模型,默认 true
sortBy: 排序方式。default 为默认推荐顺序,price 为便宜优先,quality 为画质优先,edit 为编辑优先
输出里会标明:
- 模型是否支持参考图输入
- 模型是否支持同时返回文本说明
- 模型价格、计费方式和成本档
- 是否有分辨率相关提示
- 哪些模型更适合默认使用、复杂编辑或高质量输出
可用范围
当前这个 MCP 服务器配置写在 .vscode/mcp.json,所以它是工作区级别的,不是全局级别的。
这意味着:
- 打开当前这个文件夹时可用
- 把这个文件夹作为 multi-root workspace 的一个根目录打开时也可用
- 打开别的、无关的文件夹时不可用
如果你想让它在任意 VS Code 文件夹里都可用,需要把配置改到用户级 mcp.json,并使用全局命令或绝对路径启动服务器。
本地开发
npm install
npm test
npm run smoke
npm test 会验证:
- 图片保存逻辑
- 本地参考图转 data URL 的上传逻辑
- OpenRouter 与 VectorEngine 的主要路由行为
- 模型列表工具的基本行为
npm run smoke 会真正启动 MCP 服务器并通过 MCP 客户端连接,确认:
generate_image 工具已注册
list_image_models 工具已注册
- 模型列表工具可正常调用
- 有 API key 时可以真实出图
- 没有 API key 时能返回清晰错误
说明
- 图片工具只允许读写当前工作区内路径。
- OpenRouter 官方图片文档当前推荐使用
/api/v1/chat/completions,并通过 messages 多模态内容、modalities 与 image_config 控制图片生成。
- VectorEngine 当前在本项目里分两类接入:Gemini 图片模型走
/v1/chat/completions,OpenAI 兼容图片模型走 /v1/images/generations 或 /v1/images/edits。
- OpenRouter 支持把参考图作为
image_url 发送;VectorEngine 的图片编辑接口会把参考图转换为 multipart/form-data 上传。