DeepSeek Vision MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DeepSeek Vision MCPOCR the text in /tmp/screenshot.png and summarize it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DeepSeek Vision MCP
A secure, lightweight MCP v2 server that gives any MCP-compatible agent DeepSeek V4 Flash Vision: image analysis, faithful descriptions, OCR, comparisons, UI/object localization, and reusable Files API uploads.
The server exposes the exact model deepseek-v4-flash-vision-exp without
embedding provider-specific image payloads in every agent integration.
Tools
Tool | Purpose |
| General one/multi-image analysis with a custom prompt |
| Faithful scene/UI description |
| Screenshot/document OCR |
| Compare two or more images |
| Best-effort UI/object localization to normalized coordinates |
| Upload a local image to DeepSeek Files API |
| List reusable uploaded images |
| Delete an uploaded image |
Accepted image references:
local server-side path
public
http://orhttps://URLdata:image/...;base64,...DeepSeek
file-api-...file ID
Related MCP server: vision-mcp
Why this server is thin
The MCP server does not run a local vision model. It only validates/normalizes image inputs and delegates inference to DeepSeek. That makes CPU/RAM usage tiny and lets any MCP-capable agent gain vision without embedding DeepSeek-specific payload shapes in the agent itself.
Install with 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 .envFor a local MCP host, stdio is the preferred transport:
DEEPSEEK_API_KEY="..." \
DEEPSEEK_VISION_ALLOWED_ROOTS="/home/you/Pictures:/tmp/vision" \
uv run deepseek-vision-mcpFor development with MCP Inspector:
DEEPSEEK_API_KEY="..." uv run mcp dev src/deepseek_vision_mcp/server.pyMCP host configuration
Typical stdio configuration:
{
"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"
}
}
}
}Do not commit the API key. If the host can inherit environment variables,
prefer injecting DEEPSEEK_API_KEY from your secret manager or shell.
Safe shared launcher
run-mcp.py is useful when several local agents share one installation. It:
reads only approved DeepSeek variables from the process or an env file;
filters unrelated inherited secrets before launching the MCP;
forces
stdiotransport;restricts local images to explicit roots.
By default it reads ~/.hermes/.env and allows the usual image-working
directories under the current home directory plus /tmp. Override those
choices without editing the script:
export DEEPSEEK_VISION_ENV_FILE="$HOME/.config/deepseek-vision.env"
export DEEPSEEK_VISION_ALLOWED_ROOTS="$HOME/Pictures:/tmp/vision"
./run-mcp.pyHermes configuration:
mcp_servers:
deepseek-vision:
command: "/absolute/path/to/deepseek-vision-mcp/run-mcp.py"
args: []
enabled: trueOpenCode configuration:
{
"mcp": {
"deepseek-vision": {
"type": "local",
"command": ["/absolute/path/to/deepseek-vision-mcp/run-mcp.py"],
"enabled": true
}
}
}OMP and other standard MCP hosts can use the mcpServers example above with
run-mcp.py as the command.
Streamable HTTP
export DEEPSEEK_API_KEY="..."
export MCP_TRANSPORT=streamable-http
export MCP_HOST=127.0.0.1
export MCP_PORT=8000
uv run deepseek-vision-mcpThe MCP endpoint is:
http://127.0.0.1:8000/mcpUse TLS and authentication in front of the server before exposing it outside a trusted machine/network.
Example tool calls
Analyze a screenshot
{
"images": ["/home/you/Pictures/screen.png"],
"prompt": "What application is open, what is the current state, and what should I click next?",
"detail": "original"
}Fast coarse screen read
{
"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"
}Best-effort UI grounding
{
"image": "/home/you/Pictures/screen.png",
"target": "the blue Save button"
}vision_locate returns coordinates normalized to 0..1000. It is intentionally
described as best-effort: a generative VLM is not a deterministic detector.
Validate its target before high-impact clicks.
Security model
Images analyzed by this MCP are sent to DeepSeek's external API. Do not send private or sensitive images without informed user intent.
Local paths are restricted to DEEPSEEK_VISION_ALLOWED_ROOTS. If no roots are
configured, the server only allows images under its current working directory.
This matters: an unrestricted vision_analyze("/etc/...") style tool would let
an MCP host turn image analysis into arbitrary local-file exfiltration.
The server also rejects obvious localhost/private-IP external URLs.
The shared launcher passes only baseline process variables, XDG_*, and the
four approved DeepSeek settings to the child process. It never sources an
entire credentials file.
DeepSeek image behavior reflected by this server
JPEG, PNG, GIF, WebP
local/base64 inline image: max 32 MiB each
DeepSeek Files API image: max 64 MiB
max 600 images/request
external URL length: max 8192 chars
max dimension: 8192 px/side, or 4096 px/side for 15+ images
detail=low: DeepSeek downsamples to 512x512detail=original/high: preserve original detailimages are only sent in the user message
Large/reused images
Upload once:
{
"local_path": "/home/you/Pictures/large.png",
"expires_seconds": 86400
}Then pass the returned file-api-... ID into vision_analyze. Use null for
expires_seconds only when you intentionally want permanent DeepSeek storage.
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-mcpFor local image paths in Docker, mount only the directories the MCP needs and
set DEEPSEEK_VISION_ALLOWED_ROOTS to the container-side path.
Architecture
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 resultDevelopment
uv sync --locked --extra dev
uv run ruff check .
uv run pytestCI runs the same gates on Python 3.11 and 3.13. Contributions and focused bug reports are welcome.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceBridges a vision model to enable text-only models like DeepSeek to describe images, extract text, and compare images via MCP tools.57910MIT
- AlicenseAqualityCmaintenanceGive MCP-compatible AI agents image analysis, metadata inspection, cropping, OCR, and image comparison through any OpenAI-compatible vision model.6MIT
- AlicenseAqualityCmaintenanceProvides image recognition capabilities to MCP clients by integrating with OpenAI-compatible vision models, supporting local images, URLs, multi-image comparison, and model listing.4MIT
- AlicenseNot gradedqualityBmaintenanceProvides multimodal vision MCP tools for image analysis, OCR, object detection, text-to-image generation, and image similarity, integrating OpenAI, Qwen, and Gemini.1,1531MIT
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate on-brand images from your AI agent: design, edit, and render templates over MCP.
Generate, edit and upscale AI video and images from any agent via VicSee.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/groxaxo/deepseek-vision-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server