pongsakornp

vision-mcp

Community pongsakornp
Updated

MCP vision server: gives text-only AI agents image & video understanding (Gemini→Grok→OpenRouter fallback)

vision-mcp

MCP server that gives text-only AI coding agents the ability to understand images and videos. Works with OpenCode, Claude Desktop, Claude Code, Cursor, VS Code, and any MCP-compatible client — including agents running on models without native vision.

agent (text-only) → vision-mcp → Gemini / Grok / OpenRouter → text description

Why

Most coding agents run on strong text models (DeepSeek, Claude, etc.) that can't see images. When you paste a screenshot, a UI mockup, or an error screenshot, they say "I can't view images". vision-mcp fixes that: it takes the file, sends it to a vision-capable model, and returns a plain-text description the agent can reason over.

Features

  • 2 tools: analyze_image and analyze_video
  • 3 backends, automatic fallback: Gemini → Grok (xAI) → OpenRouter — first success wins, rest cancelled
  • Zero config file: keys come from environment variables only
  • Image preprocessing: auto-rotate (EXIF), downscale to ≤1024px, JPEG re-encode — small payloads, fast responses
  • Video support: ffmpeg keyframe extraction (up to 8 frames) with timestamps
  • Typed & tested: TypeScript, 21 unit/integration tests, MCP protocol verified over real stdio
  • No Python: pure Node.js (sharp for images, ffmpeg binary for video)

Requirements

  • Node.js ≥ 18
  • ffmpeg (for video analysis only; images work without it)
  • At least one of these API keys:
Backend Env var Get it
Gemini (default) GEMINI_API_KEY https://aistudio.google.com/app/apikey
Grok (xAI) XAI_API_KEY https://console.x.ai
OpenRouter OPENROUTER_API_KEY https://openrouter.ai/keys

Install

npm / npx (after publish)

# Run directly (no install)
npx -y vision-mcp

# Or install globally
npm install -g vision-mcp

From source

git clone https://github.com/pongsakornp/vision-mcp.git
cd vision-mcp
npm install
npm run build

Usage

MCP client config

OpenCode (opencode.jsonc):

{
  "mcp": {
    "vision-mcp": {
      "type": "local",
      "command": ["npx", "-y", "vision-mcp"],
      "environment": {
        "GEMINI_API_KEY": "AIza...",
        "XAI_API_KEY": "xai-...",
        "OPENROUTER_API_KEY": "sk-or-..."
      },
      "enabled": true
    }
  }
}

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "vision-mcp": {
      "command": "npx",
      "args": ["-y", "vision-mcp"],
      "env": {
        "GEMINI_API_KEY": "AIza..."
      }
    }
  }
}

VS Code / Cursor (.vscode/mcp.json or workspace):

{
  "servers": {
    "vision-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "vision-mcp"],
      "environment": {
        "GEMINI_API_KEY": "AIza..."
      }
    }
  }
}

Keys live in the MCP config — no shell profile edits needed. Keep the config out of git if it contains keys.

CLI (for scripting / debugging)

# Spawn the server and talk JSON-RPC over stdio
GEMINI_API_KEY=AIza... node dist/index.js

Tools

analyze_image(path, prompt?)

Analyze an image file (png, jpg, jpeg, webp, bmp, gif, avif, tiff). Path can be absolute, relative, or ~/....

analyze_video(path, prompt?)

Analyze a video (mp4, webm, mov, avi, mkv, flv, wmv, m4v). Extracts up to 8 evenly-spaced keyframes with ffmpeg, then describes the sequence.

Configuration

Env var Default Description
GEMINI_API_KEY Gemini API key (tried first)
XAI_API_KEY Grok/xAI API key (tried second)
OPENROUTER_API_KEY OpenRouter key (tried last)
VISION_GEMINI_MODEL gemini-2.5-flash Gemini model override
VISION_GROK_MODEL grok-4-vision Grok model override
VISION_OPENROUTER_MODEL google/gemini-2.5-flash OpenRouter model override
VISION_TIMEOUT_MS 20000 Per-backend request timeout

Backend behavior

  • Only backends with keys configured are launched.
  • All configured backends run in parallel; the first success wins and the rest are cancelled.
  • If all fail, the error reports every backend's failure for diagnosis.

Development

npm run build        # compile TypeScript → dist/
npm test             # run the 21 tests (vitest)
npm run typecheck    # tsc --noEmit

Test coverage: config parsing, backend fallback logic, path resolution, image preprocessing (sharp), video keyframe extraction (real ffmpeg), and the full MCP stdio protocol.

License

MIT — see LICENSE.

MCP Server · Populars

MCP Server · New

    lyc403223157-source

    Knowledge Inbox

    Local-first knowledge ingestion for AI agents and Obsidian

    ipiton

    agent-memory-mcp

    MCP server that gives AI agents persistent memory with semantic search

    Community ipiton
    dialog-tools

    Dialog MCP Server

    Turn Reddit's chaos into structured insights with full citations. MCP server for competitive analysis, customer discovery, and market research. Zero-setup hosted solution with semantic search across 20,000+ subreddits.

    Community dialog-tools
    Bevel-Software

    hexis

    Git-backed skills, tools & context for AI agents

    Community Bevel-Software
    jonashertner

    OpenCaseLaw

    Open Swiss legal corpus + MCP server: 1M+ court decisions (1875–today), 21k laws, 10M-edge citation graph, 42 MCP tools. CC0 data, MIT code. Live at mcp.opencaselaw.ch

    Community jonashertner