visionMCP
visionMCP 👁️
더 큰 추론 LLM의 눈.
visionMCP는 Model Context Protocol 서버로, MCP를 지원하는 모든 에이전트에게 실제 시각을 제공합니다. 텍스트 전용 추론 모델은 자신이 볼 수 없는 모든 것을 이 서버에 위임할 수 있습니다: 스크린샷 설명, 사진에 대한 질문 응답, 문서 OCR, 두 이미지 비교 등 — 서버가 시각을 담당하고 텍스트를 반환합니다.
단일 config.json에서 런타임에 선택되는 세 가지 주요 비전 백엔드 모두에서 작동합니다:
제공자 | API | 예시 모델 |
Ollama | OpenAI-compatible ( |
|
OpenAI | Chat Completions vision API |
|
Anthropic | Claude Messages vision API |
|
Features
🔍 추론 LLM이 호출할 네 가지 비전 도구:
describe_image— 전체 자연어 설명ask_about_image— 모든 이미지에 대한 대상 질의응답extract_text— OCR / 텍스트 변환compare_images— 나란히 비교
🖼️ 모든 소스 허용: 로컬 파일 경로,
http(s)URL, base64data:URI.📦 이미지 준비 불필요: 과도하게 큰 이미지는 자동으로 축소되고 JPEG으로 재인코딩되어 제공자 페이로드 제한에 맞춰집니다.
🔌 세 가지 전송 방식:
stdio(기본값, 로컬 MCP 클라이언트용),http(원격 호스팅용 스트리밍 가능 HTTP), 또는sse(레거시 서버 전송 이벤트).⚙️ **하나의
config.json**이 제공자, API 키, API URL, 모델을 제어합니다. 환경 변수와 CLI 플래그로 모든 것을 재정의할 수 있습니다.🚀
uv로 관리, 설치, 실행, 호스팅 가능.
Related MCP server: vision-bridge-mcp
Quick start
1. Install
uv와 Python ≥ 3.10이 필요합니다.
cd visionMCP
uv sync2. Configure
제공된 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. Run
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)Wiring into an MCP client
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"]
}
}
}Generic MCP client (stdio)
{
"mcpServers": {
"visionMCP": {
"command": "/path/to/visionMCP/.venv/bin/vision-mcp",
"args": ["--config", "/path/to/visionMCP/config.json"]
}
}
}서버는 도구 호출이 제공하는 것 이상으로 이미지 콘텐츠를 비전 API에 전송하지 않습니다. 이미지 바이트는 메모리에 보관되며 디스크에 기록되지 않습니다.
Tools reference
도구 | 인수 | 반환값 |
|
| 평문 전체 설명 |
|
| 집중된 답변 |
|
| 변환/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 URIHow it works
모든 것은 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).
Documentation
Configuration reference — 모든 구성 옵션, 환경 변수 및 우선순위 규칙
Provider setup — Ollama, OpenAI, Anthropic 단계별 설정
Deployment — HTTP/SSE를 통한 호스팅, Docker, 보안 강화
Development
uv sync --group dev
uv run ruff check .
uv run pytestLicense
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