Track MCP LogoTrack MCP
Track MCP LogoTrack MCP

The world's largest repository of Model Context Protocol servers. Discover, explore, and submit MCP tools.

Product

  • Categories
  • Top MCP
  • New & Updated
  • Submit MCP

Company

  • About

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy

© 2026 TrackMCP. All rights reserved.

Built with ❤️ by Krishna Goyal

    Openrouter Mcp Multimodal

    MCP server for OpenRouter providing text chat and image analysis tools

    13 stars
    TypeScript
    Updated Oct 27, 2025

    Table of Contents

    • What is this?
    • Quick start
    • Install
    • One-click
    • Manual config
    • Why this server?
    • Tools
    • Examples
    • Chat (free model)
    • Analyze an image
    • Search models (vision + free)
    • Generate video (async)
    • Security
    • Configuration
    • Development
    • Testing
    • FAQ
    • Do I need paid OpenRouter credits?
    • Which MCP clients are supported?
    • How is this different from calling OpenRouter directly?
    • Where is the security advisory for path traversal?
    • Compatibility
    • License
    • Contributing

    Table of Contents

    • What is this?
    • Quick start
    • Install
    • One-click
    • Manual config
    • Why this server?
    • Tools
    • Examples
    • Chat (free model)
    • Analyze an image
    • Search models (vision + free)
    • Generate video (async)
    • Security
    • Configuration
    • Development
    • Testing
    • FAQ
    • Do I need paid OpenRouter credits?
    • Which MCP clients are supported?
    • How is this different from calling OpenRouter directly?
    • Where is the security advisory for path traversal?
    • Compatibility
    • License
    • Contributing

    Documentation

    OpenRouter MCP Multimodal

    The MCP server for multimodal AI agents.

    One install · 14 tools · 300+ OpenRouter models · text, vision, audio & video — analysis and generation.

    ·

    ·

    ·

    ·

    ·

    ---

    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:

    CapabilityToolsHighlights
    Chatchat_completion300+ models, :nitro / :exacto suffixes, provider routing, web search, response caching, reasoning tokens
    Visionanalyze_image, generate_imageOCR, captioning, VQA, image generation with reference inputs
    Audioanalyze_audio, generate_audioTranscription, speech/music generation
    Videoanalyze_video, generate_video, generate_video_from_image, get_video_statusClip understanding, Veo / Sora / Seedance / Wan generation with progress notifications
    Catalogsearch_models, get_model_info, validate_model, rerank_documents, health_checkModel discovery, validation, reranking, ops health

    Production hardening: input/output path sandboxes (including analyze\_\* local files as of v4.5.2), SSRF guards, structured errors with _meta.code, MCP 2025-06-18 structured outputs, async video progress notifications, and 650+ automated tests (unit, mock, regression, and live integration).

    Quick start

    1. Get an API key (free tier works) → openrouter.ai/keys

    2. Run the server

    bash
    export OPENROUTER_API_KEY=sk-or-v1-...
    npx -y @stabgan/openrouter-mcp-multimodal

    3. Add to your MCP client (Cursor, Claude Desktop, VS Code, etc.) — see Install below.

    No credits required to start. Free models such as google/gemma-4-26b-a4b-it:free work for chat and vision. Video/audio generation typically needs credits.

    Install

    MCP servers are distributed through several packaging models. This server is implemented in Node.js/TypeScript; the table below maps each ecosystem method to how you run it here.

    MethodRuntimeBest forThis server
    **npx**Node.js 20+Most MCP clients (default)✅ @stabgan/openrouter-mcp-multimodal
    **uvx / pipx**Python 3.10+ and Node.js 20+Python-first workflows, same pattern as PyPI MCP servers✅ [mcp-server-openrouter-multimodal](https://pypi.org/project/mcp-server-openrouter-multimodal/)
    **npm global**Node.js 20+Pin a version without re-downloading✅
    **node (local)**Node.js 20+Contributors / air-gapped builds✅
    **Docker Hub**DockerIsolation, no Node on host✅ stabgan/openrouter-mcp-multimodal
    **GHCR**DockerGitHub-native OCI pulls✅ ghcr.io/stabgan/openrouter-mcp-multimodal
    **Smithery CLI**Node.js (via installer)Interactive install into Claude/Cursor/etc.✅
    **MCP Registry**npm or OCIOfficial discovery (io.github.stabgan/openrouter-multimodal)✅ listing
    **One-click deeplinks**Node.jsCursor, VS Code, Kiro✅
    **Claude Code CLI**Node.jsTerminal-first Claude Code users✅
    **MCP Inspector**Node.jsDebug / list tools locally✅
    **Windows cmd /c npx**Node.jsClaude Desktop / Cursor when npx not on GUI PATH✅ see below
    pip / uv (direct)—Native Python MCP servers only— use uvx row above
    DXT desktop extensions—Bundled Claude Desktop .dxtnot yet
    Remote HTTP / SSE—Hosted Smithery / Cloudflare endpointsvia Smithery

    uvx vs npx: In the MCP ecosystem, **npx runs npm (Node) packages and uvx runs PyPI (Python) packages**. Because this server is Node-based, uvx uses a thin Python launcher that execs npx -y @stabgan/openrouter-mcp-multimodal — you still need Node installed.

    One-click

    Cursor

    VS Code

    Kiro

    Claude Desktop / Windsurf / Cline (pick any method below)

    Smithery

    MCP Registry — npm + OCI packages

    Paste your OPENROUTER_API_KEY when prompted — deeplinks use placeholders so secrets never appear in URLs.

    Manual config

    npx (recommended)

    bash
    export OPENROUTER_API_KEY=sk-or-v1-...
    npx -y @stabgan/openrouter-mcp-multimodal
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "npx",
          "args": ["-y", "@stabgan/openrouter-mcp-multimodal"],
          "env": {
            "OPENROUTER_API_KEY": "sk-or-v1-..."
          }
        }
      }
    }

    Pin a release: "args": ["-y", "@stabgan/openrouter-mcp-multimodal@4.5.3"]

    uvx / pipx (Python launcher)

    Install uv (includes uvx), ensure Node.js 20+ is also on your PATH, then:

    bash
    export OPENROUTER_API_KEY=sk-or-v1-...
    uvx mcp-server-openrouter-multimodal
    # pin npm version: OPENROUTER_MCP_NPM_VERSION=4.5.3 uvx mcp-server-openrouter-multimodal
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "uvx",
          "args": ["mcp-server-openrouter-multimodal"],
          "env": {
            "OPENROUTER_API_KEY": "sk-or-v1-..."
          }
        }
      }
    }

    pipx equivalent: pipx run mcp-server-openrouter-multimodal

    Optional: OPENROUTER_MCP_NPM_VERSION=4.5.3 pins the underlying npm package.

    npm global

    bash
    npm install -g @stabgan/openrouter-mcp-multimodal
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "openrouter-multimodal",
          "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }
        }
      }
    }

    node (local clone)

    bash
    git clone https://github.com/stabgan/openrouter-mcp-multimodal.git
    cd openrouter-mcp-multimodal
    npm ci && npm run build
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "node",
          "args": ["/absolute/path/to/openrouter-mcp-multimodal/dist/index.js"],
          "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }
        }
      }
    }

    Docker

    bash
    docker run --rm -i -e OPENROUTER_API_KEY=sk-or-v1-... stabgan/openrouter-mcp-multimodal:latest
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "OPENROUTER_API_KEY=sk-or-v1-...",
            "stabgan/openrouter-mcp-multimodal:latest"
          ]
        }
      }
    }

    Use -i (interactive stdio). Avoid -t (TTY corrupts MCP framing on some hosts).

    GHCR (GitHub Container Registry)

    bash
    docker run --rm -i -e OPENROUTER_API_KEY=sk-or-v1-... \
      ghcr.io/stabgan/openrouter-mcp-multimodal:4.5.3
    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "docker",
          "args": [
            "run", "--rm", "-i",
            "-e", "OPENROUTER_API_KEY=sk-or-v1-...",
            "ghcr.io/stabgan/openrouter-mcp-multimodal:latest"
          ]
        }
      }
    }

    Smithery

    Interactive install (writes config for your client):

    bash
    npx -y @smithery/cli install @stabgan/openrouter-mcp-multimodal --client claude
    # or: --client cursor | vscode | windsurf | ...

    Listing: smithery.ai/server/@stabgan/openrouter-mcp-multimodal

    MCP Registry

    Official name: io.github.stabgan/openrouter-multimodal

    • Registry: registry.modelcontextprotocol.io
    • npm package: @stabgan/openrouter-mcp-multimodal
    • OCI image: docker.io/stabgan/openrouter-mcp-multimodal

    Clients that support registry-driven install will offer npm or Docker; otherwise use the JSON blocks above.

    Claude Code CLI

    bash
    claude mcp add openrouter -- npx -y @stabgan/openrouter-mcp-multimodal
    # project scope:
    claude mcp add --scope project openrouter -- npx -y @stabgan/openrouter-mcp-multimodal

    Set OPENROUTER_API_KEY in your shell or client env before starting Claude Code.

    MCP Inspector

    Debug tools/list and tool calls against a live OpenRouter key:

    bash
    export OPENROUTER_API_KEY=sk-or-v1-...
    npx -y @modelcontextprotocol/inspector npx -y @stabgan/openrouter-mcp-multimodal

    Windows npx

    When Claude Desktop or Cursor cannot find npx (GUI apps often miss shell PATH), wrap with cmd:

    json
    {
      "mcpServers": {
        "openrouter": {
          "command": "cmd",
          "args": ["/c", "npx", "-y", "@stabgan/openrouter-mcp-multimodal"],
          "env": { "OPENROUTER_API_KEY": "sk-or-v1-..." }
        }
      }
    }

    If still failing, use the full path from where npx as the command.

    Why this server?

    CapabilityThis serverTypical MCP LLM servers
    Text chat (300+ models)✅✅
    Image analysis + generation✅partial
    Audio analysis + TTS✅❌
    Video analysis + generation✅❌
    Model search / validate / rerank✅❌
    Path sandbox + SSRF protection✅rare
    MCP 2025 structured outputs✅rare
    Async video + progress notifications✅❌

    Tools

    14 MCP tools. Each description includes Use when, Good/Bad examples, Fails when, and Works with so agents pick the right tool and recover from errors.

    ToolPurpose
    chat_completionText chat, web search, provider routing, caching, reasoning
    analyze_imageVision — local path, URL, or data URL + question
    analyze_audioTranscribe / analyze audio files
    analyze_videoDescribe / Q&A over video files
    generate_imageText-to-image with optional reference images
    generate_audioText-to-speech / music
    generate_videoText-to-video (async, resumable)
    generate_video_from_imageImage-to-video (narrower schema)
    get_video_statusPoll / resume video jobs
    search_modelsPaginated model catalog search
    get_model_infoPricing, context, modalities
    validate_modelCheap model ID existence check
    rerank_documentsRelevance ranking for RAG
    health_checkAPI key + reachability probe

    Errors use a closed _meta.code taxonomy: INVALID_INPUT · UNSAFE_PATH · UPSTREAM_* · MODEL_NOT_FOUND · JOB_STILL_RUNNING · and more.

    Examples

    Chat (free model)

    json
    {
      "tool": "chat_completion",
      "arguments": {
        "model": "google/gemma-4-26b-a4b-it:free",
        "messages": [{ "role": "user", "content": "Summarize MCP in one sentence." }]
      }
    }

    Analyze an image

    json
    {
      "tool": "analyze_image",
      "arguments": {
        "image_path": "diagram.png",
        "question": "List every label in this diagram."
      }
    }

    Use image_path and question — not image / prompt.

    Search models (vision + free)

    json
    {
      "tool": "search_models",
      "arguments": {
        "query": "gemma",
        "capabilities": { "vision": true },
        "limit": 10,
        "offset": 0
      }
    }

    Generate video (async)

    json
    {
      "tool": "generate_video",
      "arguments": {
        "model": "google/veo-3.1",
        "prompt": "Ocean waves at sunrise, cinematic drone shot",
        "duration": 4,
        "save_path": "river.mp4"
      }
    }

    If the job is still running when max_wait_ms elapses, the response succeeds with _meta.code: JOB_STILL_RUNNING and a video_id — call get_video_status to resume. This is not an error.

    More examples: docs/plans/tool-description-improvement.md

    Security

    • Input path sandbox — analyze_* and reference images must stay inside OPENROUTER_INPUT_DIR
    • Output path sandbox — save_path must stay inside OPENROUTER_OUTPUT_DIR
    • SSRF protection — private/reserved IPs blocked on URL fetches
    • Untrusted content — analyze outputs tagged _meta.content_is_untrusted: true

    Override sandboxes only with OPENROUTER_ALLOW_UNSAFE_PATHS=1 (discouraged).

    Configuration

    Environment variables

    VariableRequiredDefaultDescription
    OPENROUTER_API_KEYYes—OpenRouter API key
    OPENROUTER_DEFAULT_MODELNonvidia/nemotron-nano-12b-v2-vl:freeDefault when tools omit model
    OPENROUTER_INTEGRATION_MODELNogoogle/gemma-4-26b-a4b-it:freeModel used by live integration tests
    OPENROUTER_OUTPUT_DIRNocwdSandbox root for save_path
    OPENROUTER_INPUT_DIRNo—Sandbox root for local input files
    OPENROUTER_LOG_LEVELNoinfoerror / warn / info / debug

    See [.env.example](./.env.example) for the full list (provider routing, image/audio/video limits, caching, video polling).

    Development

    bash
    git clone https://github.com/stabgan/openrouter-mcp-multimodal.git
    cd openrouter-mcp-multimodal
    npm install
    cp .env.example .env   # add OPENROUTER_API_KEY
    npm run build

    Testing

    CommandWhat it runs
    npm test652 unit + mock tests (no API key, <2s)
    npm run test:regressionSecurity + schema regression guards
    npm run test:integration16 live OpenRouter scenarios (requires .env key)
    npm run test:e2eFull MCP stdio smoke (scripts/live-e2e.mjs)
    npm run cilint + format + build + all of the above except e2e

    Free models for CI / zero-credit accounts: integration tests default to google/gemma-4-26b-a4b-it:free (override with OPENROUTER_INTEGRATION_MODEL). GitHub Actions requires the OPENROUTER_API_KEY repository secret.

    Mock tests live under src/__tests__/mock/ and cover handlers, path sandboxes, SSRF blocks, model-cache pagination, tool descriptions, and structured outputs — 330+ additional cases beyond the core suite.

    bash
    npm run lint
    npm run format:check

    FAQ

    Do I need paid OpenRouter credits?

    No, to get started. Free models work for chat and vision. Audio/video generation usually requires credits; analysis may return 402 on some models — the server surfaces that as a structured error.

    Which MCP clients are supported?

    Any MCP-compatible client over stdio: Cursor, Claude Desktop, VS Code Copilot, Windsurf, Cline, Kiro, and custom agents.

    How is this different from calling OpenRouter directly?

    This server adds MCP tool schemas, security sandboxes, error taxonomy, model caching, async video polling with progress notifications, and agent-oriented tool descriptions — so LLMs invoke the right capability without custom HTTP glue.

    Where is the security advisory for path traversal?

    Fixed in 4.5.2+ — see GHSA-3q7p-736f-x44v and docs/solutions/security-issues/.

    Compatibility

    Works with any MCP client. Protocol: MCP 2025-06-18. Node ≥ 20 (Docker image uses Node 22).

    License

    Apache 2.0 — see LICENSE.

    Contributing

    Issues and PRs welcome. For large changes, open an issue first. Run npm run ci before submitting.

    Similar MCP

    Based on tags & features

    • ME

      Metmuseum Mcp

      TypeScript·
      14
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • LI

      Liveblocks Mcp Server

      TypeScript·
      11
    • MC

      Mcp Wave

      TypeScript00

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k
    View All MCP Servers

    Similar MCP

    Based on tags & features

    • ME

      Metmuseum Mcp

      TypeScript·
      14
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • LI

      Liveblocks Mcp Server

      TypeScript·
      11
    • MC

      Mcp Wave

      TypeScript00

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k