OpenRouter MCP Multimodal Server
The only MCP server that does text + image + audio + video analysis AND generation in one package. Connect Claude Desktop, Cursor, Kiro, VS Code, Windsurf, or Cline to 300+ LLMs via OpenRouter.
Install · Tools · Examples · Config · Changelog
______________________________________________________________________

安装
npx -y @stabgan/openrouter-mcp-multimodal # that's it — needs OPENROUTER_API_KEY env var获取免费的API密钥→ openrouter.ai/keys
一键安装
Kiro Cursor VS Code VS Code Insiders Claude DesktopManual config — Add to claude_desktop_config.json WindsurfManual config — Add to ~/.codeium/windsurf/mcp_config.json ClineManual config — Add via Cline MCP settings Smitherynpx -y @smithery/cli install @stabgan/openrouter-mcp-multimodal --client claude
点击后,目标客户端会打开一个确认提示。粘贴您的 OPENROUTER_API_KEY --deeplink提供了一个占位符,因此共享链接中不会出现任何秘密。手动设定
npx (recommended)
{
"mcpServers": {
"openrouter": {
"command": "npx",
"args": ["-y", "@stabgan/openrouter-mcp-multimodal"],
"env": {
"OPENROUTER_API_KEY": "sk-or-v1-..."
}
}
}
}Docker
{
"mcpServers": {
"openrouter": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "OPENROUTER_API_KEY=sk-or-v1-...",
"stabgan/openrouter-mcp-multimodal:latest"
]
}
}
}Global install
npm install -g @stabgan/openrouter-mcp-multimodal{
"mcpServers": {
"openrouter": {
"command": "openrouter-multimodal",
"env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }
}
}
}为什么是这个?
| 能力 | 此服务器 | 其他 |
|---|---|---|
| 与300多名模特进行文字聊天 | ✅ | ✅ |
| 图像分析(视觉) | ✅ 夏普优化 | 一些 |
| 音频分析+生成 | ✅ | ❌ |
| 视频理解 (mp4/mov/webm) | ✅ | ❌ |
| 视频生成 (见3.1,Sora 2 Pro) | ✅ | ❌ |
| 响应缓存(命中时为零令牌) | ✅ | ❌ |
| 网络搜索、重新排序、健康检查 | ✅ | ❌ |
| MCP 2025-06-18规范(结构化输出、进度) | ✅ | ❌ |
工具
| 工具 | 它做什么 |
|---|---|
chat_completion | 向任何模型发送消息。支持提供者路由、模型后缀(:nitro, :floor, :exacto)、响应缓存、推理直通和网络搜索。 |
analyze_image | 分析本地文件、URL或数据URI中的图像。使用sharp自动优化。 |
analyze_audio | 从文件、URL或数据URI转录/分析音频(WAV、MP3、FLAC、OGG) |
analyze_video | 从文件、URL或数据URI分析视频(mp4、mpeg、mov、webm) |
generate_image | 生成具有宽高比控制和可选路径沙盒磁盘保存的图像。 |
generate_audio | 生成语音或音乐。自动检测格式,将原始PCM封装在WAV中。 |
generate_video | 通过异步API(Veo 3.1/Sora 2 Pro/Seedance/Wan)生成带有MCP进度通知的视频。 |
generate_video_from_image | 图像到视频。架构比 generate_video 以获得更高的刀具调用精度。 |
get_video_status | 继续按ID轮询视频生成作业 |
rerank_documents | 根据查询重新排列文档(Cohere、Fireworks)。 |
search_models | 按名称、提供商或形态搜索/过滤模型。分页。 |
get_model_info | 获取任何型号的定价、上下文长度和功能。 |
validate_model | 检查OpenRouter上是否存在型号ID。 |
health_check | 验证API密钥、OpenRouter可达性、服务器+协议版本。 |
所有错误都带有_meta.code从封闭的分类学来看:INVALID_INPUT·UNSAFE_PATH·UPSTREAM_HTTP·UPSTREAM_TIMEOUT·UPSTREAM_REFUSED·UNSUPPORTED_FORMAT·RESOURCE_TOO_LARGE·ZDR_INCOMPATIBLE·MODEL_NOT_FOUND·JOB_FAILED·JOB_STILL_RUNNING·INTERNAL
用法示例
与提供商路由聊天:
{
"tool": "chat_completion",
"arguments": {
"model": "anthropic/claude-sonnet-4",
"messages": [{ "role": "user", "content": "Summarize this document" }],
"provider": { "sort": "price", "ignore": ["openai"], "data_collection": "deny" }
}
}从Claude Desktop生成视频:
{
"tool": "generate_video",
"arguments": {
"model": "google/veo-3.1",
"prompt": "a calm river at sunrise, cinematic drone shot",
"duration": 4,
"save_path": "./river.mp4"
}
}分析图像:
{
"tool": "analyze_image",
"arguments": {
"image": "/path/to/photo.jpg",
"prompt": "Describe what you see in detail"
}
}使用缓存+推理进行聊天(v4.5):
{
"tool": "chat_completion",
"arguments": {
"model": "deepseek/deepseek-r1",
"messages": [{ "role": "user", "content": "Prove sqrt(2) is irrational" }],
"cache": true,
"include_reasoning": true
}
}网络搜索:
{
"tool": "chat_completion",
"arguments": {
"model": "openai/gpt-4o",
"messages": [{ "role": "user", "content": "What shipped in OpenRouter last week?" }],
"online": true
}
}重新排列文档:
{
"tool": "rerank_documents",
"arguments": {
"query": "best practices for MCP server auth",
"documents": ["doc A text...", "doc B text...", "doc C text..."],
"top_n": 3
}
}配置
Environment variables (click to expand)
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
OPENROUTER_API_KEY | 是 | - | 您的OpenRouter API密钥 |
OPENROUTER_DEFAULT_MODEL | 没有 | nvidia/nemotron-nano-12b-v2-vl:free | 聊天+分析工具的默认模型 |
DEFAULT_MODEL | 否 | -- | 以上别名 |
OPENROUTER_MAX_TOKENS | 否 | -- | 默认值 max_tokens 当不是按请求设置时 |
OPENROUTER_PROVIDER_QUANTIZATIONS | 否 | -- | CSV。按量化进行滤波(例如。 fp16,int8) |
OPENROUTER_PROVIDER_IGNORE | 否 | -- | CSV。排除供应商蛞蝓 |
OPENROUTER_PROVIDER_SORT | 没有 | -- | price / throughput / latency |
OPENROUTER_PROVIDER_ORDER | 没有提供程序ID的JSON数组或CSV | ||
OPENROUTER_PROVIDER_REQUIRE_PARAMETERS | 没有 | -- | true / false |
OPENROUTER_PROVIDER_DATA_COLLECTION | 没有 | -- | allow / deny |
OPENROUTER_PROVIDER_ALLOW_FALLBACKS | 没有 | -- | true / false |
OPENROUTER_CACHE_RESPONSES | 没有 | -- | 1 / true。在服务器范围内启用响应缓存 |
OPENROUTER_INCLUDE_REASONING | 没有 | -- | 1 / true。在服务器范围内启用推理传递 |
OPENROUTER_MODEL_CACHE_TTL_MS | 没有 | 3600000 | 模型缓存TTL(ms) |
OPENROUTER_IMAGE_MAX_DIMENSION | 没有 | 800 | 调整大小的最长边(px) |
OPENROUTER_IMAGE_JPEG_QUALITY | 没有 | 80 | JPEG质量(1–100) |
OPENROUTER_IMAGE_FETCH_TIMEOUT_MS | 没有 | 30000 | 图像URL超时 |
OPENROUTER_IMAGE_MAX_DOWNLOAD_BYTES | 没有 | 26214400 | 图像URL大小上限(~25 MB) |
OPENROUTER_IMAGE_MAX_REDIRECTS | 没有 | 8 | 图像URL重定向上限 |
OPENROUTER_IMAGE_MAX_DATA_URL_BYTES | 没有 | 20971520 | 图像数据URL大小上限(约20 MB) |
OPENROUTER_AUDIO_FETCH_TIMEOUT_MS | 没有 | 30000 | 音频URL超时 |
OPENROUTER_AUDIO_MAX_DOWNLOAD_BYTES | 没有 | 26214400 | 音频URL大小上限(~25 MB) |
OPENROUTER_AUDIO_MAX_REDIRECTS | 没有 | 8 | 音频URL重定向上限 |
OPENROUTER_AUDIO_MAX_DATA_URL_BYTES | 没有 | 20971520 | 音频数据URL大小上限 |
OPENROUTER_DEFAULT_VIDEO_MODEL | 没有 | google/gemini-2.5-flash | 默认值为 analyze_video |
OPENROUTER_DEFAULT_VIDEO_GEN_MODEL | 没有 | google/veo-3.1 | 默认值为 generate_video |
OPENROUTER_VIDEO_FETCH_TIMEOUT_MS | 没有 | 60000 | 视频URL超时 |
OPENROUTER_VIDEO_MAX_DOWNLOAD_BYTES | 没有 | 104857600 | 视频URL大小上限(~100 MB) |
OPENROUTER_VIDEO_MAX_REDIRECTS | 没有 | 8 | 视频URL重定向上限 |
OPENROUTER_VIDEO_MAX_DATA_URL_BYTES | 没有 | 104857600 | 视频数据URL大小上限 |
OPENROUTER_VIDEO_POLL_INTERVAL_MS | 没有 | 15000 | 异步视频轮询节奏 |
OPENROUTER_VIDEO_MAX_WAIT_MS | 没有 | 600000 | 返回可恢复句柄前的最大等待时间 |
OPENROUTER_VIDEO_GEN_MAX_BYTES | 没有 | 268435456 | 生成的视频下载上限(~256 MB) |
OPENROUTER_VIDEO_INLINE_MAX_BYTES | 没有 | 10485760 | 内联视频上限(~10 MB) |
OPENROUTER_OUTPUT_DIR | 没有 | process.cwd() | 沙盒根 save_path |
OPENROUTER_ALLOW_UNSAFE_PATHS | 没有 | -- | 1 禁用沙盒 |
OPENROUTER_LOG_LEVEL | 没有 | info | error / warn / info / debug |
安全
- SSRF保护 --URL获取块私有/链接本地/保留的IPv4和IPv6目标(环回、映射、兼容、多播、6to4、Teredo、ORCHID)。
- 路径沙盒 —
save_path已解决OPENROUTER_OUTPUT_DIR;遍历尝试被拒绝。以(权力)否决OPENROUTER_ALLOW_UNSAFE_PATHS=1. - 无凭证泄漏 -API密钥从不在日志、响应或错误中回显。审计日志记录了每次付费操作调用。
Architecture
src/
├── index.ts # Entry, env validation, graceful shutdown
├── tool-handlers.ts # 14 tools (annotated) + dispatch
├── model-cache.ts # TTL + in-flight coalescing
├── openrouter-api.ts # REST client (chat + /videos)
├── errors.ts # Closed ErrorCode enum
├── logger.ts # JSON-line structured logger
└── tool-handlers/
├── fetch-utils.ts # SSRF, bounded fetch, data-URL parser
├── openrouter-errors.ts # SDK/HTTP → ErrorCode classifier
├── completion-utils.ts # Reasoning-model cutoff detection
├── path-safety.ts # save_path sandbox
├── chat-completion.ts # Text + multimodal chat
├── analyze-image.ts # Vision analysis
├── analyze-audio.ts # Audio transcription
├── analyze-video.ts # Video understanding
├── generate-image.ts # Image generation
├── generate-audio.ts # Audio generation + streaming
├── generate-video.ts # Video generation (async)
├── image-utils.ts # Sharp optimization, MIME sniffing
├── audio-utils.ts # Audio format detection
├── video-utils.ts # Video format detection
├── search-models.ts # Model search
├── get-model-info.ts # Model detail lookup
└── validate-model.ts # Model existence checkDesign Principles & Research
v4.5的设计借鉴了MCP的最佳实践和学术研究:
- 结果,而非行动 --工具封装了整个工作流(fetch→ 验证→ 调用→ 保存),而不是公开原始API基元。跟随 Phil Schmid的MCP制作指南.
- 平淡无奇的论点 --带有枚举的顶级图元可以降低工具调用失败率。由...支持 傅等(2025) 显示成功随着模式复杂性的增加而下降。
- 故障模式文档 --每个工具描述都包括“失败时间:”和“使用:”部分,提高了选择精度 斯拉普巴赫 (2026).
- 不受信任的内容标记 --分析工具标记输出
_meta.content_is_untrusted: true减轻间接快速注射(赵等人,《护爪》). - 带有重试提示的结构化错误 --关闭
_meta.code分类学+retry_after_seconds击败原始错误字符串。每 Apigene的12条规则. - MCP 2025-06-18合规性 --结构化产出(
outputSchema)、进度通知、工具注释(readOnlyHint,destructiveHint,idempotentHint,openWorldHint).
OpenRouter平台功能浮出水面: 响应缓存 · 网络搜索 · 推理令牌 · 汽车精确 · 重新排序 · 快速缓存
从v2升级
v3+是 添加剂 --没有删除任何工具模式或环境变量。
- 新工具:
analyze_video,generate_video,generate_video_from_image,get_video_status,rerank_documents,health_check - 结构化的
_meta.code在每个错误响应上 save_path默认情况下沙盒--setOPENROUTER_OUTPUT_DIR或OPENROUTER_ALLOW_UNSAFE_PATHS=1
发展
git clone https://github.com/stabgan/openrouter-mcp-multimodal.git
cd openrouter-mcp-multimodal
npm install && cp .env.example .env # Add your API key
npm run build && npm startnpm test # 288 unit tests, <1s
npm run test:integration # Live API tests (16 scenarios)
npm run lint
node scripts/live-e2e.mjs # 16 live E2E scenarios兼容性
许可证
Apache 2.0——请参阅 许可证.
贡献
欢迎发布问题和PR。请先打开一个问题以了解重大更改。
