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 deployed
Maintenance
Related MCP Connectors
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
Image & PDF tools for AI agents: compress, convert, resize, PDF, AI vision, pipeline.
Turn any LLM multimodal; generate images, voices, videos, 3D models, music, and more.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
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 gradedqualityDmaintenanceEnables image recognition using vision models via OpenAI-compatible APIs, supporting multiple platforms like OpenAI, DeepSeek, and Ollama.-
- AlicenseNot gradedqualityDmaintenanceEnables 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