visionMCP
visionMCP 👁️
更大推理LLM的眼睛。
visionMCP 是一个 Model Context Protocol 服务器,为任何支持 MCP 的智能体提供真正的视觉能力。纯文本推理模型可以将任何它无法看到的内容委托给此服务器:描述截图、回答关于照片的问题、OCR 文档或比较两张图片——服务器负责“看”,然后返回文本。
它支持所有三种主流视觉后端,在运行时通过单个 config.json 选择:
提供商 | API | 示例模型 |
Ollama | OpenAI 兼容 ( |
|
OpenAI | Chat Completions 视觉 API |
|
Anthropic | Claude Messages 视觉 API |
|
功能特性
🔍 四个视觉工具供推理 LLM 调用:
describe_image— 完整的自然语言描述ask_about_image— 针对任意图片的定向问答extract_text— OCR / 转录compare_images— 并排比较
🖼️ 接受所有来源:本地文件路径、
http(s)URL 以及 base64data: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 sync2. 配置
附带的 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 发送图片内容。图片字节保留在内存中,不会写入磁盘。
工具参考
工具 | 参数 | 返回 |
|
| 纯文本的完整描述 |
|
| 针对性回答 |
|
| 转录/OCR 后的文本 |
|
| 纯文本的比较结果 |
| — | 提供商、模型、传输方式 |
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)。
文档
开发
uv sync --group dev
uv run ruff check .
uv run pytest许可证
MIT
Available Tools
5 toolsask_about_imageC
Answer a specific question about an image.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | ||
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_a | Yes | ||
| image_b | Yes | ||
| question | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.1.0- First observed
ask_about_image - First observed
compare_images - First observed
describe_image - First observed
extract_text - First observed
server_status
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Create images & video from any MCP agent — 17 models, spend limits, one URL.
MCP server exposing the YourImageShare upload API (upload/list/delete) as tools for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceGive MCP-compatible AI agents image analysis, metadata inspection, cropping, OCR, and image comparison through any OpenAI-compatible vision model.6MIT
- AlicenseAqualityBmaintenanceEnables non-multimodal models to see images by providing MCP tools for image understanding and OCR, backed by any OpenAI-compatible vision model.2MIT
- AlicenseNot gradedqualityCmaintenanceProvides vision capabilities to text-only LLMs via MCP, enabling image understanding, Q&A, OCR, and image processing through cloud multimodal APIs.MIT
- AlicenseBqualityCmaintenanceLets any MCP-compatible agent analyze, describe, OCR, compare, locate, upload, and manage images through DeepSeek's vision model.81MIT