Skip to main content
Glama

VLM-MCP

GitHub License: MIT Python 3.11+ MCP

English | 中文

MCP-сервер для понимания изображений на основе VLM. Поддерживает локальный llama.cpp и онлайн-VLM (например, Qwen3-VL-Flash) через единый OpenAI-совместимый API.


English

Возможности

  • Два бэкенда: локальный llama.cpp + онлайн Qwen3-VL-Flash, единый OpenAI-совместимый API

  • Трёхуровневый кэш: L1 — кэш кодирования изображений, L2 — кэш ответов (с TTL), L3 — KV-кэш llama-server

  • Управление сессиями: контекст многоходовых диалогов, автоматическое вытеснение и очистка по таймауту

  • Шаблоны промптов: встроенные 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+

Среда выполнения

uv

Менеджер пакетов

llama.cpp

Нативный бинарник (llama-server), требуется сборка CUDA

Qwen3-VL-8B GGUF

Языковая модель + визуальный проектор

Примечание: этот проект использует нативный бинарник llama.cpp (llama-server), а НЕ llama-cpp-python. Python-привязки не нужны — просто скачайте исполняемый файл llama.cpp.

Рекомендуемая модель: скачайте два файла из Qwen3-VL-8B-Instruct-GGUF:

Файл

Рекомендуемый

Примечания

Модель зрения

Qwen3VL-8B-Instruct-Q4_K_M.gguf

Квантование Q4_K_M, баланс скорости и точности

Визуальный проектор

mmproj-Qwen3VL-8B-Instruct-F16.gguf

Должен быть F16, не квантовать

8 ГБ видеопамяти достаточно. В режиме только онлайн (только бэкенд 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.json

Отредактируйте config.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.py

Подпроцесс llama-server автоматически запускается и останавливается вместе с MCP. Ручное управление не требуется.

MCP SSE endpoint: 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-инструменты

Инструмент

Параметры

Описание

analyze_image

image, prompt, template, params, backend, session_id

Анализ изображения с поддержкой шаблонов и сессий

create_session

backend

Создание сессии многоходового диалога

close_session

session_id

Закрытие сессии

list_sessions

Список всех активных сессий

list_backends

Список бэкендов и их статус

list_templates

Список доступных шаблонов промптов

Шаблоны

Шаблон

Параметры

Описание

describe

Общее описание изображения

ocr

Извлечение текста

chart

Анализ диаграмм

translate

target_lang

Перевод изображения (по умолчанию: zh)

qa

question

Вопросы и ответы по изображению

Примеры

// 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:

Константа

По умолчанию

Описание

IMAGE_MAX_SIZE_MB

20

Максимальный размер изображения

IMAGE_DOWNLOAD_TIMEOUT

10

Таймаут загрузки изображения (с)

CACHE_IMAGE_MAX_ENTRIES

100

Лимит кэша L1

CACHE_RESPONSE_MAX_ENTRIES

500

Лимит кэша L2

CACHE_RESPONSE_TTL_ONLINE

3600

TTL кэша онлайн-бэкенда (с)

CACHE_RESPONSE_TTL_LOCAL

1800

TTL кэша локального бэкенда (с)

SESSION_TTL

1800

Таймаут сессии (с)

SESSION_MAX

5

Максимум сессий на бэкенд

LOG_LEVEL

"INFO"

Уровень логирования

Разработка

uv sync --dev
uv run pytest tests/ -v

Часто задаваемые вопросы

llama-server работает на CPU?
Проверьте llama.ngl в config.json99 = всё на GPU, 0 = только CPU.

llama-server не запускается?
Убедитесь, что server_exe исполняемый и пути model/mmproj существуют. Проверьте llama_server.log.

Онлайн-бэкенд возвращает 401?
Недействительный API-ключ автоматически отключает бэкенд. Установите корректный ключ и перезапустите. Или установите "enabled": false, чтобы пропустить.

Конфликт портов?
MCP порт 11432, порт llama-server 11433. Измените llama.port в config.json или порт в server.py.


Related MCP server: MCP Vision Server

中文

特性

  • 双后端支持:本地 llama.cpp + 在线 Qwen3-VL-Flash,统一 OpenAI 兼容 API

  • 三层缓存:L1 图片编码缓存、L2 响应缓存(带 TTL)、L3 llama-server KV Cache

  • 会话管理:多轮对话上下文保持,自动淘汰与超时清理

  • 提示词模板:内置 describe / ocr / chart / translate / qa 模板

  • 生命周期管理:llama-server 子进程与 MCP 同起同停,启动即用,无需手动管理

  • 后端健康:API Key 错误自动禁用后端,支持手动启用/禁用

  • 多图片来源:本地路径、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+

运行环境

uv

包管理

llama.cpp

原生二进制(llama-server),需 CUDA 版

Qwen3-VL-8B GGUF

语言模型 + 视觉投影器

注意:本项目使用 llama.cpp 原生二进制(llama-server),不是 llama-cpp-python 无需安装 Python 绑定(即无需llama-cpp-python,这个和单llama.cpp相互独立),只需下载 llama.cpp 可执行文件即可。

推荐模型下载:从 Qwen3-VL-8B-Instruct-GGUF 下载两个文件:

文件

推荐

说明

视觉模型

Qwen3VL-8B-Instruct-Q4_K_M.gguf

Q4_K_M 量化,平衡速度与精度

图像编码器

mmproj-Qwen3VL-8B-Instruct-F16.gguf

建议 F16,不必量化

这样8G显存就可以跑

纯在线模式(仅用 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.json

编辑 config.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 表示全部 offload 到 GPU,0 为纯 CPU

  • llama.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 工具

工具

参数

说明

analyze_image

image, prompt, template, params, backend, session_id

分析图片,支持模板和会话

create_session

backend

创建多轮对话会话

close_session

session_id

关闭会话

list_sessions

列出所有活跃会话

list_backends

列出后端及其状态

list_templates

列出可用提示词模板

模板

模板

参数

说明

describe

通用图片描述

ocr

文字提取

chart

图表分析

translate

target_lang

图片翻译(默认中文)

qa

question

图片问答

使用示例

// 单次分析
{
  "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,可在代码中直接修改:

常量

默认值

说明

IMAGE_MAX_SIZE_MB

20

图片最大体积

IMAGE_DOWNLOAD_TIMEOUT

10

图片下载超时(秒)

CACHE_IMAGE_MAX_ENTRIES

100

L1 缓存上限

CACHE_RESPONSE_MAX_ENTRIES

500

L2 缓存上限

CACHE_RESPONSE_TTL_ONLINE

3600

在线后端缓存 TTL(秒)

CACHE_RESPONSE_TTL_LOCAL

1800

本地后端缓存 TTL(秒)

SESSION_TTL

1800

会话超时(秒)

SESSION_MAX

5

每后端最大会话数

LOG_LEVEL

"INFO"

日志级别

开发

uv sync --dev
uv run pytest tests/ -v

常见问题

llama-server 跑在 CPU 上?
检查 config.jsonllama.ngl 是否为 99(全 GPU),0 为纯 CPU。

llama-server 启动失败?
确认 server_exe 可执行(PATH 中或绝对路径),model/mmproj 路径存在。查看 llama_server.log

在线后端 401 错误?
API Key 无效时会自动禁用该后端,设好 Key 后重启即可恢复。也可手动设 "enabled": false 跳过。

端口被占用?
MCP 端口 11432,llama-server 端口 11433。修改 config.jsonllama.portserver.py 中端口号。

许可

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    Provides 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.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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