vlm-mcp
VLM-MCP
VLMベースの画像理解MCPサーバー。統一されたOpenAI互換APIを介して、ローカルのllama.cppとオンラインVLM(例:Qwen3-VL-Flash)をサポートします。
English
特徴
デュアルバックエンド:ローカルllama.cpp + オンラインQwen3-VL-Flash、統一OpenAI互換API
3層キャッシュ:L1画像エンコードキャッシュ、L2レスポンスキャッシュ(TTL付き)、L3 llama-server KVキャッシュ
セッション管理:マルチターン会話コンテキスト、自動退避とタイムアウトクリーンアップ
プロンプトテンプレート:組み込みのdescribe / ocr / chart / translate / qa
ライフサイクル管理:llama-serverサブプロセスがMCPと連動して自動起動・停止、手動管理不要
バックエンドヘルス:APIキーエラー時にバックエンドを自動無効化、手動での有効化・無効化をサポート
マルチソース画像:ローカルパス、HTTP URL、Base64 Data URI、生のBase64フォールバック
アーキテクチャ
MCP Client (SSE :11432)
│
▼
server.py ── tool layer (analyze_image / create_session / ...)
│
├── session_manager.py ── session lifecycle
├── cache.py ── L1 image cache + L2 response cache
├── image_utils.py ── image parsing (path/URL/Base64)
│
▼
providers/ ── OpenAI-compatible interface
│
├── llama-cpp (localhost:11433) ← auto-launched by llama_launcher.py
└── qwen-vl (dashscope API)クイックスタート
環境要件
コンポーネント | 備考 |
Python 3.11+ | ランタイム |
パッケージマネージャー | |
ネイティブバイナリ( | |
Qwen3-VL-8B GGUF | 言語モデル + ビジョンプロジェクター |
注意:このプロジェクトはllama.cppネイティブバイナリ(
llama-server)を使用し、llama-cpp-pythonは使用しません。 Pythonバインディングは不要です。llama.cpp実行ファイルをダウンロードするだけです。
推奨モデル:Qwen3-VL-8B-Instruct-GGUFから2つのファイルをダウンロード:
ファイル | 推奨 | 備考 |
ビジョンモデル |
| Q4_K_M量子化、速度と精度のバランス |
ビジョンプロジェクター |
| F16である必要があります。量子化しないでください |
8GBのVRAMで十分です。オンライン専用モード(qwen-vlバックエンドのみ)では、llama.cppとGGUFモデルをスキップできます。
インストール
git clone https://github.com/YC-CLT/VLM-mcp.git
cd VLM-mcp
uv sync設定
cp config.example.json config.jsonconfig.jsonを編集:
{
"backends": {
"llama-cpp": {
"enabled": true,
"base_url": "http://localhost:11433/v1",
"api_key": "sk-no-key-required",
"model_name": "qwen3-vl"
},
"qwen-vl": {
"enabled": false,
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "your-dashscope-api-key",
"model_name": "qwen-vl-flash"
}
},
"default_backend": "llama-cpp",
"cache_enabled": true,
"llama": {
"server_exe": "llama-server",
"model": "D:/path/to/Qwen3VL-8B-Instruct-Q4_K_M.gguf",
"mmproj": "D:/path/to/mmproj-Qwen3VL-8B-Instruct-F16.gguf",
"ngl": 99
}
}主要フィールド:
backends.<name>.enabled:falseに設定するとバックエンドを手動で無効化llama.model/llama.mmproj:モデルファイルの絶対パス(必須)llama.ngl:GPUレイヤー数、99= 全GPU、0= CPUのみllama.server_exe:llama-server実行ファイル、デフォルトはPATHから検索
実行
uv run main.pyllama-serverサブプロセスはMCPと連動して自動起動・停止します。手動管理は不要です。
MCP SSEエンドポイント:http://127.0.0.1:11432/sse
任意のディレクトリから実行:
uv run --directory D:\CodeFile\VLM-mcp main.py
MCPクライアント設定
MCPクライアント設定に追加:
{
"mcpServers": {
"vlm-mcp": {
"url": "http://127.0.0.1:11432/sse"
}
}
}MCPツール
ツール | パラメータ | 説明 |
|
| テンプレートとセッションをサポートした画像分析 |
|
| マルチターン会話セッションを作成 |
|
| セッションを閉じる |
| — | すべてのアクティブなセッションを一覧表示 |
| — | バックエンドとそのステータスを一覧表示 |
| — | 利用可能なプロンプトテンプレートを一覧表示 |
テンプレート
テンプレート | パラメータ | 説明 |
| — | 一般的な画像説明 |
| — | テキスト抽出 |
| — | チャート分析 |
|
| 画像翻訳(デフォルト:zh) |
|
| 画像Q&A |
使用例
// Single analysis
{
"tool": "analyze_image",
"args": {
"image": "D:/photos/cat.png",
"prompt": "What is in this image?"
}
}
// Using template
{
"tool": "analyze_image",
"args": {
"image": "https://example.com/chart.png",
"template": "chart"
}
}
// Multi-turn session
{ "tool": "create_session", "args": { "backend": "llama-cpp" } }
// → { "session_id": "xxx" }
{ "tool": "analyze_image", "args": { "image": "...", "prompt": "...", "session_id": "xxx" } }
{ "tool": "analyze_image", "args": { "prompt": "Tell me more", "session_id": "xxx" } }
{ "tool": "close_session", "args": { "session_id": "xxx" } }設定定数
config.py内の非機密定数:
定数 | デフォルト | 説明 |
| 20 | 画像の最大サイズ |
| 10 | 画像ダウンロードタイムアウト(秒) |
| 100 | L1キャッシュ上限 |
| 500 | L2キャッシュ上限 |
| 3600 | オンラインバックエンドキャッシュTTL(秒) |
| 1800 | ローカルバックエンドキャッシュTTL(秒) |
| 1800 | セッションタイムアウト(秒) |
| 5 | バックエンドあたりの最大セッション数 |
| "INFO" | ログレベル |
開発
uv sync --dev
uv run pytest tests/ -vよくある質問
llama-serverがCPUで動作していますか?config.jsonのllama.nglを確認してください。99 = 全GPU、0 = CPUのみ。
llama-serverが起動に失敗しますか?server_exeが実行可能であることと、model/mmprojのパスが存在することを確認してください。llama_server.logを確認してください。
オンラインバックエンドが401を返しますか?
無効なAPIキーはバックエンドを自動無効化します。有効なキーを設定して再起動してください。または"enabled": falseに設定してスキップしてください。
ポート競合?
MCPポート11432、llama-serverポート11433。config.jsonのllama.portまたはserver.pyのポートを変更してください。
Related MCP server: MCP Vision Server
中文
特徴
デュアルバックエンドサポート:ローカルllama.cpp + オンラインQwen3-VL-Flash、統一OpenAI互換API
3層キャッシュ:L1画像エンコードキャッシュ、L2レスポンスキャッシュ(TTL付き)、L3 llama-server KVキャッシュ
セッション管理:マルチターン会話コンテキスト保持、自動退避とタイムアウトクリーンアップ
プロンプトテンプレート:組み込みのdescribe / ocr / chart / translate / qaテンプレート
ライフサイクル管理:llama-serverサブプロセスがMCPと同時に起動・停止、起動後すぐに使用可能、手動管理不要
バックエンドヘルス:APIキーエラー時にバックエンドを自動無効化、手動での有効化・無効化をサポート
マルチソース画像:ローカルパス、HTTP URL、Base64 Data URI、純粋なBase64フォールバック
アーキテクチャ
MCP Client (SSE :11432)
│
▼
server.py ── 工具层 (analyze_image / create_session / ...)
│
├── session_manager.py ── 会话生命周期
├── cache.py ── L1 图片缓存 + L2 响应缓存
├── image_utils.py ── 图片解析 (路径/URL/Base64)
│
▼
providers/ ── OpenAI 兼容接口
│
├── llama-cpp (localhost:11433) ← llama_launcher.py 自动启动
└── qwen-vl (dashscope API)クイックスタート
環境要件
コンポーネント | 説明 |
Python 3.11+ | ランタイム環境 |
パッケージ管理 | |
ネイティブバイナリ( | |
Qwen3-VL-8B GGUF | 言語モデル + ビジョンプロジェクター |
注意:このプロジェクトはllama.cppネイティブバイナリ(
llama-server)を使用し、llama-cpp-pythonではありません。 Pythonバインディングのインストールは不要です(llama-cpp-pythonは不要で、これは単体のllama.cppとは独立しています)。llama.cpp実行ファイルをダウンロードするだけでOKです。
推奨モデルのダウンロード:Qwen3-VL-8B-Instruct-GGUFから2つのファイルをダウンロード:
ファイル | 推奨 | 説明 |
ビジョンモデル |
| Q4_K_M量子化、速度と精度のバランス |
画像エンコーダー |
| F16を推奨、量子化不要 |
これで8GBのVRAMで動作します
純オンラインモード(qwen-vlバックエンドのみ)では、llama.cppとGGUFモデルをスキップできます。
インストール
git clone https://github.com/YC-CLT/VLM-mcp.git
cd VLM-mcp
uv sync設定
cp config.example.json config.jsonconfig.jsonを編集:
{
"backends": {
"llama-cpp": {
"enabled": true,
"base_url": "http://localhost:11433/v1",
"api_key": "sk-no-key-required",
"model_name": "qwen3-vl"
},
"qwen-vl": {
"enabled": false,
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key": "your-dashscope-api-key",
"model_name": "qwen-vl-flash"
}
},
"default_backend": "llama-cpp",
"cache_enabled": true,
"llama": {
"server_exe": "llama-server",
"model": "D:/path/to/Qwen3VL-8B-Instruct-Q4_K_M.gguf",
"mmproj": "D:/path/to/mmproj-Qwen3VL-8B-Instruct-F16.gguf",
"ngl": 99
}
}主要フィールド:
backends.<name>.enabled:falseに設定するとバックエンドを手動で無効化llama.model/llama.mmproj:ローカルモデルファイルの絶対パス(必須)llama.ngl:GPUレイヤー数、99はすべてGPUにオフロード、0は純CPUllama.server_exe:llama-server実行ファイル、デフォルトはPATHから検索
実行
uv run main.py起動後、llama-serverサブプロセスが自動的に起動し、MCP終了時に自動停止します。llama-serverの手動管理は不要です。
MCP SSEエンドポイント:http://127.0.0.1:11432/sse
任意のディレクトリから実行:
uv run --directory D:\CodeFile\VLM-mcp main.py
MCPクライアント設定
MCPクライアント設定ファイルに追加:
{
"mcpServers": {
"vlm-mcp": {
"url": "http://127.0.0.1:11432/sse"
}
}
}MCPツール
ツール | パラメータ | 説明 |
|
| 画像分析、テンプレートとセッションをサポート |
|
| マルチターン会話セッションを作成 |
|
| セッションを閉じる |
| — | すべてのアクティブなセッションを一覧表示 |
| — | バックエンドとそのステータスを一覧表示 |
| — | 利用可能なプロンプトテンプレートを一覧表示 |
テンプレート
テンプレート | パラメータ | 説明 |
| — | 一般的な画像説明 |
| — | テキスト抽出 |
| — | チャート分析 |
|
| 画像翻訳(デフォルト:中国語) |
|
| 画像Q&A |
使用例
// 单次分析
{
"tool": "analyze_image",
"args": {
"image": "D:/photos/cat.png",
"prompt": "这张图片里有什么?"
}
}
// 使用模板
{
"tool": "analyze_image",
"args": {
"image": "https://example.com/chart.png",
"template": "chart"
}
}
// 多轮会话
{ "tool": "create_session", "args": { "backend": "llama-cpp" } }
// → { "session_id": "xxx" }
{ "tool": "analyze_image", "args": { "image": "...", "prompt": "...", "session_id": "xxx" } }
{ "tool": "analyze_image", "args": { "prompt": "继续分析", "session_id": "xxx" } }
{ "tool": "close_session", "args": { "session_id": "xxx" } }設定定数
非機密定数はconfig.pyに集約されており、コード内で直接変更できます:
定数 | デフォルト | 説明 |
| 20 | 画像の最大サイズ |
| 10 | 画像ダウンロードタイムアウト(秒) |
| 100 | L1キャッシュ上限 |
| 500 | L2キャッシュ上限 |
| 3600 | オンラインバックエンドキャッシュTTL(秒) |
| 1800 | ローカルバックエンドキャッシュTTL(秒) |
| 1800 | セッションタイムアウト(秒) |
| 5 | バックエンドあたりの最大セッション数 |
| "INFO" | ログレベル |
開発
uv sync --dev
uv run pytest tests/ -vよくある質問
llama-serverがCPUで動作していますか?config.jsonのllama.nglが99(全GPU)かどうか確認してください。0は純CPUです。
llama-serverの起動に失敗しましたか?server_exeが実行可能(PATH内または絶対パス)であることと、model/mmprojのパスが存在することを確認してください。llama_server.logを確認してください。
オンラインバックエンドの401エラー?
APIキーが無効な場合、そのバックエンドは自動的に無効化されます。キーを設定して再起動すると復元できます。手動で"enabled": falseに設定してスキップすることもできます。
ポートが使用中?
MCPポート11432、llama-serverポート11433。config.jsonのllama.portまたはserver.pyのポート番号を変更してください。
ライセンス
MIT
This server cannot be installed
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
- AlicenseAqualityDmaintenanceEnables image analysis and understanding using Vision Language Models through OpenAI-compatible APIs. Supports analyzing images from URLs or local files with custom prompts.12MIT
- AlicenseAqualityDmaintenanceProvides advanced image analysis capabilities including object recognition, OCR text extraction, and multi-turn visual dialogues using OpenAI-compatible APIs. It supports both local files and Base64 inputs with additional features for session persistence and web-based configuration management.3MIT
- FlicenseNot gradedqualityCmaintenanceEnables image recognition using vision models via OpenAI-compatible APIs, supporting multiple platforms like OpenAI, DeepSeek, and Ollama.
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to analyze images using any OpenAI-compatible vision API, providing tools for image analysis, OCR, error diagnosis, diagram understanding, and chart analysis.MIT
Related MCP Connectors
LLM chat, text summarization and AI image generation
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Universal AI API Orchestrator — 1,554 tools, 96 services. One install.
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/YC-CLT/VLM-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server