vision-mcp
Allows image analysis, comparison, OCR, and scene description using Google Gemini's vision models (e.g., Gemini Pro Vision) via OpenRouter.
Allows image analysis, comparison, OCR, and scene description using locally hosted vision models via Ollama (e.g., LLaVA).
Allows image analysis, comparison, OCR, and scene description using OpenAI's vision models (e.g., GPT-4o).
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 what's in this image"
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.
Vision MCP
A Model Context Protocol (MCP) server that provides image analysis capabilities using vision-capable AI models.
Features
Image Analysis: Analyze images for objects, text, colors, and context
Image Comparison: Compare multiple images and identify differences
Text Extraction (OCR): Extract text from images with formatting preservation
Scene Description: Get detailed descriptions of scenes and settings
Related MCP server: mcp-see
Installation
Option 1: Use directly with npx (no install needed)
Add to Claude Desktop config:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_API_KEY": "your-api-key",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"VISION_MODEL": "gpt-4o"
}
}
}
}Option 2: Install globally from GitHub
npm install -g github:cpramod/vision-mcpThen use in Claude Desktop config:
{
"mcpServers": {
"vision": {
"command": "vision-mcp",
"env": {
"OPENAI_API_KEY": "your-api-key",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"VISION_MODEL": "gpt-4o"
}
}
}
}Option 3: Install from local clone
git clone https://github.com/cpramod/vision-mcp.git
cd vision-mcp
npm install
npm run buildThen use the local path in Claude Desktop config:
{
"mcpServers": {
"vision": {
"command": "node",
"args": ["/path/to/vision-mcp/dist/index.js"],
"env": {
"OPENAI_API_KEY": "your-api-key",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"VISION_MODEL": "gpt-4o"
}
}
}
}Configuration
Environment Variables
Variable | Description | Required |
| API key for the vision provider | For most providers |
| Custom API endpoint URL | No (defaults to OpenAI) |
| Model name to use | No (defaults to |
Usage with Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
OpenAI:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_API_KEY": "your-openai-api-key",
"VISION_MODEL": "gpt-4o"
}
}
}
}Anthropic Claude via OpenRouter:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_BASE_URL": "https://openrouter.ai/api/v1",
"OPENAI_API_KEY": "your-openrouter-key",
"VISION_MODEL": "anthropic/claude-3.5-sonnet"
}
}
}
}Google Gemini via OpenRouter:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_BASE_URL": "https://openrouter.ai/api/v1",
"OPENAI_API_KEY": "your-openrouter-key",
"VISION_MODEL": "google/gemini-pro-vision"
}
}
}
}Ollama (local):
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_BASE_URL": "http://localhost:11434/v1",
"VISION_MODEL": "llava"
}
}
}
}Groq:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_BASE_URL": "https://api.groq.com/openai/v1",
"OPENAI_API_KEY": "your-groq-key",
"VISION_MODEL": "llama-3.2-11b-vision-preview"
}
}
}
}LM Studio (local):
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["github:cpramod/vision-mcp"],
"env": {
"OPENAI_BASE_URL": "http://localhost:1234/v1",
"VISION_MODEL": "local-model"
}
}
}
}Available Tools
analyze_image
Analyze an image using vision AI.
Parameters:
image(required): URL or base64-encoded image dataprompt(optional): Custom analysis promptdetail(optional): "low", "high", or "auto" detail level
Example:
{
"name": "analyze_image",
"arguments": {
"image": "https://example.com/image.jpg",
"prompt": "What's in this image?"
}
}compare_images
Compare 2-4 images.
Parameters:
images(required): Array of image URLs or base64 data (2-4 images)prompt(optional): Custom comparison prompt
extract_text
Extract text from images (OCR).
Parameters:
image(required): URL or base64-encoded imagepreserve_formatting(optional): Maintain layout (default: true)
describe_scene
Get detailed scene descriptions.
Parameters:
image(required): URL or base64-encoded imagefocus(optional): Focus area (e.g., "people", "architecture")
Supported Image Formats
JPEG, PNG, GIF, WebP
URLs or base64-encoded data URIs
Development
npm run dev # Build and run
npm run build # Compile TypeScript
npm start # Run compiled serverPublishing to npm (optional)
npm login
npm publishAfter publishing to npm, users can install with:
{
"mcpServers": {
"vision": {
"command": "npx",
"args": ["vision-mcp"],
"env": {
"OPENAI_API_KEY": "your-api-key",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"VISION_MODEL": "gpt-4o"
}
}
}
}Available Tools
4 toolsanalyze_imageA
Analyze an image using vision AI. Provide either a URL or base64-encoded image data. Returns detailed analysis including objects, text, colors, scene description, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Either a URL to the image or base64-encoded image data (with or without data URI prefix) | |
| detail | No | Level of detail for analysis. 'low' for faster processing, 'high' for detailed analysis. Defaults to 'auto'. | |
| prompt | No | Custom prompt for analysis. Defaults to general image analysis if not provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions using 'vision AI' and lists output types, but does not disclose whether the operation is read-only, whether data is stored, potential latency, network requirements, or side effects. This is a significant gap for safe tool invocation.
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 sentences long and front-loaded with the core purpose. It efficiently conveys input format and output summary without redundancy or filler. Every sentence earns its place.
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?
For a tool with 3 parameters and no output schema, the description adequately summarizes what the tool does and the general nature of its returns. However, it lacks details about the response structure or behavior under different detail levels, which would be helpful given the absence of an output schema. Still, it is sufficiently complete for a general analysis tool.
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 100% with each parameter (image, detail, prompt) fully described in the schema. The description's mention of 'Provide either a URL or base64-encoded image data' simply restates the schema's image parameter description. It adds no new meaning beyond what the schema already provides, so the baseline score of 3 applies.
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 ('Analyze') and resource ('an image'), and lists concrete output categories (objects, text, colors, scene description) that clearly distinguish it from sibling tools like compare_images, extract_text, and describe_scene. This makes the tool's 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 implies general-purpose analysis by listing multiple output types, but it does not explicitly state when to use this tool vs. alternatives like extract_text or describe_scene. There is no mention of exclusions or when-not-to-use scenarios, only input format guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_imagesA
Compare two or more images and describe their differences, similarities, or relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| images | Yes | Array of image URLs or base64-encoded images (2-4 images) | |
| prompt | No | Custom comparison prompt. Defaults to general comparison. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states that the tool produces a description of differences, similarities, or relationships, which conveys the core output behavior. However, it does not disclose potential limitations, failure modes, or the exact format of the output, leaving behavioral details ambiguous.
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, focused sentence that immediately states the action and resource. It avoids unnecessary detail and is well-structured, earning a high score.
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 is relatively simple, but with no output schema, the description should clarify the return structure. It states the tool will 'describe' differences, but not whether the output is a single combined summary or per-pair comparisons. This ambiguity makes the description only minimally complete.
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?
Both parameters are fully described in the schema (100% coverage), so the baseline is 3. The description doesn't add further semantic meaning beyond the schema, though it does reinforce the 'two or more images' constraint. No additional parameter context is provided.
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 function—comparing multiple images and describing their differences, similarities, or relationships—and distinguishes it from siblings like analyze_image and describe_scene, which focus on single images. The verb 'compare' and the explicit 'two or more images' scope make 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 implies usage for comparing multiple images but does not explicitly mention when to prefer this tool over siblings such as analyze_image or describe_scene. There are no explicit alternatives or exclusions, so guidance is only implicit through the requirement of at least two images.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_sceneB
Get a detailed description of a scene, including spatial relationships, atmosphere, and context.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | What to focus the description on (e.g., 'people', 'architecture', 'nature') | |
| image | Yes | Either a URL to the image or base64-encoded image data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must disclose behavior. It reveals that the output will include spatial relationships, atmosphere, and context, but omits any details about output format, potential limits, errors, or differences from analyzing generic images. This is insufficient for a tool with no structured behavioral cues.
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, front-loaded sentence that efficiently conveys the tool's purpose and key outputs without redundant filler. Every phrase earns its place.
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 is relatively simple with two parameters and no output schema. The description provides a reasonable overview of what the description will contain, but lacks guidance on result format or examples. Given the existence of overlapping siblings, more context on when exactly to use this tool would be valuable.
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 already provides full descriptions for both parameters (image and focus), so the tool description adds no new parameter semantics. Baseline 3 applies because schema coverage is 100%, and the description's mention of scene context loosely complements the 'focus' parameter but adds no technical detail.
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 function: 'Get a detailed description of a scene' and specifies key content like spatial relationships, atmosphere, and context. This distinguishes it from generic image analysis and text extraction, though it does not explicitly name alternatives.
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 use when a scene-level description is needed, but gives no explicit guidance on when to prefer this over siblings like analyze_image. No exclusions or alternative conditions are mentioned, so usage context is only moderately clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_textA
Extract and transcribe text from an image (OCR). Useful for documents, screenshots, signs, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Either a URL to the image or base64-encoded image data | |
| preserve_formatting | No | Whether to preserve text formatting and layout. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full responsibility for behavioral disclosure. It states the OCR action but does not describe the output format, potential limitations (e.g., handwriting, low-quality images), or error behavior. This is a significant gap given the complete lack of annotation context.
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 sentence that immediately states the core action and adds a brief, relevant list of use cases. Every part is purposeful, with no redundancy or filler.
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?
For a simple two-parameter tool with a well-described schema, the description offers enough information to select and invoke it correctly. The absence of an output schema means the return value is not explicitly stated, but 'Extract and transcribe text' reasonably implies text output; a brief note on return format would make it fully complete.
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 input schema already provides thorough descriptions for both parameters (image accepts URL or base64; preserve_formatting defaults to true). Schema description coverage is 100%, so the description adds no additional parameter-level meaning, which matches the baseline score of 3.
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 phrase 'Extract and transcribe text from an image' and explicitly identifies the operation as OCR. This clearly distinguishes it from sibling tools like analyze_image, compare_images, and describe_scene, which focus on image understanding rather than text 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 provides clear usage contexts ('documents, screenshots, signs, etc.') that help an agent decide when to apply this tool. It does not explicitly state when not to use it or mention alternatives, so it falls short of full exclusion guidance but offers more than implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The tools have distinct purposes, but analyze_image is a catch-all that includes text extraction and scene description, overlapping with extract_text and describe_scene. An agent may struggle to choose between the broad tool and the specialized ones.
All tools follow a consistent verb_noun pattern with lowercase and underscores: analyze_image, compare_images, extract_text, describe_scene. The naming is uniform and predictable.
Four tools is well-scoped for a vision analysis server, providing a focused set of capabilities without unnecessary bloat or thinness.
The tools cover core vision tasks: analysis, comparison, OCR, and scene description. Some potential gaps include dedicated object detection or face recognition, but analyze_image likely covers these generically, so the surface is nearly complete.
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
MCP server for Qwen Image 3 AI image generation
MCP server for Midjourney AI image generation and editing
MCP server for Wan AI video generation
An MCP Server that provides identity verification and anti-fraud tools for AI agents via deepidv.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for analyzing images using OpenRouter vision models, offering capabilities like automatic image resizing, model configuration, and handling custom queries about images.10MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents the ability to observe and understand images via multi-provider vision, object detection, hierarchical analysis, and color extraction.172MIT
- AlicenseAqualityBmaintenanceMCP server that provides an analyze_image tool using OpenAI-compatible vision LLMs to describe images from file paths, URLs, or base64 data.1191MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that provides vision capabilities to DeepSeek by forwarding image analysis requests to supported vision models. It offers tools for professional image analysis, OCR, and image comparison.MIT
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/cpramod/vision-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server