Skip to main content
Glama

Vision MCP Server

Сервер Model Context Protocol (MCP), который даёт возможность понимания изображений агентам, подключённым к немультимодальным моделям (DeepSeek, старые GPT-4, локальные маленькие модели и т. д.): агент передаёт изображение MCP-инструменту, сервер вызывает vision-модель и возвращает текст.

Поддерживает основных провайдеров в Китае и США, а также любую 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-совместимая конечная точка

  • Три способа передачи изображения: локальный путь / http(s) URL / base64 (data URI или сырой base64), автоматическое определение

  • Трёхуровневая цепочка резервирования: официальный 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.js

Примеры конфигурации MCP (stdio)

Сервер использует транспорт stdio: MCP-клиент запускает процесс и обменивается JSON-RPC-сообщениями через stdin/stdout. Настройте его там, где ваш клиент определяет 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

Настройка переменных

  1. Блок env в конфигурации MCP (рекомендуется, наиболее надёжно на всех платформах) — запишите переменные в объект env выше

  2. Файл .env (локальная разработка) — скопируйте .env.example в .env, заполните его, затем node --env-file-if-exists=.env dist/index.js (нативный Node 22, dotenv не нужен)

  3. Экспорт в оболочке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

OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODEL

gpt-4o

Anthropic

ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL, ANTHROPIC_MODEL

claude-sonnet-4-5

Google Gemini

GEMINI_API_KEY, GEMINI_BASE_URL, GEMINI_MODEL

gemini-2.5-flash

Alibaba DashScope

DASHSCOPE_API_KEY, DASHSCOPE_BASE_URL, DASHSCOPE_MODEL

qwen-vl-max

Zhipu

ZHIPU_API_KEY, ZHIPU_BASE_URL, ZHIPU_MODEL

glm-4v-flash (бесплатно)

Volcengine Doubao

VOLCENGINE_ARK_API_KEY, VOLCENGINE_ARK_BASE_URL, VOLCENGINE_ARK_MODEL

doubao-1.5-vision-pro

Baidu Qianfan

QIANFAN_API_KEY, QIANFAN_SECRET_KEY, QIANFAN_BASE_URL, QIANFAN_MODEL

ernie-4.5-vl-8k

StepFun

STEPFUN_API_KEY, STEPFUN_BASE_URL, STEPFUN_MODEL

step-1v

Ollama (локально)

OLLAMA_BASE_URL, OLLAMA_MODEL

— (нет встроенного значения по умолчанию; конечная точка и модель должны быть заданы)

Alibaba Bailian

BAILIAN_API_KEY, BAILIAN_BASE_URL (по умолчанию совместимый режим DashScope), BAILIAN_MODEL

qwen-vl-max

SiliconFlow

SILICONFLOW_API_KEY, SILICONFLOW_BASE_URL (по умолчанию https://api.siliconflow.cn/v1), SILICONFLOW_MODEL

Qwen/Qwen2.5-VL-72B-Instruct

OpenRouter

OPENROUTER_API_KEY, OPENROUTER_BASE_URL (по умолчанию https://openrouter.ai/api/v1), OPENROUTER_MODEL

openai/gpt-4o

Собственный совместимый

OPENAI_COMPAT_BASE_URL, OPENAI_COMPAT_API_KEY?, OPENAI_COMPAT_MODEL

? = необязательно (есть встроенное значение по умолчанию); * = обязательно.

Глобальная конфигурация:

Переменная окружения

Значение по умолчанию

Описание

VISION_MCP_DEFAULT_PROVIDER

первый доступный

Провайдер по умолчанию

VISION_MCP_DEFAULT_MODEL

значение провайдера

Модель по умолчанию

VISION_MCP_PROVIDER_PRIORITY

порядок таблицы

Приоритет провайдеров (через запятую, сначала высокий, напр. openai,dashscope,zhipu)

VISION_MCP_MAX_RETRIES

0 (выкл.)

Количество повторов для провайдера перед резервированием

VISION_MCP_MAX_FALLBACKS

0 (выкл.)

Максимум резервных переходов между провайдерами перед отказом

VISION_MCP_MAX_IMAGE_BYTES

20 МБ

Лимит размера изображения

VISION_MCP_TIMEOUT_MS

60000

Таймаут загрузки и запроса (мс)

Цепочка резервирования

Когда доступно несколько провайдеров, вызовы идут по цепочке приоритетов: настроенный по умолчанию → список 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 <имя> / --default-model <имя>

  • Для каждого провайдера: --<provider>-api-key, --<provider>-base-url, --<provider>-model (работает и форма с =, и с пробелом)

  • Любая OpenAI-совместимая сторонняя служба: подключение одной строкой через --openai-compat-base-url + --openai-compat-api-key + --openai-compat-model; или укажите base-url любого встроенного провайдера на зеркало/прокси

Приоритет: аргументы инструмента provider/model > аргументы запуска (для провайдера > глобальное значение по умолчанию) > переменные окружения > встроенные значения провайдера по умолчанию.

Инструменты

Инструмент

Аргументы

Описание

analyze_image

image*, prompt?, provider?, model?

Общий анализ изображения

describe_image

image*, provider?, model?

Описание содержимого изображения (инструкция по умолчанию)

ocr_image

image*, language? (auto/zh/en/zh-en), provider?, model?

OCR с сохранением структуры

list_providers

Список провайдеров и статус конфигурации

image принимает: локальный путь / http(s):// URL / data: URI / сырой base64, автоматическое определение.

Примечание по безопасности: загрузка URL защищена от SSRF — каждый переход (включая редиректы) проверяется, а URL, разрешающиеся в loopback-, приватные или link-local-адреса, блокируются (в ошибке есть подсказка с объяснением причины).

Интеграция провайдеров (трёхуровневая цепочка резервирования)

провайдер

Интеграция

Примечания

openai / stepfun / ollama / bailian / siliconflow / openrouter / openai-compat

Совместимый с OpenAI адаптер (openai SDK)

Один адаптер, настраиваемый baseURL

anthropic

Официальный SDK @anthropic-ai/sdk

блок содержимого messages + image

gemini

Официальный SDK @google/generative-ai

generateContent + inlineData

dashscope

Нативный fetch

официальный npm-пакет не поддерживает vision; прямой API мультимодальной генерации

zhipu

Нативный fetch

официальный SDK принимает только строковый контент; прямой v4 API

volcengine

Нативный fetch

официальный openapi — это плоскость управления; прямой Ark API

qianfan

Нативный fetch

официальный SDK работает только со строками; AK/SK → token → v2 API

Добавление провайдера: для конечных точек, совместимых с OpenAI, добавьте одну строку в RULES в src/core/config.ts и одно сопоставление в фабричную таблицу в src/index.ts — ноль нового кода. Реализации официального SDK или нативного fetch: см. SPEC §1.

Разработка

pnpm check        # biome checks
pnpm test         # rstest unit tests (injected mocks, no network)
pnpm build        # rslib build

Дымовые тесты с реальными вызовами (выполняются только для провайдеров, для которых настроены ключи; в противном случае пропускаются):

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.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
3Releases (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
    Not graded
    quality
    C
    maintenance
    MCP 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

View all related MCP servers

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.

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/aesoper101/vision-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server