stabgan/openrouter-mcp-multimodal

stabgan/openrouter-mcp-multimodal

от stabgan
Мультимодальный MCP-сервер для анализа и генерации текста, изображений, аудио и видео. Интегрируется с Claude Desktop, Cursor и другими клиентами через OpenRouter, давая доступ к 300+ моделям. Вклю...

OpenRouter MCP Multimodal — MCP server for chat, vision, audio, and video AI tools

OpenRouter MCP Multimodal

The MCP server for multimodal AI agents.
One install · 21 tools · 300+ OpenRouter models · text, vision, audio & video — analysis and generation.

npm version PyPI version GitHub release Docker version CI status Apache 2.0 license Node.js 22+

npm downloads Docker pulls MCP Registry Smithery MCP registry

Quick start · Tools · Examples · Security · Troubleshooting · Development · Releasing · FAQ


What is this?

OpenRouter MCP Multimodal is a production-grade Model Context Protocol (MCP) server — listed on the official MCP Registry as io.github.stabgan/openrouter-multimodal. It connects AI coding agents (Cursor, Claude Desktop, VS Code, Windsurf, Cline, and others) to OpenRouter's unified LLM API over stdio.

Unlike text-only MCP servers, one install covers the full multimodal surface:

Capability Tools Highlights
Chat chat_completion, start_chat_completion, get_chat_completion_status 300+ models, :nitro / :floor / :free / :online / :exacto suffixes, provider routing, web search, response caching, reasoning tokens, reasoning effort control, structured output (JSON Schema), async jobs, multi-model fusion, subagent delegation, response healing
Vision analyze_image, generate_image, generate_image_dedicated OCR, captioning, VQA, image generation with reference inputs, dedicated Image API with resolution/quality/format control
Audio analyze_audio, generate_audio, text_to_speech, speech_to_text Transcription, speech/music generation, dedicated TTS (Deepgram, ElevenLabs, OpenAI; free Deepgram default, voices, mp3/pcm), dedicated STT (Whisper, GPT-4o Transcribe, Voxtral, ElevenLabs Scribe)
Video analyze_video, generate_video, generate_video_from_image, get_video_status Clip understanding, Veo 3.1 / Seedance 2.5 / Kling v3.0 / Wan 2.7 / Grok Imagine Video generation with progress notifications
Embedding embed_text 37+ embedding models (text-embedding-3-small/large, Nomic, Jina, Voyage, etc.)
Decisions decide Structured yes/no, choice, or score decisions with calibrated probabilities (System One models)
Catalog search_models, get_model_info, validate_model, rerank_documents, health_check Model discovery, validation, reranking, ops health

Часто задаваемые вопросы

Инструменты были проиндексированы:
analyze_audioтолько чтениевнешний мир

Транскрибирует или анализирует один аудиофайл (WAV, MP3, FLAC, OGG и т. д.) с помощью мультимодальной модели. Результат помечается тегом _meta.content_is_untrusted: true. Используйте, когда: - У вас есть локальный аудиофайл или URL, и нужна транскрипция или анализ аудио - Формат - распространённый аудиоконтейнер, который распознаёт декодер НЕ используйте, когда: - Нужен синтез речи (text-to-speech) → используйте text_to_speech (отдельный инструмент, быстрее) или generate_audio (чат-маршрут, музыка/звуковые эффекты) - Нужна только транскрипция без вопросов и ответов → используйте speech_to_text - На входе видео → используйте analyze_video (или сначала извлеките аудио) Удачные примеры: - { "audio_path": "meeting.wav", "question": "Транскрибируй дословно." } - { "audio_path": "https://example.com/podcast.mp3", "question": "Кратко опиши темы." } Неудачные примеры: - { "audio_path": "/etc/shadow" } → UNSAFE_PATH - { "path": "song.mp3" } → неверный ключ; используйте audio_path - Бинарный файл не аудиоформата, переименованный в .mp3 → UNSUPPORTED_FORMAT Завершается ошибкой, когда: - INVALID_INPUT: отсутствует audio_path - UNSAFE_PATH: локальный путь вышел за пределы песочницы - UNSUPPORTED_FORMAT: файл не распознан как аудио - RESOURCE_TOO_LARGE: превышен допустимый размер Работает с: generate_audio, search_models.

Параметры
  • audio_pathstringобязательный

    Путь к локальному файлу (в песочнице), URL http(s) или data URL (аудио в кодировке base64).

  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_inputboolean
  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • modelstring

    ID мультимодальной модели (по умолчанию: google/gemini-2.5-flash).

  • questionstring

    Вопрос или инструкция. По умолчанию: «Пожалуйста, расшифруй и проанализируй этот аудиофайл.»

analyze_imageтолько чтениевнешний мир

Анализирует одно изображение с помощью vision-модели. Принимает локальный путь в песочнице ввода, https URL или base64 data URL. Результат создаётся моделью и помечается тегом _meta.content_is_untrusted: true. Используйте, когда: - У вас есть одно изображение, и нужны OCR, генерация подписей или визуальные вопросы и ответы - Изображение: локальный файл в песочнице ввода, публичный https URL или data URL НЕ используйте, когда: - Нужно сгенерировать новое изображение → используйте generate_image или generate_image_dedicated - Нужен пакетный анализ нескольких файлов одним вызовом → не поддерживается; вызывайте по одному разу на каждое изображение - Нужен многоходовой визуальный чат с несколькими изображениями → используйте chat_completion с vision-моделью (analyze_image работает только с одним изображением) Хорошие примеры: - { "image_path": "diagram.png", "question": "Перечисли все надписи на этой диаграмме." } - { "image_path": "https://example.com/photo.jpg", "question": "Опиши сцену." } - { "image_path": "scan.jpg", "question": "Извлеки текст", "model": "google/gemini-2.5-flash" } (необязательное переопределение модели) Плохие примеры: - { "url": "photo.jpg" } → неверный ключ; используйте image_path - { "prompt": "describe" } → неверный ключ; используйте question (необязательный; по умолчанию: «Что на этом изображении?») - { "image_path": "../../../etc/passwd" } → UNSAFE_PATH (выход за пределы песочницы) Возвращает ошибку, когда: - INVALID_INPUT: image_path отсутствует или имеет неверный формат - UNSAFE_PATH: локальный путь вышел за пределы песочницы ввода - RESOURCE_TOO_LARGE: изображение превысило максимальный размер загрузки - UPSTREAM_REFUSED: блокировка SSRF, некорректный URL или политика контента Работает с: search_models, generate_image.

Параметры
  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_inputboolean

    Прикрепляет cache_control: ephemeral к блоку изображения для кэширования промптов Anthropic / Gemini.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • image_pathstringобязательный

    Локальный путь (песочница OPENROUTER_INPUT_DIR), https URL или data URL. Хорошо: "photo.jpg". Плохо: "url": "..." (неверный ключ), "/etc/passwd" (UNSAFE_PATH).

  • modelstring

    ID vision-модели (необязательно; по умолчанию на сервере стоит бесплатная мультимодальная модель).

  • questionstring

    Необязательный вопрос. По умолчанию: "Что на этом изображении?". Неправильно: использовать prompt (неверный ключ для этого инструмента).

analyze_videoтолько чтениевнешний мир

Описывает или анализирует один видеофайл (mp4, mpeg, mov, webm). Модель по умолчанию: google/gemini-2.5-flash. В выводе тег _meta.content_is_untrusted: true. Большие файлы полностью буферизируются — предпочитайте короткие клипы. Используй, когда: - Нужна сводка, описание сцен или вопросы-ответы по видеофайлу. - Видео вписывается в лимиты и читается декодером. НЕ используй, когда: - Хочешь сгенерировать видео → используй generate_video. - Нужен только звук → используй analyze_audio. - Видео очень большое → сначала обрежь или ожидай RESOURCE_TOO_LARGE. Хорошие примеры: - { "video_path": "clip.mp4", "question": "Что происходит в первые 30 секунд?" } - { "video_path": "demo.webm", "question": "Перечисли текст на экране." } Плохие примеры: - { "video_path": "../secret.mp4" } → UNSAFE_PATH - Ожидание покадровых временных меток без явного запроса в подсказке. - Использование analyze_video для асинхронного статуса генерации → используй get_video_status. Ошибки: - INVALID_INPUT: отсутствует video_path. - UNSAFE_PATH: путь вышел за пределы изолированной среды. - UNSUPPORTED_FORMAT: нераспознанный видеоформат. - RESOURCE_TOO_LARGE: превышает лимит загрузки. Совместим с: generate_video, get_video_status, search_models.

Параметры
  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_inputboolean
  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • modelstring

    ID модели с поддержкой видео (по умолчанию: google/gemini-2.5-flash).

  • questionstring

    Необязательный вопрос. По умолчанию: "Опишите, что происходит в этом видео, шаг за шагом."

  • video_pathstringобязательный

    Локальный путь к файлу (в песочнице), URL http(s) или data URL в base64. Поддерживаемые контейнеры: mp4, mpeg, mov, webm.

chat_completionвнешний мир

Отправляет сообщения в чат-модель OpenRouter и возвращает текстовый ответ. Поддерживает маршрутизацию провайдеров, суффиксы моделей (:nitro самая быстрая, :floor самая дешёвая, :free бесплатная, :online веб-поиск, :exacto точность инструментов), токены рассуждений, веб-поиск (online: true) и кэширование ответов. Используйте, когда: - Вам нужна генерация текста, Q&A, суммаризация или многоходовой диалог - Вы хотите получить ответы с учётом веб-информации (online: true) - Вы уже знаете идентификатор модели (или полагаетесь на серверный вариант по умолчанию) Не используйте, когда: - На входе один файл изображения/аудио/видео → используйте analyze_image / analyze_audio / analyze_video (специализированные обёртки) - Вам нужно создать изображение, аудио или видео → используйте инструменты generate_* / text_to_speech - Вам нужно только проверить, существует ли модель → используйте validate_model Хорошие примеры: - { "messages": [{ "role": "user", "content": "Explain recursion in one paragraph." }] } - { "model": "openai/gpt-4o:nitro", "messages": [...], "online": true } для веб-поиска - { "messages": [...], "include_reasoning": true } для моделей chain-of-thought Плохие примеры: - { "messages": [] } → INVALID_INPUT (пустой массив) - { "image_path": "photo.jpg" } → не тот инструмент; используйте analyze_image - Передача путей к файлам внутри содержимого сообщения без настроенной vision-модели Ошибки возникают, когда: - INVALID_INPUT: массив messages пуст - UPSTREAM_REFUSED: недостаточно кредитов, сработала политика контента или превышен лимит запросов - UPSTREAM_TIMEOUT: вышестоящий сервис не ответил вовремя - MODEL_NOT_FOUND: model slug не существует в OpenRouter Работает с: validate_model, search_models.

Параметры
  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • include_reasoningboolean

    Отображает цепочку рассуждений модели в _meta.reasoning для моделей R1 / Opus / Gemini Thinking.

  • max_tokensnumber

    Максимальное количество токенов завершения. Если не задано, используется переменная окружения OPENROUTER_MAX_TOKENS.

  • messagesobject[]обязательный
  • modelstring

    Model ID (необязательно, использует серверное значение по умолчанию). Добавьте :nitro (самый быстрый), :floor (самый дешёвый), :free, :online (веб-поиск) или :exacto (точность работы с инструментами). Пример: openai/gpt-4o:nitro. Или передайте online: true для программного веб-поиска.

  • onlineboolean

    Включите веб-поисковый плагин OpenRouter (на базе Exa, $4 за 1000 результатов).

  • providerobject

    Переопределения маршрутизации провайдеров OpenRouter. Накладываются поверх значений по умолчанию из переменных окружения OPENROUTER_PROVIDER_*. См. https://openrouter.ai/docs/features/provider-routing

  • temperaturenumber

    По умолчанию: 20

  • web_max_resultsnumber

    Максимальное количество результатов веб-поиска при online: true (по умолчанию 5).

generate_audioвнешний мир

Генерирует речь или музыку через chat completions (маршрут modalities). Форматы: wav, mp3, flac, opus, pcm16. Модель по умолчанию: openai/gpt-audio, голос alloy. Для отдельного TTS со скоростью и инструкциями используйте text_to_speech. Используйте, когда: - Нужна музыка, звуковые эффекты или выразительная речь через чат-маршрут - Нужен вывод pcm16/wav из семейства gpt-audio НЕ используйте, когда: - Нужен быстрый отдельный TTS со скоростью и инструкциями → text_to_speech - Нужно транскрибировать существующее аудио → speech_to_text или analyze_audio - Промпт пустой Хорошие примеры: - { "prompt": "Say hello world in a calm voice." } - { "prompt": "Upbeat jingle", "save_path": "out/jingle.mp3" } Плохие примеры: - { "text": "hello" } → неверный ключ; используйте prompt - { "save_path": "../../../tmp/out.wav" } → UNSAFE_PATH Ошибки при: - INVALID_INPUT: промпт пустой - UNSAFE_PATH: save_path вышел за пределы песочницы - UPSTREAM_REFUSED: контентная политика или кредиты Работает с: analyze_audio.

Параметры
  • formatenum

    Выводит аудиоформат (по умолчанию: pcm16, при необходимости автоматически оборачивается в WAV).

  • modelstring

    Аудиомодель для chat-completions (по умолчанию: openai/gpt-audio).

  • promptstringобязательный

    Текстовый промпт для генерации речи или музыки.

  • save_pathstring

    Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Если задан, результат инструмента содержит только текст с _meta.save_path - без встроенного медиаблока. Если не задан, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если не превышает предел для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

  • voicestring

    Voice ID (по умолчанию: alloy). Зависит от модели.

generate_imageвнешний мир

Генерирует изображение через chat completions (маршрут modalities). Необязательные input_images для стиля и идентичности. Модель по умолчанию: google/gemini-2.5-flash-image. Для управления разрешением, качеством и форматом или для более новых моделей Image API используйте generate_image_dedicated. Используйте, когда: - Нужно новое изображение по текстовому запросу через маршрут chat-completions - Есть референсные изображения, чтобы сохранить стиль или объект (input_images) - Нужно простое преобразование текста в изображение без специальных настроек API НЕ используйте, когда: - Нужны уровни разрешения, качество, output_format или модели только Image API → generate_image_dedicated - Нужно проанализировать существующее изображение → analyze_image - Нужно видео → generate_video или generate_video_from_image - Промпт пустой или содержит только пробелы Хорошие примеры: - { "prompt": "A watercolor fox in autumn leaves" } - { "prompt": "Same character", "input_images": ["ref.png"], "aspect_ratio": "16:9" } - { "prompt": "Logo", "save_path": "out/logo.png" } внутри выходной песочницы Плохие примеры: - { "prompt": "" } → INVALID_INPUT - { "input_images": ["/etc/passwd"] } → UNSAFE_PATH - { "aspect_ratio": "21:9" }, если значения нет в разрешённом перечне → INVALID_INPUT Ошибки: - INVALID_INPUT: пустой промпт, недопустимый aspect_ratio/image_size, нечитаемое референсное изображение - UNSAFE_PATH: save_path или input_images вышли за пределы песочницы - UPSTREAM_REFUSED: нарушение политики контента или недостаточно кредитов - MODEL_NOT_FOUND: неверный slug модели Работает с: analyze_image, generate_video_from_image.

Параметры
  • aspect_ratioenum

    Необязательное соотношение сторон (зависит от провайдера).

  • image_sizeenum

    Необязательный уровень разрешения для поддерживаемых моделей.

  • input_imagesstring[]

    Референсные изображения (локальный путь, URL или data URL) для обусловливания стиля/идентичности.

  • max_tokensnumber

    Необязательное ограничение количества токенов завершения.

  • modalitiesstring[]

    Модальности ответа (по умолчанию: ["image","text"]).

  • modelstring

    ID модели изображения (по умолчанию: google/gemini-2.5-flash-image). Маршрут chat-completions.

  • promptstringобязательный

    Текстовая подсказка описывает изображение для генерации.

  • save_pathstring

    Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Если задан, результат инструмента содержит только текст с _meta.save_path - без встроенного медиаблока. Если не задан, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если не превышает предел для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

generate_image_dedicatedвнешний мир

Генерирует изображения через отдельный Image API OpenRouter (POST /api/v1/images). Поддерживает нормализованные уровни разрешения, уровни качества, выбор выходного формата и референсные изображения. Новые модели изображений добавляются только в этот эндпоинт. Модель по умолчанию: google/gemini-2.5-flash-image. Используйте, когда: - Нужна генерация изображений с точным контролем разрешения, качества и формата - Хотите использовать новые модели изображений, доступные только в отдельном API - Нужно преобразование изображение-в-изображение с input_references Не используйте, когда: - Простой текстовый запрос на генерацию изображения без контроля формата или разрешения → generate_image (меньше параметров) - Нужно проанализировать существующее изображение → analyze_image - Нужно видео → generate_video или generate_video_from_image - Поле prompt пустое или состоит только из пробелов Примеры правильного использования: - { "prompt": "A watercolor fox", "resolution": "2K", "quality": "high" } - { "prompt": "Product shot", "input_references": ["product.jpg"], "aspect_ratio": "16:9" } - { "prompt": "Logo", "output_format": "svg", "save_path": "out/logo.svg" } Примеры некорректного использования: - { "prompt": "" } → INVALID_INPUT - { "resolution": "8K" } → значение не входит в допустимый enum - { "quality": "ultra" } → значение не входит в допустимый enum Возвращает ошибку в случаях: - INVALID_INPUT: пустой prompt, недопустимые resolution/quality/output_format - UNSAFE_PATH: save_path или input_references вышли за пределы песочницы - UPSTREAM_REFUSED: политика безопасности контента, модель не поддерживает запрошенные параметры - MODEL_NOT_FOUND: неверный slug модели Работает с: analyze_image, generate_video_from_image.

Параметры
  • aspect_ratioenum

    Соотношение сторон (тот же enum, что и в generate_image).

  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • input_referencesstring[]

    Референсные изображения для image-to-image. Каждый элемент: локальный путь, URL вида http(s) или data URL.

  • modelstring

    ID модели изображения. По умолчанию: google/gemini-2.5-flash-image. Просмотреть: https://openrouter.ai/collections/image-models

  • nnumber

    Число запрашиваемых изображений (по умолчанию 1; сохраняется/встраивается только images[0]).

  • output_formatenum

    Формат выходного изображения

  • promptstringобязательный

    Текстовая подсказка описывает изображение для генерации.

  • providerobject

    Переопределения маршрутизации провайдера (order, sort, allow_fallbacks и т. д.).

  • qualityenum

    Уровень качества изображения (по умолчанию: auto).

  • resolutionenum

    Нормализованный уровень разрешения. Провайдер сопоставляет с ближайшим поддерживаемым размером.

  • save_pathstring

    Сохраняет сгенерированное изображение по этому пути. Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Когда задана, результат работы инструмента содержит только текст с _meta.save_path, без встроенного блока медиа. Когда не задана, встроенные изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращаются, только если укладываются в потолок для своего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный фолбэк OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

generate_videoвнешний мир

Генерирует видео из текстового запроса (опционально первый/последний кадр или референсные изображения). Отправляет асинхронную задачу, опрашивает до max_wait_ms, скачивает по завершении. Отправляет MCP-прогресс, если клиент передал progressToken. Модель по умолчанию: google/veo-3.1. Используй, когда: - Нужно текст-в-видео или видео с привязкой к кадрам - Готов ждать опроса или вернуться позже через get_video_status - Нужны last_frame или несколько reference_images (их нет в generate_video_from_image) НЕ используй, когда: - У тебя только одно изображение и простая конвертация изображения в видео → используй generate_video_from_image (меньше параметров) - Задача уже отправлена → используй get_video_status с video_id - Нужно проанализировать существующее видео → analyze_video Хорошие примеры: - { "prompt": "Океанские волны на закате, кинематографично" } - Возобновление по таймауту: в ответе _meta.code: JOB_STILL_RUNNING и _meta.video_id → вызывай get_video_status - { "prompt": "Морфинг", "first_frame_image": "a.jpg", "last_frame_image": "b.jpg" } Плохие примеры: - Воспринимать JOB_STILL_RUNNING как ошибку — это успех с метаданными для возобновления - { "prompt": " " } → INVALID_INPUT - Опрашивать get_video_status в том же вызове без ожидания → снова получишь JOB_STILL_RUNNING Ошибки: - INVALID_INPUT: пустой промпт - UNSAFE_PATH: save_path или пути к изображениям вышли за пределы sandbox - UPSTREAM_REFUSED: политика, кредиты или некорректный запрос - JOB_FAILED: провайдер пометил задачу как неудачную Работает вместе с: get_video_status, generate_video_from_image.

Параметры
  • aspect_ratiostring

    Соотношение сторон, зависящее от провайдера (например, "16:9", "9:16"). Enum на стороне сервера нет.

  • durationnumber

    Длительность клипа в секундах (зависит от провайдера).

  • first_frame_imagestring

    Необязательное изображение первого кадра (путь, URL или data URL).

  • last_frame_imagestring

    Необязательное изображение последнего кадра (путь, URL или data URL).

  • max_wait_msnumber

    Максимальное время опроса до возврата JOB_STILL_RUNNING (мс). По умолчанию: 600000 (10 мин) через OPENROUTER_VIDEO_MAX_WAIT_MS.

  • modelstring

    Идентификатор видеомодели (по умолчанию: google/veo-3.1). Передаётся провайдеру.

  • poll_interval_msnumber

    Интервал опроса во время ожидания (мс). По умолчанию: 15000 через OPENROUTER_VIDEO_POLL_INTERVAL_MS.

  • promptstringобязательный

    Текстовый промпт, описывающий видео для генерации.

  • providerobject

    Переопределения маршрутизации провайдера.

  • reference_imagesstring[]

    Необязательные референсные изображения для ориентира по стилю/сюжету.

  • resolutionstring

    Разрешение, зависящее от провайдера (например, "720p", "1080p"). Серверного enum нет.

  • save_pathstring

    Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Если задан, результат инструмента содержит только текст с _meta.save_path - без встроенного медиаблока. Если не задан, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если не превышает предел для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

  • seednumber

    Необязательный seed для воспроизводимости.

generate_video_from_imageвнешний мир

Узкая обёртка для преобразования изображения в видео: одно image (первый кадр) + prompt. Меньше параметров → выше точность вызова инструмента. Для последнего кадра или опорных изображений используйте generate_video. Используйте, когда: - Достаточно одного опорного изображения + описания движения - Нужна минимальная поверхность аргументов для преобразования изображения в видео НЕ используйте, когда: - Нужны last_frame_image или reference_images[] → generate_video - Проверяете статус задачи → get_video_status Хорошие примеры: - { "image": "start.png", "prompt": "Camera slowly zooms in" } - При тайм-ауте: тот же JOB_STILL_RUNNING + video_id продолжается как generate_video Плохие примеры: - { "first_frame_image": "x.png" } → неверный ключ; используйте image - Передача video_id сюда → используйте get_video_status Причины отказа: - INVALID_INPUT: image или prompt отсутствует - UNSAFE_PATH: путь к изображению вышел за пределы песочницы - UPSTREAM_REFUSED / JOB_FAILED: как в generate_video Работает с: generate_video, get_video_status.

Параметры
  • aspect_ratiostring

    Соотношение сторон, зависящее от провайдера.

  • durationnumber

    Длительность клипа в секундах.

  • imagestringобязательный

    Первый кадр изображения (путь, URL или data URL). Обязательно.

  • max_wait_msnumber

    Макс. время ожидания опроса (мс) до JOB_STILL_RUNNING. По умолчанию: 600000.

  • modelstring

    Идентификатор видеомодели (по умолчанию: google/veo-3.1).

  • poll_interval_msnumber

    Интервал опроса (мс). По умолчанию: 15000.

  • promptstringобязательный

    Промпт движения/сцены, описывающий видео.

  • resolutionstring

    Разрешение с учётом провайдера.

  • save_pathstring

    Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Если задан, результат инструмента содержит только текст с _meta.save_path - без встроенного медиаблока. Если не задан, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если не превышает предел для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

  • seednumber

    Необязательный seed для воспроизводимости.

get_chat_completion_statusтолько чтениеидемпотентный

Проверяет статус асинхронной задачи чат-генерации, запущенной с помощью start_chat_completion. Возвращает полный ответ, когда задача завершена, или текущий статус (running/failed) в противном случае. Используйте, когда: - Вы ранее вызывали start_chat_completion и нужно проверить, завершилась ли задача - Нужно опросить результат долго выполняющейся модели рассуждений НЕ используйте, когда: - Вы ещё не запускали задачу → сначала вызовите start_chat_completion - Вы хотите запустить новую генерацию Хорошие примеры: - { "job_id": "chat_20260806_001" } Плохие примеры: - { "job_id": "" } → INVALID_INPUT - { "job_id": "nonexistent" } → задача не найдена Выдаёт ошибку, когда: - INVALID_INPUT: пустой job_id - JOB_FAILED: фоновая генерация столкнулась с ошибкой - Задача не найдена: неверный job_id или задача из предыдущей сессии Работает с: start_chat_completion, chat_completion.

Параметры
  • job_idstringобязательный

    Идентификатор задания, возвращаемый start_chat_completion.

get_model_infoтолько чтениеидемпотентныйвнешний мир

Возвращает цену, длину контекста и архитектуру модальностей для одного идентификатора модели из кэшированного каталога. Используй, когда: - У тебя есть идентификатор модели и нужна информация о контекстном окне, цене или входных/выходных модальностях - Ты выбираешь между двумя известными слагами моделей НЕ используй, когда: - Нужно только true/false о существовании → validate_model (дешевле) - Ты просматриваешь неизвестные модели → сначала search_models Хорошие примеры: - { "model": "openai/gpt-4o" } - { "model": "google/gemini-2.5-flash" } перед analyze_video Плохие примеры: - { "model": "" } → INVALID_INPUT - { "name": "gpt-4o" } — неверный ключ; используй model с полным слагом openai/gpt-4o - Циклические вызовы → кэш общий; вызывай один раз для каждого id Ошибки: - INVALID_INPUT: не указана модель - MODEL_NOT_FOUND: слаг отсутствует в каталоге - UPSTREAM_HTTP: не удалось обновить каталог Работает вместе с: search_models, validate_model.

Параметры
  • modelstringобязательный

    Полный слаг модели OpenRouter (например, openai/gpt-4o).

get_video_statusтолько чтениеидемпотентныйвнешний мир

Опрашивает асинхронное задание по видео по его идентификатору. Скачивает и опционально сохраняет результат по завершении. Если задание ещё выполняется → возвращает success с _meta.code: JOB_STILL_RUNNING (это не ошибка). Используй когда: - generate_video вернул JOB_STILL_RUNNING, или у тебя уже есть video_id от предыдущего вызова - хочешь проверить статус без повторной отправки НЕ используй когда: - запускаешь новую генерацию → для этого есть generate_video или generate_video_from_image - у тебя ещё нет video_id Правильные примеры: - { "video_id": "vid_abc123" } - { "video_id": "vid_abc123", "save_path": "out/clip.mp4" } - Повторяй, пока статус не будет completed, или тебя устраивает частичный результат из _meta.progress Неправильные примеры: - { "id": "vid_abc" } → неверный ключ; используй video_id - ожидание мгновенного завершения при первом опросе долгих заданий - считать JOB_STILL_RUNNING ошибкой инструмента Ошибки: - INVALID_INPUT: не передан video_id - UNSAFE_PATH: save_path выходит за пределы sandbox'а - JOB_FAILED: провайдер пометил задание как неудавшееся Работает с: generate_video, generate_video_from_image.

Параметры
  • save_pathstring

    Записывает артефакт в OPENROUTER_OUTPUT_DIR (с изоляцией путей). Если задан, результат инструмента содержит только текст с _meta.save_path - без встроенного медиаблока. Если не задан, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если не превышает предел для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

  • video_idstringобязательный

    ID задачи видео из generate_video / generate_video_from_image.

health_checkтолько чтениеидемпотентныйвнешний мир

Проверяет API-ключ, доступность OpenRouter, количество кэшированных моделей и версии сервера/протокола. Аргументы не требуются. Используйте, когда: - Проба при запуске / эксплуатации перед другими инструментами - Нужно получить { ok, api_key_valid } без запуска генерации (чтобы избежать расходов) НЕ используйте, когда: - Нужно проверить качество конкретной модели — используйте chat_completion с коротким промптом - Ожидаете isError при неверном API-ключе — этот инструмент всегда возвращает структурированные данные Примеры правильного использования: - {} — пустые аргументы - Ветвление по structuredContent.api_key_valid === false для запроса повторной аутентификации Примеры неправильного использования: - Передача model или prompt — игнорируется; это не чат-инструмент - Ожидание isError: true при ошибке — вместо этого проверяйте поле ok Ошибка не возникает: - Никогда не возвращает isError — всегда возвращает { ok, api_key_valid, ... } для программного ветвления Работает с: любыми другими инструментами (запускается один раз при старте).

Параметры

Без параметров.

rerank_documentsтолько чтениеидемпотентныйвнешний мир

Упорядочивает документы по релевантности запросу с помощью реранкера OpenRouter. По умолчанию: cohere/rerank-v3.5. Используйте, когда: - У вас есть запрос и список текстовых фрагментов для сортировки по релевантности - Вы будете передавать лучшие результаты в chat_completion для получения обоснованных ответов Не используйте, когда: - Вам нужно получить документы из интернета → сначала используйте chat_completion с онлайн-поиском или внешним поиском - documents пуст или содержит нестроковые элементы Хорошие примеры: - { "query": "battery life", "documents": ["Doc A text...", "Doc B text..."] } - { "query": "...", "documents": [...], "model": "cohere/rerank-v3.5" } Плохие примеры: - { "documents": [] } → INVALID_INPUT - { "query": "x", "documents": [{ "text": "y" }] } → элементы должны быть строками - Использование вывода реранкера в качестве сообщений модели без извлечения текстовых полей Ошибки возникают, когда: - INVALID_INPUT: отсутствует запрос, documents пуст или содержит нестроковые элементы - MODEL_NOT_FOUND: неверный slug реранкера - UPSTREAM_HTTP: ошибка провайдера Работает с: search_models, chat_completion.

Параметры
  • documentsstring[]обязательный
  • modelstring

    Модель реранкера (по умолчанию: cohere/rerank-v3.5).

  • querystringобязательный

    Поисковый запрос, по которому ранжируются документы.

  • return_documentsboolean

    Когда true, включает исходный текст документа в каждый результат.

  • top_nnumber

    Возвращает только N лучших результатов.

search_modelsтолько чтениеидемпотентныйвнешний мир

Ищет по каталогу моделей OpenRouter по названию, провайдеру или возможностям. Возвращает результат постранично — используй offset, limit и next_offset, чтобы пролистывать большие наборы. Используй, когда: - Ты не знаешь, какой id модели взять. - Нужны модели с поддержкой изображений/аудио/видео, отфильтрованные по модальности. - Хочешь модели от конкретного провайдера (например, google). НЕ используй, когда: - У тебя уже есть id модели и нужна только проверка существования → validate_model - Нужна информация о цене/контексте для одного id → get_model_info - Ты рассчитываешь получить все 400+ моделей в одном ответе без пагинации Хорошие примеры: - { "query": "gemini", "capabilities": { "vision": true }, "limit": 10, "offset": 0 } - { "provider": "anthropic", "limit": 20 } - Страница 2: { "query": "llama", "offset": 20, "limit": 20 } на основе предыдущего next_offset Плохие примеры: - Опрос пагинации для широких запросов → большой ответ; используй limit/offset - Использование выдачи search_models как сообщений чата → используй возвращённый id в chat_completion - { "capability": "vision" } → неверная структура; используй capabilities: { "vision": true } Ошибки: - UPSTREAM_HTTP: ошибка эндпоинта /models - UPSTREAM_REFUSED: неверный API-ключ Совместим с: validate_model, get_model_info.

Параметры
  • capabilitiesobject
  • limitnumber

    Размер страницы (по умолчанию 25, максимум 100).

  • offsetnumber

    Смещение пагинации (по умолчанию: 0)

  • providerstring

    Фильтрует по префиксу slug провайдера (например, google).

  • querystring

    Сопоставляет подстроку с идентификатором или именем модели.

speech_to_textтолько чтениевнешний мир

Транскрибирует аудио через выделенную конечную точку STT OpenRouter (POST /api/v1/audio/transcriptions). Быстрее и дешевле, чем chat completions, для чистой транскрипции. Модели: Whisper-1, GPT-4o Transcribe, Voxtral. Используйте, когда: - Нужна быстрая транскрипция аудиофайлов - Нужно только распознавание речи без анализа и Q&A - Нужен структурированный вывод (SRT, VTT, verbose JSON) НЕ используйте, когда: - Нужно задавать вопросы об аудио → analyze_audio - Нужен анализ музыки или определение звуков → analyze_audio - Нужен TTS → text_to_speech или generate_audio Хорошие примеры: - { "audio_path": "recording.mp3" } - { "audio_path": "meeting.wav", "language": "en", "response_format": "srt" } - { "audio_path": "https://example.com/audio.mp3", "model": "openai/gpt-4o-transcribe" } Плохие примеры: - { "audio_path": "" } → INVALID_INPUT - { "path": "audio.mp3" } → неправильный ключ; используйте audio_path - { "audio_path": "/etc/shadow" } → UNSAFE_PATH Завершается ошибкой, когда: - INVALID_INPUT: пустой audio_path, неверный response_format, нечитаемый файл - UNSAFE_PATH: audio_path вышел за пределы песочницы - UPSTREAM_REFUSED: неподдерживаемый формат или закончились кредиты Работает с: text_to_speech, analyze_audio.

Параметры
  • audio_pathstringобязательный

    Аудиофайл: локальный путь (в песочнице), http(s) URL или base64 data URL. Форматы: mp3, wav, flac, ogg, webm, mp4, m4a.

  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • languagestring

    Код языка ISO-639-1 (например, «en», «es», «fr»). Повышает точность.

  • modelstring

    Модель STT. По умолчанию: openai/whisper-1. Также: openai/gpt-4o-transcribe, openai/gpt-4o-mini-transcribe.

  • response_formatenum

    Формат вывода для транскрипции. По умолчанию: json.

  • temperaturenumber

    Температура сэмплирования для транскрипции (0-1).

start_chat_completionвнешний мир

Запускает chat completion как асинхронную фоновую задачу. Сразу возвращает job_id, не дожидаясь ответа модели. Используйте get_chat_completion_status, чтобы опрашивать результаты. Рассчитан на reasoning-модели и любые запросы, которые могут превысить тайм-аут MCP (~60 с). Используйте, когда: - Используете reasoning-модель, которая может отвечать больше 60 секунд (DeepSeek R1, Claude Opus и т. п.) - Подключены через удалённый MCP-мост с короткими тайм-аутами - Хотите отправить completion и забыть о нём, а позже проверить результат НЕ используйте, когда: - Быстрые модели отвечают за секунды → используйте chat_completion напрямую - Нужен потоковый вывод → используйте chat_completion - Массив messages пуст Хорошие примеры: - { "messages": [{ "role": "user", "content": "Prove the Riemann hypothesis" }], "model": "deepseek/r1" } - { "messages": [...], "include_reasoning": true } для длинной цепочки рассуждений Плохие примеры: - { "messages": [] } → INVALID_INPUT - Не используйте для простых запросов вроде «hello world» (лишняя нагрузка) Ошибки возникают, когда: - INVALID_INPUT: пустой массив messages - Задача может завершиться ошибкой в фоне, если модель выдаст ошибку или закончатся кредиты Работает с: get_chat_completion_status, chat_completion.

Параметры
  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Вышестоящему сервису передаётся в секундах.

  • include_reasoningboolean
  • max_tokensnumber
  • messagesobject[]обязательный
  • modelstring

    Model ID (те же параметры, что и в chat_completion).

  • onlineboolean
  • providerobject
  • temperaturenumber
  • web_max_resultsnumber
text_to_speechвнешний мир

Преобразует текст в речь через выделенный TTS-эндпоинт OpenRouter (POST /api/v1/audio/speech). По умолчанию: deepgram/flux-tts:free с голосом flux-alexis-en; актуальные модели смотрите через GET /api/v1/models?output_modalities=speech. Форматы вывода: mp3 или pcm (по умолчанию: mp3). Используйте, когда: - Нужен синтез речи с точной настройкой голоса - Нужен быстрый выделенный TTS без накладных расходов чата - Нужен аудиовыход в формате mp3 или pcm НЕ используйте, когда: - Нужно сгенерировать музыку или звуковые эффекты → generate_audio - Нужно транскрибировать аудио → speech_to_text или analyze_audio - Входной текст пуст Хорошие примеры: - { "input": "Hello, welcome to our app!" } - { "input": "...", "voice": "flux-alexis-en", "response_format": "mp3", "save_path": "out/welcome.mp3" } - { "input": "...", "instructions": "speak slowly and clearly", "speed": 0.8 } Плохие примеры: - { "input": "" } → INVALID_INPUT - { "prompt": "text" } → неверный ключ; используйте input - { "response_format": "wav" } → поддерживаются только mp3 и pcm Завершается ошибкой, когда: - INVALID_INPUT: пустой ввод, неверный response_format - UNSAFE_PATH: save_path вышел за пределы песочницы - UPSTREAM_REFUSED: политика контента или кредиты Работает вместе с: speech_to_text, analyze_audio.

Параметры
  • cacheboolean

    Включает кэширование ответов OpenRouter через X-OpenRouter-Cache: true. По умолчанию на сервере: OPENROUTER_CACHE_RESPONSES=1.

  • cache_clearboolean

    Сбросьте запись кэша для этого точного запроса.

  • cache_ttlstring

    TTL кэша в виде целого числа секунд (1-86400) или строки длительности, например "30s", "5m" или "1h". Передаётся вверх по потоку в секундах.

  • inputstringобязательный

    Текст для преобразования в речь.

  • instructionsstring

    Инструкции по тону и стилю (например, «говорите в теплом, дружелюбном тоне»). Только модели OpenAI.

  • modelstring

    Модель TTS для OpenRouter POST /audio/speech. По умолчанию: deepgram/flux-tts:free. Актуальные модели смотрите через GET /api/v1/models?output_modalities=speech.

  • response_formatenum

    Формат выходного аудио (mp3 или pcm). По умолчанию: mp3.

  • save_pathstring

    Сохраняет аудио по этому пути. Записывает артефакт в OPENROUTER_OUTPUT_DIR (с песочницей для путей). Когда переменная задана, результат инструмента содержит только текст с _meta.save_path, без встроенного медиаблока. Когда переменная не задана, встроенное изображение/аудио (по умолчанию 1 MiB) или видео (по умолчанию 10 MiB) возвращается, только если размер не превышает потолок для соответствующего типа: OPENROUTER_IMAGE_INLINE_MAX_BYTES, OPENROUTER_AUDIO_INLINE_MAX_BYTES, OPENROUTER_VIDEO_INLINE_MAX_BYTES (глобальный запасной вариант OPENROUTER_INLINE_MAX_BYTES). См. .env.example.

  • speednumber

    Скорость речи (0.25-4.0). По умолчанию: 1.0.

  • voicestring

    Voice ID (зависит от модели). По умолчанию: flux-alexis-en для deepgram/flux-tts:free; передайте голос, который поддерживает другая модель.

validate_modelтолько чтениеидемпотентныйвнешний мир

Дешёвая булева проверка: существует ли этот идентификатор модели в каталоге OpenRouter? Использует общий кеш. Используй, когда: - Предварительная проверка перед chat_completion или generate_*, чтобы избежать MODEL_NOT_FOUND. - Нужен только { valid: true|false }, без цены или модальностей. НЕ используй, когда: - Нужны цена или длина контекста → get_model_info. - Ищешь модели → search_models. Хорошие примеры: - { "model": "anthropic/claude-sonnet-4" } → { "valid": true, "model": "..." } - { "model": "fake/model" } → { "valid": false } (это не ошибка) Плохие примеры: - Воспринимать valid: false как ошибку инструмента — это успешный ответ. - Использовать validate_model для поиска по части имени → используй search_models с query. Не работает, когда: - INVALID_INPUT: модель не указана. - UPSTREAM_HTTP: обновление каталога не удалось. Совместим с: get_model_info, chat_completion.

Параметры
  • modelstringобязательный

    Полный slug модели OpenRouter для проверки.

5.0.1основная
5.0.0
4.8.0
4.7.0
4.6.2
4.6.1
4.6.0
4.5.3
4.5.1
4.5.0
4.0.1
4.0.0
3.2.0
3.1.1
3.1.0
3.0.0
2.0.0
1.9.0
1.8.2
1.8.1
1.8.0
1.5.0
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0

Выберите клиент, чтобы установить stabgan/openrouter-mcp-multimodal:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "type": "stdio",
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "command": "npx"
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"stabgan-openrouter-mcp-multimodal-c2f7bf4a9q\",\"type\":\"stdio\",\"env\":{\"OPENROUTER_API_KEY\":\"sk-or-v1-...\"},\"args\":[\"-y\",\"@stabgan/openrouter-mcp-multimodal\"],\"command\":\"npx\"}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add stabgan-openrouter-mcp-multimodal-c2f7bf4a9q --env OPENROUTER_API_KEY=sk-or-v1-... -- npx -y @stabgan/openrouter-mcp-multimodal

Либо через JSON-конфиг:

claude mcp add-json stabgan-openrouter-mcp-multimodal-c2f7bf4a9q "{\"env\":{\"OPENROUTER_API_KEY\":\"sk-or-v1-...\"},\"args\":[\"-y\",\"@stabgan/openrouter-mcp-multimodal\"],\"type\":\"stdio\",\"command\":\"npx\"}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add stabgan-openrouter-mcp-multimodal-c2f7bf4a9q --env OPENROUTER_API_KEY=sk-or-v1-... -- npx -y @stabgan/openrouter-mcp-multimodal

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.stabgan-openrouter-mcp-multimodal-c2f7bf4a9q]
command = "npx"
args = ["-y", "@stabgan/openrouter-mcp-multimodal"]

[mcp_servers.stabgan-openrouter-mcp-multimodal-c2f7bf4a9q.env]
OPENROUTER_API_KEY = "sk-or-v1-..."
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите stabgan/openrouter-mcp-multimodal, а в поле команды запуска — строку ниже:
npx -y @stabgan/openrouter-mcp-multimodal

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx",
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например stabgan-openrouter-mcp-multimodal-c2f7bf4a9q.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: stabgan-openrouter-mcp-multimodal-c2f7bf4a9q
    command: npx
    args:
      - "-y"
      - "@stabgan/openrouter-mcp-multimodal"
    env:
      OPENROUTER_API_KEY: sk-or-v1-...
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "stabgan-openrouter-mcp-multimodal-c2f7bf4a9q": {
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-..."
      },
      "args": [
        "-y",
        "@stabgan/openrouter-mcp-multimodal"
      ],
      "type": "stdio",
      "command": "npx"
    }
  }
}

Похожие MCP-сервера

gwbischof/outsource-mcp

gwbischof/outsource-mcp

от gwbischof

Сервер Outsource MCP даёт AI-приложениям единый доступ к 20+ модельным провайдерам для генерации текста и изображений. Работает с любыми MCP-клиентами, включая Claude Desktop и Cline. Подходит разр...

Python⭐ 30
szeider/consult7

szeider/consult7

от szeider

MCP сервер для выноса анализа больших файлов на модели с контекстом до 2M токенов через OpenRouter. Решает проблему переполнения контекста агента, позволяя анализировать целые кодовые базы и генерировать ревью. Поддерживает Gemini, Claude и другие модели.

Python⭐ 296
gpu-bridge/mcp-server

gpu-bridge/mcp-server

от gpu-bridge

MCP сервер GPU-Bridge предоставляет 30 GPU-сервисов как инструменты для ИИ-агентов: LLM, генерация изображений, аудио и другие. Поддерживает x402 для автономной оплаты без API ключей. Идеален для автономных AI агентов.

JavaScript⭐ 2
raveenb/fal-mcp-server

raveenb/fal-mcp-server

от raveenb

MCP сервер для генерации изображений, видео, музыки и аудио через Fal.ai. Интегрируется с Claude Desktop и любыми MCP-клиентами, предлагая 18 инструментов: от текстовых промптов до ретуши и анимации. Полезен разработчикам и креаторам для быстрого создания контента без переключения между сервисами.

Python⭐ 61
merterbak/Grok-MCP

merterbak/Grok-MCP

от merterbak

MCP-сервер для интеграции с xAI Grok: агентные вызовы инструментов (веб-поиск, выполнение кода), генерация изображений и видео, анализ изображений через зрение, работа с файлами и stateful-чаты с с...

Python⭐ 55
evalstate/mcp-hfspace

evalstate/mcp-hfspace

от evalstate

MCP сервер для доступа к моделям Hugging Face Spaces. Поддерживает десятки задач — генерацию, распознавание, синтез — через единый MCP протокол. Идеален для интеграции с Claude Desktop. Использует Gradio эндпоинты, настройка минимальна.

TypeScript⭐ 389
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин