Skip to main content
Glama

visionMCP 👁️

更大推理LLM的眼睛。

visionMCP 是一个 Model Context Protocol 服务器,为任何支持 MCP 的智能体提供真正的视觉能力。纯文本推理模型可以将任何它无法看到的内容委托给此服务器:描述截图、回答关于照片的问题、OCR 文档或比较两张图片——服务器负责“看”,然后返回文本。

它支持所有三种主流视觉后端,在运行时通过单个 config.json 选择:

提供商

API

示例模型

Ollama

OpenAI 兼容 (http://localhost:11434/v1)

llama3.2-vision, qwen2.5vl, llava

OpenAI

Chat Completions 视觉 API

gpt-4o, gpt-4o-mini

Anthropic

Claude Messages 视觉 API

claude-3-5-sonnet-latest, claude-3-7-sonnet-latest


功能特性

  • 🔍 四个视觉工具供推理 LLM 调用:

    • describe_image — 完整的自然语言描述

    • ask_about_image — 针对任意图片的定向问答

    • extract_text — OCR / 转录

    • compare_images — 并排比较

  • 🖼️ 接受所有来源:本地文件路径、http(s) URL 以及 base64 data: URI。

  • 📦 零图片预处理:超大图片会自动缩小并重新编码为 JPEG,以适配提供商的有效载荷限制。

  • 🔌 三种传输方式:stdio(默认,用于本地 MCP 客户端)、http(可流式 HTTP,用于远程托管)或 sse(传统 Server-Sent Events)。

  • ⚙️ 一个 config.json 控制提供商、API 密钥、API URL 和模型。环境变量和 CLI 标志可以覆盖任何设置。

  • 🚀 由 uv 管理,可安装、可运行、可托管。


Related MCP server: vision-bridge-mcp

快速开始

1. 安装

需要 uv 和 Python ≥ 3.10。

cd visionMCP
uv sync

2. 配置

附带的 config.json 已可直接用于本地 Ollama。通过编辑文件切换提供商:

// config.json
{
  "provider": "openai",                  // "ollama" | "openai" | "anthropic"
  "api_key": "sk-...",                   // or leave "" and export OPENAI_API_KEY
  "api_url": "",                         // "" = provider default
  "model": ""                            // "" = provider default
}

查看 docs/configuration.md 了解所有选项,以及 docs/providers.md 了解每个提供商的设置。

安全: 不要将真实的 API 密钥提交到 git——将 config.json 复制为 config.local.json(自动忽略)或使用环境变量。服务器永远不会记录你的密钥。

3. 运行

uv run vision-mcp                        # stdio transport (default)
uv run vision-mcp --transport http --host 0.0.0.0 --port 8100   # host remotely
uv run vision-mcp --show-config          # print resolved config (key masked)

接入 MCP 客户端

opencode (opencode.json)

{
  "mcpServers": {
    "visionMCP": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/visionMCP", "vision-mcp"]
    }
  }
}

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "visionMCP": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/visionMCP", "vision-mcp"]
    }
  }
}

通用 MCP 客户端 (stdio)

{
  "mcpServers": {
    "visionMCP": {
      "command": "/path/to/visionMCP/.venv/bin/vision-mcp",
      "args": ["--config", "/path/to/visionMCP/config.json"]
    }
  }
}

服务器除了工具调用提供的内容外,不会向视觉 API 发送图片内容。图片字节保留在内存中,不会写入磁盘。


工具参考

工具

参数

返回

describe_image

image (路径/URL/data-URI)

纯文本的完整描述

ask_about_image

image, question

针对性回答

extract_text

image

转录/OCR 后的文本

compare_images

image_a, image_b, 可选 question

纯文本的比较结果

server_status

—

提供商、模型、传输方式

image 参数接受以下任意一种:

/path/to/photo.png          # local file
https://example.com/x.jpg   # URL (downloaded at call time)
data:image/png;base64,iVBORw0KGgo...   # base64 data URI

工作原理

所有功能都汇聚在 src/vision_mcp/pipeline.py 中的一个函数中:

image (path / URL / data URI)  →  base64 + mime  →  vision model  →  text
        _read()                     _encode()         API[provider]    look()

服务器工具是薄封装层:pipeline.look(cfg, [image], prompt)。


文档

  • 配置参考 — 所有配置选项、环境变量和优先级规则

  • 提供商设置 — Ollama、OpenAI 和 Anthropic 的分步指南

  • 部署 — 通过 HTTP/SSE 托管、Docker、安全加固

开发

uv sync --group dev
uv run ruff check .
uv run pytest

许可证

MIT

Available Tools

5 tools
ask_about_imageC

Answer a specific question about an image.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
questionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral transparency. 'Answer a specific question about an image' explains the broad behavior but does not disclose limitations, input format expectations, failure behavior, or whether the tool relies on an external model. This is minimally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short, front-loaded sentence with no filler or redundancy. It is concise, but it sacrifices useful context and operational detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only two simple parameters and an output schema, so the low complexity suggests a short description could be enough. However, the absence of annotations, absence of parameter semantics, and lack of sibling differentiation leave important context too vague for an agent to confidently choose and invoke the tool in varied situations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not meaningfully clarify the 'image' or 'question' parameters. The names are self-explanatory, but there is no guidance on what format 'image' should take or how 'question' should be phrased. The description does not compensate for the absence of parameter-level documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Answer a specific question about an image' clearly states the tool's core purpose with a specific verb and resource. It does not explicitly distinguish itself from siblings like describe_image or compare_images, though the word 'specific question' implies a Q&A interaction rather than open description or extraction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the user has a particular question about an image, but it never explicitly states when to use it instead of describe_image, extract_text, or compare_images. There is no explicit exclusion or alternative guidance, so usage context is only weakly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_imagesB

Compare two images. Optional question narrows the comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_aYes
image_bYes
questionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears full responsibility for behavioral disclosure. It does not state whether the operation is read-only, what format the comparison output takes, or any side effects. This is a notable gap for a tool that likely performs analysis.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences, no filler. Every phrase adds value, with the optional 'question' parameter highlighted effectively. It is highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (which may cover return values), the description remains incomplete for a 3-parameter tool with no annotations. It lacks usage context, parameter formatting, and any behavioral caveats. Given the simplicity, more detail is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning the description must clarify all parameters. It explains that 'question' narrows the comparison, but gives no semantics for 'image_a' and 'image_b' (e.g., path, URL, data format). This fails to compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Compare' with a clear resource 'two images', and implies a comparison task distinct from siblings like describe_image or extract_text. It effectively differentiates the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as describe_image or ask_about_image. The only usage hint is that the optional 'question' narrows the comparison, but this does not address selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_imageA

Describe an image. image is a file path, URL, or data URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description does not disclose behavioral aspects such as side effects, network usage, or output format. It only states the action without detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, consisting of a single sentence that directly states the purpose and parameter format, with no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks information about the output or return value, and does not mention any constraints or error conditions, making it incomplete for a full understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly explains that the 'image' parameter can be a file path, URL, or data URI, which adds meaningful context beyond the bare schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to describe an image. It distinguishes from siblings like 'ask_about_image' which likely involves questioning about an image, while this is a straightforward description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. It lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_textB

Read all text in an image (OCR).

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must disclose behavior. It only states the core action without addressing input format (URL, base64, path), output structure, error handling, or whether the operation is strictly read-only. This is insufficient for an agent to fully anticipate behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that efficiently conveys the tool's purpose. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool has an output schema (not shown) and only one parameter, the description is incomplete: it does not specify how the image should be provided, what the output precisely is (e.g., raw text, JSON list), or any limitations. The lack of parameter clarification makes the tool under-specified for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'image' of type string with no description and 0% schema description coverage. The description fails to explain what the image parameter expects (e.g., URL, base64, local path) or any constraints. This leaves the parameter meaning completely ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read all text in an image (OCR)' with a specific verb (read) and resource (image), and the OCR clarification distinguishes it from siblings like describe_image or ask_about_image. It is unambiguous and sets the tool apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for OCR extraction but provides no explicit guidance on when to choose it over alternatives such as describe_image or ask_about_image. No exclusions or comparison are mentioned, so it only implicitly differentiates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_statusA

Show the active provider, model, and transport.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral transparency. It implies read-only behavior via 'Show', but does not explicitly state that no modifications occur or mention any side effects or permissions. For a simple status tool, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single, focused sentence that is front-loaded with the key verb and object. There is no redundancy or filler; every word contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no nested objects) and the existence of an output schema, the description is sufficiently complete. It tells the agent what to expect (active provider, model, transport) and does not need to elaborate further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the baseline for such cases is 4. The schema already confirms no parameters, and the description does not attempt to add any semantics, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Show') and names the resource ('active provider, model, and transport'), making its purpose immediately clear. It also distinctively separates it from the sibling image tools, which have no overlap in function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool versus alternatives, though the context of sibling tools makes it obvious that it's for status/inspection. There is no mention of prerequisites or typical use cases, so it meets the minimum viability but lacks explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedask_about_image
    • First observedcompare_images
    • First observeddescribe_image
    • First observedextract_text
    • First observedserver_status

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a clearly distinct task: general description, specific Q&A, OCR, image comparison, and server status. An agent can easily select the right one based on the user's intent, with no meaningful overlap in scope.

Naming Consistency4/5

Four tools follow a verb_noun pattern (describe_image, ask_about_image, extract_text, compare_images) in snake_case. However, server_status deviates as a noun_noun, and compare_images uses plural while others are singular, slightly breaking the pattern.

Tool Count5/5

With only 5 tools, the server is well-scoped and each tool serves a necessary function. This is within the ideal range of 3-15 for a focused vision understanding server.

Completeness4/5

Core vision understanding workflows are covered: describing, asking questions, OCR, comparison, and status checks. Minor missing features like explicit object detection or metadata retrieval are easily approximated via ask_about_image, so no critical dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers