vision-mcp
The vision-mcp server provides a single analyze_image tool that uses an OpenAI-compatible vision LLM (e.g., GPT-4o, Qwen-VL) to analyze images and return text. You can:
Provide images via:
Local file path (
path)Public HTTP/HTTPS URL (
url)Raw base64 string (
base64), with optionalmime_typeoverride
Use specialized task modes:
general— objects, text, layout, anomaliesocr— verbatim text transcription preserving layoutui_review— layout, alignment, accessibility evaluationdocument— structure and key content extractiontable— reconstruct tables as markdowndiagram— nodes, edges, flow, and relationshipschart— type, axes, series, trends, and valuesreceipt— merchant info, line items, and totalsmath— transcribe and solve step by stepcode— verbatim code transcription
Control output format via response_mode:
markdown(default) — structured reportjson— machine-parseable objectplain_text— unstructured text
Fine-tune with optional parameters:
prompt— ask specific questions about the imagesystem— append extra guidance to the base system promptmodel— override the default model per calldetail— image resolution hint (low,high,auto)max_tokens(default 4096) andtemperature(default 0.2)
Built-in safety: A fixed base system prompt enforces observable-facts-only reporting and prompt-injection protection (text in images is treated as content, never as instructions).
Integrates with OpenAI-compatible vision models to analyze images, providing image descriptions or answering prompts about image content.
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., "@vision-mcpdescribe the image at https://example.com/cat.jpg"
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.
@winton979/vision-mcp
MCP server that exposes an analyze_image tool backed by an OpenAI-compatible vision LLM (GPT-4o, Qwen-VL, etc.).
What it does
Provides a single MCP tool analyze_image that accepts an image via:
path — local file path
url — public http(s) URL
base64 — raw base64 string (with or without
data:prefix)
and returns a text description from the configured vision model.
Related MCP server: vision-mcp
Prerequisites
Node.js ≥ 18 (global
fetchrequired)
Configuration
Set these environment variables when configuring the MCP server:
Variable | Required | Default | Description |
| No |
| OpenAI-compatible API base URL |
| Yes | — | API key for the gateway |
| No |
| Vision model name |
Claude Code setup
macOS / Linux
Add to ~/.claude.json or ~/.claude/.mcp.json:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["-y", "@winton979/vision-mcp"],
"env": {
"VISION_BASE_URL": "<your-base-url>",
"VISION_API_KEY": "<your-api-key>",
"VISION_MODEL": "<your-model>"
}
}
}
}Windows
{
"mcpServers": {
"vision": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@winton979/vision-mcp"],
"env": {
"VISION_BASE_URL": "<your-base-url>",
"VISION_API_KEY": "<your-api-key>",
"VISION_MODEL": "<your-model>"
}
}
}
}Codex setup
macOS / Linux
Add to ~/.codex/config.toml:
[mcp_servers.vision-mcp]
type = "stdio"
command = "npx"
args = ["-y", "@winton979/vision-mcp"]
env = { VISION_BASE_URL = "<your-base-url>", VISION_API_KEY = "<your-api-key>", VISION_MODEL = "<your-model>" }Windows
[mcp_servers.vision-mcp]
type = "stdio"
command = "npx"
args = ["-y", "@winton979/vision-mcp"]
env = { VISION_BASE_URL = "<your-base-url>", VISION_API_KEY = "<your-api-key>", VISION_MODEL = "<your-model>" }Tool: analyze_image
Parameter | Type | Required | Description |
| string | one of three | Local file path to the image |
| string | one of three | Public http(s) URL of the image |
| string | one of three | Raw base64 string |
| string | No | Override MIME type (auto-detected) |
| string | No | Optimized analysis mode (default |
| string | No | Specific question; overrides the task's default instruction |
| string | No | Output structure: |
| string | No | Override model per call |
| integer | No | Default 4096 |
| number | No | Default 0.2 |
| string | No |
|
| string | No | Extra system guidance appended after the built-in base rules |
task
Selects an optimized built-in system context + default instruction, so callers don't have to hand-write a prompt for common cases:
task | use for |
| default — objects, text, layout, anomalies |
| verbatim text transcription, preserving layout |
| layout, alignment, overflow, element states, a11y |
| document structure & key content |
| reconstruct tables as markdown tables |
| nodes, edges, flow, relationships |
| chart type, axes, series, trends, values |
| merchant, line items, totals |
| transcribe & solve step by step |
| transcribe code verbatim |
If prompt is also provided, it takes precedence as the specific question while the task's specialized context still applies — e.g. task=ocr, prompt="what is the total amount?".
response_mode
markdown(default) — structured report (## Summary/## Visible Objects/## Text/## Findings/## Uncertainties)json— a single JSON object (summary,objects,text,findings,uncertainties) for easy parsing; the tool returns only the JSON, with no extra metadata appendedplain_text— unstructured text
jsonmode sendsresponse_format: { type: "json_object" }. Some OpenAI-compatible gateways do not support this field and may return HTTP 400; in that case fall back tomarkdown.
Built-in behavior
A fixed base system prompt is always applied — it enforces observable-facts-only reporting, exact text preservation, and prompt-injection protection (text inside the image is treated as content, never as instructions). The optional system parameter is appended after these rules and cannot override them.
Tips: avoid [image] tag conversion (Windows)
When you paste a local image path into Claude Code, the CLI may auto-convert it into an [image] tag and inline the bytes, which fails on models or not stable that do not accept image input. To keep the raw path intact, use ImageClipboardModify — it appends a fixed prefix to clipboard image paths so they are no longer recognized as images, letting analyze_image receive the path verbatim. for use mcp vision always
中文说明:Claude Code 会把粘贴的本地图片路径自动识别为
[image]标签,导致不支持图片的模型偶尔不稳定或者报错。可使用 ImageClipboardModify 给剪切板图片附加一段固定文字,绕过识别,让路径以纯文本形式传入analyze_image,使用使用mcp vision解析
Local development
git clone https://github.com/winton979/vision-mcp.git
cd vision-mcp
npm install
npm run build
# Run smoke test
SMOKE_IMAGE=/path/to/test.png VISION_API_KEY=sk-... npm run smokeLicense
MIT
Available Tools
1 toolanalyze_imageA
Analyze an image with a vision LLM (OpenAI-compatible chat/completions). Provide exactly one of path (local file), url (http/https), or base64. Optionally pass a custom prompt to steer the analysis (OCR, table extraction, captioning, Q&A, etc).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public http(s) URL of the image. | |
| path | No | Absolute or relative local file path to the image. | |
| model | No | Override the vision model. Defaults to env VISION_MODEL (gpt-4o). | |
| base64 | No | Raw base64 string (with or without data: prefix). | |
| detail | No | Optional image detail hint passed to the gateway. | |
| prompt | No | What you want the model to do with the image. Defaults to a detailed description. | |
| system | No | Optional system message. | |
| mime_type | No | Override MIME type for base64 input. Auto-detected if omitted. | |
| max_tokens | No | ||
| temperature | No |
TDQS
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 explains the tool invokes an LLM and defaults to detailed description, but does not mention limitations (e.g., image size, format compatibility, or error handling). Some behavioral context is implied but not fully detailed.
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 two concise sentences, front-loading the core function and unique input constraints. Every word adds value without redundancy. It is efficiently structured for quick comprehension.
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 10 parameters and no output schema, the description covers the main functionality and key parameters but lacks details on output format, error handling, or performance characteristics. It is adequate for basic use but leaves gaps for complex scenarios.
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 high (80%), but the description adds critical semantic value by explaining the mutual exclusivity of path/url/base64 and the role of the prompt parameter. This goes beyond the schema's individual descriptions, providing context on how parameters relate and behave.
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 analyzes images using a vision LLM, specifies the three supported input formats (path, URL, base64), and mentions optional prompt customization. The verb 'analyze' combined with 'image' and the mention of specific use cases (OCR, table extraction) makes the purpose unambiguous.
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 explicitly instructs the user to provide exactly one of path, url, or base64, which is a clear usage constraint. It also notes the optional prompt to steer analysis. While no siblings exist to differentiate, the guidance is direct and actionable, though it lacks explicit when-not-to-use scenarios.
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 tool update
v0.1.0- First observed
analyze_image
TDQS
Scored across 1 tool
Only one tool exists, so there is no ambiguity between tools. An agent cannot misselect among tools.
With a single tool, naming consistency is not applicable but there is no inconsistency to flag.
A single tool covering all vision analysis tasks feels too thin for the scope. While the tool is versatile via prompts, it lacks separate endpoints for different operations, making the surface sparse.
The tool covers the core vision analysis functionality with options for local/remote/base64 input and custom prompts. However, there are no tools for managing image resources or handling results, leaving minor gaps for complex workflows.
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 Connectors
Focused MCP server for OpenAI image/audio generation (v2.0.0). Wraps endpoints via HAPI CLI.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for Qwen Image 3 AI image generation
Related MCP Servers
- AlicenseBqualityCmaintenanceA lightweight MCP server for image analysis using any OpenAI-compatible API endpoint, enabling AI agents to analyze images via a single tool.19MIT
- FlicenseBqualityBmaintenanceA Python-based MCP server that adds image analysis capabilities to text-only LLMs via a single analyze_image tool, supporting local files, URLs, auto-scaling, and multiple OpenAI-compatible APIs.1-
- FlicenseAqualityBmaintenanceOpenAI-compatible vision MCP server with 14 provider presets that enables MCP clients to analyze images, including screenshots, text, and UI mockups, via a single analyze_image tool.2-
- AlicenseAqualityCmaintenanceMCP server that provides the describe_image tool, enabling AI clients to analyze local images by forwarding them to any OpenAI-compatible vision endpoint and returning a text description.1MIT