visionMCP
visionMCP 👁️
Los ojos de un LLM de razonamiento más grande.
visionMCP es un servidor del Model Context Protocol que
proporciona visión real a cualquier agente capaz de usar MCP. Un modelo de razonamiento
exclusivamente textual puede delegar en este servidor todo aquello que no puede ver: describir
una captura de pantalla, responder a una pregunta sobre una foto, hacer OCR de un documento
o comparar dos imágenes. El servidor se encarga de ver y devuelve texto.
Funciona con los tres principales backends de visión, elegidos en tiempo de ejecución a
partir de un único config.json:
Proveedor | API | Modelos de ejemplo |
Ollama | OpenAI-compatible ( |
|
OpenAI | Chat Completions vision API |
|
Anthropic | Claude Messages vision API |
|
Características
🔍 Cuatro herramientas de visión para que las llame un LLM de razonamiento:
describe_image— descripción completa en lenguaje naturalask_about_image— preguntas y respuestas específicas sobre cualquier imagenextract_text— OCR / transcripcióncompare_images— comparación lado a lado
🖼️ Se acepta cualquier fuente: rutas de archivo locales, URL
http(s)y URIsdata:en base64.📦 Sin preparación de imágenes: las imágenes sobredimensionadas se reducen automáticamente y se recodifican como JPEG para ajustarse a los límites de carga del proveedor.
🔌 Tres transportes:
stdio(predeterminado, para clientes MCP locales),http(HTTP transmisible para alojamiento remoto) osse(Eventos enviados por el servidor, heredados).⚙️ Un único
config.jsoncontrola el proveedor, la clave API, la URL de la API y el modelo. Las variables de entorno y los indicadores de línea de comandos pueden sobrescribir cualquier cosa.🚀 Gestionado con
uv, instalable, ejecutable y alojable.
Related MCP server: vision-bridge-mcp
Inicio rápido
1. Instalar
Requiere uv y Python ≥ 3.10.
cd visionMCP
uv sync2. Configurar
El config.json incluido ya funciona con un Ollama local. Cambia de proveedor editando
el archivo:
// config.json
{
"provider": "openai", // "ollama" | "openai" | "anthropic"
"api_key": "sk-...", // or leave "" and export OPENAI_API_KEY
"api_url": "", // "" = provider default
"model": "" // "" = provider default
}Consulta docs/configuration.md para conocer todas las opciones, y docs/providers.md para la configuración específica de cada proveedor.
Seguridad: mantén las claves API reales fuera de git. Copia
config.jsonaconfig.local.json(se ignora automáticamente) o usa variables de entorno. El servidor nunca registra tu clave.
3. Ejecutar
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)Conexión con un cliente 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"]
}
}
}Cliente MCP genérico (stdio)
{
"mcpServers": {
"visionMCP": {
"command": "/path/to/visionMCP/.venv/bin/vision-mcp",
"args": ["--config", "/path/to/visionMCP/config.json"]
}
}
}El servidor nunca envía el contenido de la imagen a la API de visión más allá de lo que proporciona la llamada a la herramienta. Los bytes de la imagen se mantienen en memoria y nunca se escriben en disco.
Referencia de herramientas
Herramienta | Argumentos | Devuelve |
|
| Descripción completa en texto |
|
| Respuesta enfocada |
|
| Texto transcrito/OCR |
|
| Comparación en texto |
| — | Proveedor, modelo, transporte |
Un argumento image acepta cualquiera de:
/path/to/photo.png # local file
https://example.com/x.jpg # URL (downloaded at call time)
data:image/png;base64,iVBORw0KGgo... # base64 data URICómo funciona
Todo pasa por una única función en src/vision_mcp/pipeline.py:
image (path / URL / data URI) → base64 + mime → vision model → text
_read() _encode() API[provider] look()Las herramientas del servidor son envoltorios ligeros: pipeline.look(cfg, [image], prompt).
Documentación
Referencia de configuración — todas las opciones de configuración, variables de entorno y reglas de precedencia
Configuración de proveedores — Ollama, OpenAI y Anthropic, paso a paso
Despliegue — alojamiento sobre HTTP/SSE, Docker, endurecimiento
Desarrollo
uv sync --group dev
uv run ruff check .
uv run pytestLicencia
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