vision-mcp
Vision MCP Server
非マルチモーダルモデル(DeepSeek、旧世代のGPT-4、ローカルの小規模モデルなど)に接続されたエージェントに視覚理解をもたらすModel Context Protocol(MCP)サーバーです。エージェントが画像をMCPツールに渡すと、サーバーが視覚モデルを呼び出し、テキストを返します。
中国と米国の主要プロバイダーに加え、任意のOpenAI互換エンドポイントをサポートします。公式SDKを最優先し、抽象化を実装に先立たせ、プロバイダー追加はゼロ侵入で行います。
中文文档见 README.zh-CN.md
特徴
4つのツール:
analyze_image/describe_image/ocr_image/list_providers。すべてプレーンなMarkdownテキストを返します13の組み込みプロバイダー: OpenAI / Anthropic / Google Gemini / Qwen(DashScope)/ Zhipu / Doubao(Volcengine)/ ERNIE(Qianfan)/ StepFun / Ollama / Alibaba Bailian / SiliconFlow / OpenRouter / カスタムOpenAI互換エンドポイント
3種類の画像入力: ローカルパス / http(s) URL / base64(data URIまたは生のbase64)。自動判別されます
3段階のフォールバックチェーン: 公式SDK → OpenAI互換エンドポイント → ネイティブfetch(SPEC §1参照)
ステートレス: すべての呼び出しは独立しています。画像と結果は決してキャッシュされず、キーは環境変数からのみ読み取られます
Related MCP server: vision-mcp
クイックスタート
オプションA: npx(npmに公開済み、リポジトリ不要)
npx -y @inferai/vision-mcpオプションB: ローカルビルド
git clone <repo> && cd vision-mcp
pnpm install
pnpm build
node dist/index.jsMCP設定例(stdio)
サーバーはstdioトランスポートで通信します。MCPクライアントがプロセスを起動し、stdin/stdout経由でJSON-RPCメッセージを交換します。お使いのクライアントでMCPサーバーを定義している場所ならどこでも設定できます:
Claude Code: プロジェクトレベルの
.mcp.jsonまたはユーザーレベルの~/.claude.json(mcpServersキー)Claude Desktop:
claude_desktop_config.jsonその他のMCPクライアント(Cursor、自作エージェントなど): 同じ構造
npx版(パッケージ公開後に利用可能):
{
"mcpServers": {
"vision-mcp": {
"command": "npx",
"args": ["-y", "@inferai/vision-mcp"],
"env": {
"OPENAI_API_KEY": "sk-...",
"DASHSCOPE_API_KEY": "sk-..."
}
}
}
}ローカル開発(パスを調整してください。--env-file-if-exists=.envは.envをネイティブに読み込みます):
{
"mcpServers": {
"vision-mcp": {
"command": "node",
"args": ["--env-file-if-exists=.env", "/absolute/path/to/vision-mcp/dist/index.js"],
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}起動引数付き(argvでプロバイダーのデフォルトを上書き、下記参照):
{
"mcpServers": {
"vision-mcp": {
"command": "npx",
"args": [
"-y",
"@inferai/vision-mcp",
"--default-provider=dashscope",
"--siliconflow-api-key=sk-...",
"--siliconflow-model=Qwen/Qwen2.5-VL-7B-Instruct"
],
"env": {
"DASHSCOPE_API_KEY": "sk-..."
}
}
}
}stdioに関する注意:
stdoutはMCPプロトコルのみを運びます。サーバーがログを出力することは決してなく、診断情報はstderrに送られます
クライアントがプロセスのライフサイクルを管理します(起動時に生成、終了時に停止)。デーモンは不要です
初回の
npx実行時はパッケージのダウンロードが発生し、数秒かかることがありますクライアントがシェル環境を継承する場合、環境変数はシェル環境からも取得できます(
envブロックは不要)
MCP Inspectorでのデバッグ:
pnpm dlx @modelcontextprotocol/inspector node dist/index.js --xxx-api-key=xxx --xxx2-api-key=xxx変数の設定
MCP設定の
envブロック(推奨。プラットフォーム間で最も信頼性が高い)— 上記のenvオブジェクトに変数を記述します.envファイル(ローカル開発)—.env.exampleを.envにコピーして記入し、node --env-file-if-exists=.env dist/index.jsを実行します(Node 22ネイティブ、dotenv不要)シェルのexport —
export OPENAI_API_KEY=sk-xxxを実行してから起動
キーがないプロバイダーはlist_providersで利用不可と表示され、呼び出し時に不足している変数が報告されます。
公開(npxが機能する前に)
pnpm publish # or pnpm release (changeset flow)環境変数
各プロバイダーのAPI_KEY、BASE_URL、MODELは環境変数で上書きできます(規約: <PROVIDER_PREFIX>_API_KEY / <PROVIDER_PREFIX>_BASE_URL / <PROVIDER_PREFIX>_MODEL):
プロバイダー | 環境変数 | デフォルトモデル |
OpenAI |
|
|
Anthropic |
|
|
Google Gemini |
|
|
Alibaba DashScope |
|
|
Zhipu |
|
|
Volcengine Doubao |
|
|
Baidu Qianfan |
|
|
StepFun |
|
|
Ollama(ローカル) |
| —(組み込みデフォルトなし。エンドポイントとモデルの設定必須) |
Alibaba Bailian |
|
|
SiliconFlow |
|
|
OpenRouter |
|
|
カスタム互換 |
| — |
?= 任意(組み込みデフォルトあり);*= 必須。
グローバル設定:
環境変数 | デフォルト | 説明 |
| 最初に利用可能なもの | デフォルトプロバイダー |
| プロバイダーデフォルト | デフォルトモデル |
| 表の順序 | プロバイダー優先順位(カンマ区切り、高い順。例: |
| 0(オフ) | フォールバック前のプロバイダーごとのリトライ回数 |
| 0(オフ) | 断念するまでの最大プロバイダーフォールバック数 |
| 20 MB | 画像サイズ制限 |
| 60000 | ダウンロード&リクエストのタイムアウト(ms) |
フォールバックチェーン
複数のプロバイダーが利用可能な場合、呼び出しは優先順位チェーンを辿ります:設定されたデフォルト → VISION_MCP_PROVIDER_PRIORITYリスト → 表の順序(利用不可のプロバイダーはスキップされます)。
各プロバイダーは、プロバイダーエラー(上流の障害、タイムアウト)発生時に
VISION_MCP_MAX_RETRIES回までリトライされますプロバイダーがリトライを使い切ると、チェーン内の次の利用可能なプロバイダーが試行され、
VISION_MCP_MAX_FALLBACKS回までフォールバックしますリトライ/フォールバックが発生するのはプロバイダーエラーのみです。設定エラーや画像エラーは即座に失敗します
明示的に
provider引数が指定された場合は、そのプロバイダーのみが試行されます(フォールバックなし)すべてが失敗した場合、エラーには試行されたすべてのプロバイダーとその最終エラーが列挙されます
argvでも指定可能:--provider-priority=...、--max-retries=N、--max-fallbacks=N(環境変数より優先)。
MCP起動引数(argv)
各プロバイダーのapiKey / baseUrl / modelは起動引数で上書きできます(環境変数より優先度が高い)。形式は--<provider>-<field>:
node dist/index.js \
--openai-api-key=sk-xxx \
--openai-base-url=https://my-gateway.example.com/v1 \
--openai-model=gpt-4o-mini \
--dashscope-api-key=sk-xxx \
--default-provider=dashscopeグローバル:
--default-provider <name>/--default-model <name>プロバイダーごと:
--<provider>-api-key、--<provider>-base-url、--<provider>-model(イコール形式とスペース形式の両方に対応)任意のOpenAI互換サードパーティサービス:
--openai-compat-base-url+--openai-compat-api-key+--openai-compat-modelで1行で接続可能。または、任意の組み込みプロバイダーのbase-urlをミラー/プロキシに向けることも可能
優先順位: ツール引数のprovider/model > 起動引数(プロバイダーごと > グローバルデフォルト) > 環境変数 > プロバイダーの組み込みデフォルト。
ツール
ツール | 引数 | 説明 |
|
| 一般的な画像分析 |
|
| 画像内容の説明(デフォルトの指示文) |
|
| OCR。レイアウトを保持 |
| — | プロバイダー一覧と設定状態 |
imageは以下を受け付けます:ローカルパス / http(s):// URL / data: URI / 生のbase64。自動判別されます。
セキュリティ上の注意: URLダウンロードはSSRF保護されています。すべてのホップ(リダイレクトを含む)が検証され、ループバック、プライベート、リンクローカルアドレスに解決されるURLはブロックされます(エラーにその理由のヒントが含まれます)。
プロバイダー統合(3段階フォールバックチェーン)
プロバイダー | 統合 | 備考 |
| OpenAI 互換アダプタ(openai SDK) | 1 つのアダプタで baseURL を設定可能 |
| 公式 SDK @anthropic-ai/sdk | messages + image content block |
| 公式 SDK @google/generative-ai | generateContent + inlineData |
| ネイティブ fetch | 公式 npm パッケージは vision 非対応。multimodal-generation API を直接使用 |
| ネイティブ fetch | 公式 SDK は文字列コンテンツのみ受け付け。v4 API を直接使用 |
| ネイティブ fetch | 公式 openapi は管理プレーン。Ark API を直接使用 |
| ネイティブ fetch | 公式 SDK は文字列のみ対応。AK/SK → token → v2 API を使用 |
プロバイダーの追加: OpenAI 互換エンドポイントの場合、src/core/config.ts の RULES に 1 行追加し、src/index.ts のファクトリテーブルに 1 つのマッピングを追加するだけで、新しいコードは不要です。公式 SDK またはネイティブ fetch の実装は SPEC §1 を参照してください。
開発
pnpm check # biome checks
pnpm test # rstest unit tests (injected mocks, no network)
pnpm build # rslib build実呼び出しスモークテスト(API キーが設定されているプロバイダーに対してのみ実行され、それ以外ではスキップされます):
OPENAI_API_KEY=sk-... pnpm exec rstest tests/e2eアーキテクチャ
src/
├── index.ts # Entry: composition root, stdio startup
├── core/ # Abstraction: interfaces / image loading / config / registry
├── providers/ # Adapters: official SDK or compatible endpoints, protocol conversion only
└── server/tools.ts # MCP tool layer: zod validation + error mapping完全な仕様: SPEC.md。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceA versatile MCP server that adds vision capabilities (image analysis, OCR, image/video generation) to AI models lacking native vision, with support for multiple providers and automatic task routing.1
- AlicenseAqualityBmaintenanceMCP server that provides an analyze_image tool using OpenAI-compatible vision LLMs to describe images from file paths, URLs, or base64 data.1201MIT
- FlicenseAqualityBmaintenanceOpenAI-compatible vision MCP server with 14 provider presets that enables MCP clients to analyze images, including screenshots, text, and UI mockups, via a single analyze_image tool.2
- AlicenseNot gradedqualityCmaintenanceMCP server for analyzing images using multiple vision LLM providers (OpenCode, OpenAI, Anthropic, Google, and custom OpenAI-compatible endpoints). Provides tools to analyze single or multiple images, list providers, and test vision capabilities.MIT
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/aesoper101/vision-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server