Skip to main content
Glama
groxaxo
by groxaxo

DeepSeek Vision MCP

CI Python License: MIT

Un servidor MCP v2 seguro y ligero que proporciona a cualquier agente compatible con MCP DeepSeek V4 Flash Vision: análisis de imágenes, descripciones fieles, OCR, comparaciones, localización de interfaz/objetos y cargas reutilizables mediante la API de archivos.

El servidor expone el modelo exacto deepseek-v4-flash-vision-exp sin incorporar cargas útiles de imágenes específicas del proveedor en cada integración de agente.

Herramientas

Herramienta

Propósito

vision_analyze

Análisis general de una o varias imágenes con un prompt personalizado

vision_describe

Descripción fiel de escena/interfaz

vision_ocr

OCR de capturas de pantalla/documentos

vision_compare

Comparar dos o más imágenes

vision_locate

Localización de interfaz/objeto con el mejor esfuerzo en coordenadas normalizadas

vision_upload

Subir una imagen local a la API de archivos de DeepSeek

vision_files_list

Listar imágenes subidas reutilizables

vision_files_delete

Eliminar una imagen subida

Referencias de imagen aceptadas:

  • ruta local del lado del servidor

  • URL pública http:// o https://

  • data:image/...;base64,...

  • ID de archivo file-api-... de DeepSeek

Related MCP server: vision-mcp

Por qué este servidor es delgado

El servidor MCP no ejecuta un modelo de visión local. Solo valida/normaliza las entradas de imagen y delega la inferencia a DeepSeek. Esto hace que el uso de CPU/RAM sea mínimo y permite que cualquier agente capaz de MCP obtenga visión sin incorporar formas de carga útiles específicas de DeepSeek en el propio agente.

Instalar con uv

git clone https://github.com/groxaxo/deepseek-vision-mcp.git
cd deepseek-vision-mcp

uv sync --locked

cp .env.example .env
# Set DEEPSEEK_API_KEY and allowed roots in .env

Para un host MCP local, stdio es el transporte preferido:

DEEPSEEK_API_KEY="..." \
DEEPSEEK_VISION_ALLOWED_ROOTS="/home/you/Pictures:/tmp/vision" \
uv run deepseek-vision-mcp

Para desarrollo con MCP Inspector:

DEEPSEEK_API_KEY="..." uv run mcp dev src/deepseek_vision_mcp/server.py

Configuración del host MCP

Configuración típica de stdio:

{
  "mcpServers": {
    "deepseek-vision": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/deepseek-vision-mcp",
        "run",
        "deepseek-vision-mcp"
      ],
      "env": {
        "DEEPSEEK_API_KEY": "YOUR_KEY",
        "DEEPSEEK_VISION_ALLOWED_ROOTS": "/home/you/Pictures:/tmp/vision"
      }
    }
  }
}

No comprometas la clave de API. Si el host puede heredar variables de entorno, prefiere inyectar DEEPSEEK_API_KEY desde tu gestor de secretos o shell.

Lanzador compartido seguro

run-mcp.py es útil cuando varios agentes locales comparten una instalación. Este:

  • lee solo las variables de DeepSeek aprobadas del proceso o de un archivo de entorno;

  • filtra secretos heredados no relacionados antes de lanzar el MCP;

  • fuerza el transporte stdio;

  • restringe las imágenes locales a raíces explícitas.

Por defecto lee ~/.hermes/.env y permite los directorios habituales de trabajo con imágenes bajo el directorio de inicio actual más /tmp. Anula esas opciones sin editar el script:

export DEEPSEEK_VISION_ENV_FILE="$HOME/.config/deepseek-vision.env"
export DEEPSEEK_VISION_ALLOWED_ROOTS="$HOME/Pictures:/tmp/vision"
./run-mcp.py

Configuración de Hermes:

mcp_servers:
  deepseek-vision:
    command: "/absolute/path/to/deepseek-vision-mcp/run-mcp.py"
    args: []
    enabled: true

Configuración de OpenCode:

{
  "mcp": {
    "deepseek-vision": {
      "type": "local",
      "command": ["/absolute/path/to/deepseek-vision-mcp/run-mcp.py"],
      "enabled": true
    }
  }
}

OMP y otros hosts MCP estándar pueden usar el ejemplo de mcpServers anterior con run-mcp.py como comando.

HTTP transmisible

export DEEPSEEK_API_KEY="..."
export MCP_TRANSPORT=streamable-http
export MCP_HOST=127.0.0.1
export MCP_PORT=8000

uv run deepseek-vision-mcp

El endpoint MCP es:

http://127.0.0.1:8000/mcp

Usa TLS y autenticación frente al servidor antes de exponerlo fuera de una máquina/red de confianza.

Ejemplos de llamadas a herramientas

Analizar una captura de pantalla

{
  "images": ["/home/you/Pictures/screen.png"],
  "prompt": "What application is open, what is the current state, and what should I click next?",
  "detail": "original"
}

Lectura rápida y gruesa de pantalla

{
  "images": ["/home/you/Pictures/screen.png"],
  "prompt": "Is a modal dialog visible? Answer briefly.",
  "detail": "low"
}

OCR

{
  "image": "/home/you/Pictures/error.png",
  "detail": "original"
}

Localización de interfaz con el mejor esfuerzo

{
  "image": "/home/you/Pictures/screen.png",
  "target": "the blue Save button"
}

vision_locate devuelve coordenadas normalizadas de 0 a 1000. Se describe intencionalmente como de mejor esfuerzo: un VLM generativo no es un detector determinista. Valida su objetivo antes de clics de alto impacto.

Modelo de seguridad

Las imágenes analizadas por este MCP se envían a la API externa de DeepSeek. No envíes imágenes privadas o sensibles sin el consentimiento informado del usuario.

Las rutas locales están restringidas a DEEPSEEK_VISION_ALLOWED_ROOTS. Si no se configuran raíces, el servidor solo permite imágenes bajo su directorio de trabajo actual.

Esto importa: una herramienta sin restricciones del estilo vision_analyze("/etc/...") permitiría que un host MCP convirtiera el análisis de imágenes en exfiltración arbitraria de archivos locales.

El servidor también rechaza URLs externas obvias de localhost/IP privada.

El lanzador compartido pasa solo las variables de proceso base, XDG_* y las cuatro configuraciones aprobadas de DeepSeek al proceso hijo. Nunca carga un archivo de credenciales completo.

Comportamiento de imágenes de DeepSeek reflejado por este servidor

  • JPEG, PNG, GIF, WebP

  • imagen local/base64 en línea: máx. 32 MiB cada una

  • imagen de la API de archivos de DeepSeek: máx. 64 MiB

  • máx. 600 imágenes por solicitud

  • longitud de URL externa: máx. 8192 caracteres

  • dimensión máxima: 8192 px por lado, o 4096 px por lado para 15+ imágenes

  • detail=low: DeepSeek reduce a 512x512

  • detail=original / high: conserva el detalle original

  • las imágenes solo se envían en el mensaje del usuario

Imágenes grandes/reutilizadas

Sube una vez:

{
  "local_path": "/home/you/Pictures/large.png",
  "expires_seconds": 86400
}

Luego pasa el ID file-api-... devuelto a vision_analyze. Usa null para expires_seconds solo cuando quieras intencionalmente almacenamiento permanente en DeepSeek.

Docker

docker build -t deepseek-vision-mcp .
docker run --rm \
  -p 127.0.0.1:8000:8000 \
  -e DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY" \
  deepseek-vision-mcp

Para rutas de imagen locales en Docker, monta solo los directorios que el MCP necesita y establece DEEPSEEK_VISION_ALLOWED_ROOTS a la ruta del lado del contenedor.

Arquitectura

MCP host / agent
      |
      | MCP tool call
      v
DeepSeek Vision MCP
  - validates source
  - restricts local paths
  - encodes local files
  - shapes DeepSeek payload
      |
      | HTTPS
      v
api.deepseek.com
  deepseek-v4-flash-vision-exp
      |
      v
structured MCP result

Desarrollo

uv sync --locked --extra dev
uv run ruff check .
uv run pytest

CI ejecuta las mismas compuertas en Python 3.11 y 3.13. Las contribuciones y los informes de errores enfocados son bienvenidos.

Available Tools

8 tools
vision_analyzeB

Analyze one or more images with a custom prompt.

Image sources may be:

  • local server-side paths under DEEPSEEK_VISION_ALLOWED_ROOTS

  • public http(s) URLs

  • base64 data:image/... URLs

  • DeepSeek Files API IDs beginning with file-api-

Use detail="low" for cheap/fast coarse inspection, or "original" for screenshots, OCR, charts, and other fine-detail tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoauto
imagesYes
promptYes
json_modeNo
max_tokensNo

TDQS

B3.3/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 full behavioral burden. It mentions constraints on local paths and a hint about detail levels, but does not disclose side effects (e.g., read-only nature), rate limits, authentication requirements, or the exact return format. For an analysis tool, these omissions leave a significant transparency gap.

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 concise and well-structured: a one-line purpose, a clear bullet list of image sources, and a short practical hint on detail levels. It is front-loaded and avoids unnecessary verbosity, earning a high score.

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?

With five parameters, no output schema, and no annotations, the description omits essential context: there is no explanation of what the tool returns, no detail on json_mode, and no guidance on max_tokens limits. It also does not mention potential error conditions or prerequisites, leaving the tool under-documented for an AI agent.

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

Parameters3/5

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

Despite 0% schema description coverage, the description adds meaningful context for the images parameter by listing allowed source formats, and for detail by explaining low vs. original usage. However, it leaves json_mode and max_tokens unexplained, and prompt is self-explanatory. It only partially compensates 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 states a specific action: 'Analyze one or more images with a custom prompt.' It clearly distinguishes this from preset siblings like vision_describe and vision_ocr by emphasizing the custom prompt, making the tool's purpose obvious.

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 provides practical guidance on image source types and detail levels (low for coarse, original for fine detail), which helps with parameter selection. However, it does not explicitly state when to choose this tool over alternatives like vision_describe or vision_ocr, leaving the usage context implied.

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

vision_compareB

Compare 2+ images in the order provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNooriginal
imagesYes
questionNoWhat are the important similarities and differences?
max_tokensNo

TDQS

B3.3/5.0
Behavior2/5

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

There are no annotations, and the description does not disclose behavior beyond the action. It does not indicate whether the tool is read-only, what it returns, or any side effects. The minimal description leaves the tool's behavior largely opaque.

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, clear sentence that is concise and to the point. It effectively communicates the core purpose without unnecessary words, though it lacks structured details about usage.

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

Completeness3/5

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

The description covers the basic purpose but omits important context such as parameter meanings, expected output, and when to use it relative to other tools. It is not comprehensive enough for a user to fully understand how to invoke it correctly.

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?

The description does not explain the parameters. It only mentions comparing images but does not clarify the roles of 'detail', 'question', or 'max_tokens'. The schema provides no descriptions, so the description adds no meaning beyond the raw parameter names and types.

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 action (compare) and the resource (2+ images), and specifies the order is important. It distinguishes from sibling tools by its focus on comparison, which is evident from the verb and resource.

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 does not explicitly state when to use this tool over alternatives like vision_analyze or vision_describe. While the name implies comparison, there is no guidance on specific scenarios or exclusions.

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

vision_describeC

Describe the visible content of an image faithfully and concisely.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
detailNoauto
max_tokensNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits, but it only adds the stylistic promise of 'faithfully and concisely' — this is not a meaningful behavioral disclosure (e.g., side effects, permissions, rate limits, or whether the image is transmitted/stored). The description essentially restates the tool's name without additional context, so it fails to carry the burden that annotations would normally cover.

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, tightly worded sentence that immediately names the action and object. It is front-loaded and avoids verbosity. However, the brevity comes at the cost of omitting essential usage details, so while it is concise, the structural simplicity is not an asset given the tool's complexity.

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

Completeness1/5

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

The tool has three parameters, one required, and no output schema or annotations. The description does not explain any parameters, expected input format, return value, or edge cases. For an image-processing tool with sibling tools that likely share similar inputs, the complete lack of parameter documentation makes this definition inadequate for an agent to call it correctly.

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?

Schema description coverage is 0%, meaning none of the three parameters (image, detail, max_tokens) are described in the schema's description field. The tool description also provides zero information about what these parameters mean, how they affect behavior, or what format 'image' should take (e.g., URL, file path, base64). The agent has no way to correctly fill in these fields based on the description alone.

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 clearly states the verb ('describe') and resource ('visible content of an image'), and the qualifiers 'faithfully and concisely' hint at a neutral, summary-oriented output that differentiates it from siblings like vision_ocr (text extraction) or vision_analyze (deeper analysis). However, it does not explicitly name any sibling or exclusion, so it falls short of a 5.

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?

There is no guidance on when to use this tool versus the listed siblings (vision_analyze, vision_ocr, etc.), no prerequisites, no context about input requirements, and no mention of alternatives. An agent must infer entirely from the name and one-line description, which is insufficient for effective selection.

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

vision_files_deleteC

Delete an uploaded DeepSeek Files API image.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes

TDQS

C2.6/5.0
Behavior1/5

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

No information about side effects, permissions, or what happens to the file; no annotations to supplement.

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?

One concise sentence with no unnecessary words, effectively conveying the core purpose.

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

Completeness1/5

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

Lacks any context about return values, error handling, or consequences; given the simple operation, more detail is expected.

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 file_id parameter is not described beyond its name and type; no explanation of how to obtain it or its format.

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 action (delete) and the resource (uploaded DeepSeek Files API image), distinguishing it from sibling tools that analyze, describe, OCR, compare, locate, upload, or list files.

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 vs alternatives; it only states what it does, not when to use it or any conditions.

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

vision_files_listA

List uploaded DeepSeek user_data image files, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It discloses the ordering (newest first) and scope (user_data image files), but does not mention pagination, error behavior, or what happens if limit is exceeded. For a simple list operation, 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 description is a single, tightly worded sentence that front-loads the action and resource. It is efficient and contains no filler, making it easy to scan.

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

Completeness3/5

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

For a simple list tool, the description covers the core action and ordering, but it omits details about the 'limit' parameter and the response format. Since there is no output schema, providing a hint about what the response contains would improve completeness. The description is sufficient for basic use but lacks some practical details.

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?

The schema has one parameter, 'limit', with 0% description coverage. The description does not explain what 'limit' does or its default behavior. Since schema coverage is low, the description should compensate, but it does not mention the parameter at all. The meaning of 'limit' is somewhat intuitive, but it is not documented.

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 verb 'List' and the resource 'uploaded DeepSeek user_data image files', plus the ordering 'newest first'. This distinguishes it from sibling tools like vision_upload or vision_files_delete, which perform different actions. The purpose is unambiguous.

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

Usage Guidelines4/5

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

The description implies this tool is for retrieving a listing of files, which is contextually clear given the siblings. However, it does not explicitly state when to use this over alternatives or mention any exclusions (e.g., 'use this when you need to see available files before analyzing'). It provides solid context but no direct guidance on tool selection.

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

vision_locateA

Best-effort semantic localization of a visible target.

Coordinates are model-estimated and MUST be validated before destructive or high-impact UI actions. This is useful for agent grounding but is not a deterministic object detector.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
detailNooriginal
targetYes

TDQS

A3.7/5.0
Behavior4/5

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

The description discloses key behavioral traits: coordinates are model-estimated, must be validated before destructive actions, and the tool is not deterministic. This is substantial transparency especially given no annotations are present.

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 concise, consisting of two sentences that efficiently cover purpose, behavior, and usage context. It is well-structured with no superfluous content.

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 no output schema, it does not need to explain returns. It provides sufficient context about when to use (agent grounding), what to expect (estimated coordinates), and constraints (validation needed, non-deterministic).

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 three parameters (image, target, detail) with no descriptions, and the tool description does not explain any of them. It provides zero parameter semantics, failing to compensate for the schema's lack of coverage.

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: 'semantic localization of a visible target.' It uses a specific verb (localization) and resource (visible target), and distinguishes itself by noting it is not a deterministic object detector.

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?

It implies usage for agent grounding and cautions against relying on it for deterministic detection, but does not explicitly state when to use it over sibling tools or when to avoid it beyond the 'not deterministic' hint.

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

vision_ocrA

Read visible text from a screenshot/document image.

Returns the transcription as model text. Prefer detail="original".

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
detailNooriginal
max_tokensNo

TDQS

A4/5.0
Behavior4/5

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

There are no annotations, so the description carries the full burden. It discloses the core behaviors: visible text is extracted, the result is returned as transcription text, and detail is recommended to be 'original'. This is a read-only OCR operation and the description conveys that, though it does not explain token or input limits.

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 two short sentences, front-loaded with the main purpose and followed by a useful parameter preference. It has no filler or repetition; every sentence contributes.

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?

For a simple OCR tool with three parameters and no output schema, the description provides the core needed context: input type, output form, and a recommended detail setting. Some gaps remain around how the image value should be supplied and how max_tokens affects the result, but the agent can safely select and invoke the tool.

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

Parameters3/5

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

The schema has 0% property-description coverage, so the description must compensate. It adds some meaning for the 'detail' parameter with the recommendation 'Prefer detail="original"' and clarifies the image is a screenshot/document, but it does not explain 'max_tokens', and the exact meaning of the detail enum is left to the schema.

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 opens with a clear verb and resource: 'Read visible text from a screenshot/document image' and immediately goes on to say the output is the transcription. It unmistakably identifies this as an OCR tool, distinguishing it from siblings like vision_analyze or vision_describe.

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 intended use is implied by 'Read visible text' and 'transcription,' but the description does not explicitly say when to use this tool versus the sibling vision tools, nor does it state any exclusion conditions. The only prescriptive guidance, 'Prefer detail="original"', is about parameter choice rather than tool selection.

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

vision_uploadA

Upload a local image to DeepSeek Files API and return its reusable file_id.

Local paths must be inside DEEPSEEK_VISION_ALLOWED_ROOTS. expires_seconds: 3600..2592000 (1h..30d), or null for permanent storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
local_pathYes
expires_secondsNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden, and it does disclose meaningful traits: the destination API, the reusable nature of the file_id, the allowed-roots constraint, and the exact expiry semantics including permanent-storage behavior. However, it omits operational details like file size limits, accepted MIME types, and idempotency/overwrite behavior that would be useful for a data-ingesting operation with zero annotation coverage.

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?

Three terse lines with zero fluff: purpose+return value first, followed by the path constraint and parameter documentation. Every sentence earns its place, and the most critical information is front-loaded.

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?

For a small 2-parameter tool with no nested objects and no output schema, the description covers the essentials: what it does, what it returns (reusable file_id), key constraints, and full parameter semantics. The only gaps are operational expectations like rate limits, upload size caps, and whether uploads are idempotent, which slightly limits an agent's ability to anticipate failures.

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?

Schema coverage is 0%, so the description must compensate — and it does. The expires_seconds parameter receives an explicit valid range (3600..2592000), the meaning of null (permanent storage), and a default, all of which go beyond the bare schema types. The local_path constraint (inside allowed roots) is also documented. Only minor details like path format or file extensions are missing.

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?

States a specific verb+resource ('Upload a local image to DeepSeek Files API') and names the return value (reusable file_id), which clearly distinguishes this from siblings like vision_analyze, vision_ocr, and vision_files_delete. An agent could correctly select this tool over the siblings based on the first sentence alone.

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

Usage Guidelines4/5

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

Provides clear contextual constraints for when this tool is appropriate: the path restriction (must be inside DEEPSEEK_VISION_ALLOWED_ROOTS) and the valid expiry window (3600..2592000s or null). While it never explicitly names an alternative tool for when-not-to-use, the scope of when to use it is well-bounded, and the reusable file_id comment implies the upload-then-analyze workflow.

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. 8 tool updatesv0.1.0
    • First observedvision_analyze
    • First observedvision_compare
    • First observedvision_describe
    • First observedvision_files_delete
    • First observedvision_files_list
    • First observedvision_locate
    • First observedvision_ocr
    • First observedvision_upload

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct visual task: custom analysis, faithful description, OCR, comparison, semantic localization, upload, listing, and deletion. The overlaps between analyze and describe are minor and clearly differentiated by purpose and usage notes.

Naming Consistency3/5

Most tools follow a vision_<verb> pattern (analyze, describe, compare, locate, upload), but vision_files_list and vision_files_delete reverse the noun-verb order, and vision_ocr is an abbreviation noun. The shared prefix provides some consistency, but the mixed conventions prevent a higher score.

Tool Count5/5

Eight tools is a well-scoped number for a vision MCP server, covering both image analysis and file lifecycle management without unnecessary bloat. Each tool serves a clear purpose.

Completeness5/5

The tool surface covers the major vision tasks (analysis, description, OCR, comparison, localization) and includes full file management via upload, list, and delete. There are no obvious dead ends; images are immutable so update/delete semantics are appropriately handled.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers