omni-vision-pro
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., "@omni-vision-proanalyze this screenshot: ~/Desktop/screenshot.png"
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.
omni-vision-pro
omni-vision-pro is a local Model Context Protocol (MCP) server that turns screenshots, source code, folders, and ZIP archives into clean text context for non-vision models.
It is designed for OpenCode, Claude Desktop, VS Code MCP clients, and other applications that can launch a standard stdio MCP server.
What it provides
The server exposes three tools:
analyze_images— analyzes one image or an ordered array of images. It accepts normal paths,file://URLs, Markdown image links, OpenCode attachment references, anddata:image/...;base64,...URLs.read_code_context— reads a code file or directory and returns a file tree plus safe text contents.read_zip_context— inspects a.ziparchive entirely in memory and returns a virtual file tree plus safe text contents.
Images are always processed sequentially in the exact order supplied. Every result has a delimiter such as:
--- [Index 1] Visual UI JSON Analysis (Provider: OpenAI) ---Related MCP server: mcp-vision
Image provider order
For every image, the server uses the first provider that succeeds:
Gemini when
GEMINI_API_KEYis configured.OpenAI when
OPENAI_API_KEYis configured.Local Tesseract OCR when no cloud key is configured or cloud providers fail.
If both cloud keys are configured, Gemini is intentionally tried first and OpenAI is the second cloud fallback. A failure on one image does not stop later images.
OpenAI cost controls
Before an image is sent to OpenAI, sharp automatically:
applies EXIF orientation;
limits the output to a 1024 × 1024 bounding box without enlargement;
re-encodes screenshots/alpha images as optimized PNG and photographs as JPEG;
strips unnecessary metadata; and
sends the image with an explicit
detail: "low"image-content setting.
The completion is also constrained to concise JSON with a fixed output-token ceiling. This is strongly cost-optimized, but exact price cannot be permanently guaranteed because provider pricing, generated output, and retries can change. OpenAI low-detail mode also internally uses a reduced representation, so tiny text, precise coordinates, and model-estimated colors are best-effort rather than pixel-perfect.
To improve deterministic visual context without additional vision tokens, the server measures the source dimensions, output dimensions, dominant color, and an eight-color local palette with sharp.
Gemini model compatibility
The requested default is gemini-1.5-flash. Google has retired that model in some/current API environments, so the server automatically tries gemini-2.5-flash only when the legacy model is reported unavailable. You can choose a model explicitly:
GEMINI_MODEL=gemini-2.5-flashYou may also change only the automatic fallback:
GEMINI_FALLBACK_MODEL=gemini-2.5-flashLocal OCR
Tesseract OCR requires no API key. Its English language data is packaged locally, so normal OCR fallback does not need to download a language file at runtime.
OCR extracts visible text only. It does not reliably infer layout, icons, component boundaries, or element colors.
OpenCode image-path handling
OpenCode can represent an attached image in more than one way. omni-vision-pro handles the recoverable forms by:
using exact absolute paths;
resolving paths relative to the MCP server working directory;
decoding
file://paths, quoted paths,@pathreferences, and Markdown image links;checking known OpenCode data/cache locations and
${temporary-directory}/opencode;checking system temporary directories for an exact filename match;
recognizing the known
opencode-clipboard.pngtemporary filename; andaccepting an inline
data:image/...;base64,...URL when the MCP client forwards the attachment bytes directly.
The cache scan is bounded by depth and entry limits, never scans an entire home drive, and does not follow symlinks or junctions.
An important host limitation: some OpenCode builds keep pasted images only as in-memory data URLs and never create a durable file. No filesystem scanner can recover bytes that were never written. In that case, the client/model must pass the attachment's data URL to analyze_images; the tool supports it directly and does not require copying the image into a special folder.
Safety for code and ZIP files
Code and archive tools intentionally omit common generated/vendor folders:
node_modules, .git, dist, build, .next, coverage, __MACOSXThey also omit likely secrets, including:
.env, .env.*, id_rsa, id_ed25519, *.pem, *.key, *.p12, *.pfx,
.npmrc, .netrc, .pypirc, credentials.json, service-account.jsonAdditional protections include:
binary-content detection in addition to extension checks;
strict UTF-8 validation;
no filesystem symlink traversal;
maximum file count, per-file size, and aggregate output limits;
ZIP path traversal, drive path, UNC path, control character, duplicate path, encryption, and symlink rejection;
ZIP entry, inflated-size, aggregate-size, and compression-ratio limits;
no nested archive expansion; and
no ZIP extraction to disk.
For a stricter filesystem boundary, configure OMNI_ALLOWED_ROOTS. Code and ZIP tools will only read paths inside those roots. Images are exempt so OpenCode/system temporary attachments can still resolve.
Windows uses semicolons between roots:
OMNI_ALLOWED_ROOTS=C:\Users\you\Projects;D:\WorkmacOS and Linux use colons:
OMNI_ALLOWED_ROOTS=/Users/you/Projects:/Volumes/WorkRequirements
Node.js 20.10 or newer. A current Node.js LTS release is recommended.
An MCP-compatible desktop/editor client.
Optional: a Gemini or OpenAI API key. No key is needed for OCR-only mode.
Install from npm after publishing
This workspace contains a complete npm package, but building it here does not publish it to the npm registry. The npx examples below become usable after you publish omni-vision-pro. To use these files immediately, follow Use a local source checkout below and use its absolute dist/index.js configuration.
After publication, you normally do not need a global installation. The configuration examples below use npx, which downloads and launches the package automatically.
For repeatable/offline startup after an initial install, you can instead run:
npm install --global omni-vision-proThen use omni-vision-pro as the client command.
Configure OpenCode after npm publication
Create opencode.json in your project folder. You can instead use the global OpenCode configuration at ~/.config/opencode/opencode.json.
Gemini
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"omni-vision-pro": {
"type": "local",
"command": ["npx", "-y", "omni-vision-pro"],
"environment": {
"GEMINI_API_KEY": "PASTE_YOUR_GEMINI_KEY_HERE",
"GEMINI_MODEL": "gemini-2.5-flash"
},
"enabled": true,
"timeout": 120000
}
}
}OpenAI
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"omni-vision-pro": {
"type": "local",
"command": ["npx", "-y", "omni-vision-pro"],
"environment": {
"OPENAI_API_KEY": "PASTE_YOUR_OPENAI_KEY_HERE"
},
"enabled": true,
"timeout": 120000
}
}
}Free OCR-only mode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"omni-vision-pro": {
"type": "local",
"command": ["npx", "-y", "omni-vision-pro"],
"enabled": true,
"timeout": 120000
}
}
}Restart OpenCode after saving. You can check the MCP connection with:
opencode mcp listFor project-local .env loading, set OpenCode's cwd to the folder containing .env, or put the key in the environment object as shown above. Client environment configuration is the most reliable choice for desktop applications.
Configure Claude Desktop after npm publication
Open Claude Desktop, go to Settings → Developer → Edit Config, and add one of the configurations below.
Configuration file locations:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop is officially available on Windows and macOS. On Linux, use OpenCode or another standard MCP client.
Gemini
{
"mcpServers": {
"omni-vision-pro": {
"command": "npx",
"args": ["-y", "omni-vision-pro"],
"env": {
"GEMINI_API_KEY": "PASTE_YOUR_GEMINI_KEY_HERE",
"GEMINI_MODEL": "gemini-2.5-flash"
}
}
}
}OpenAI
{
"mcpServers": {
"omni-vision-pro": {
"command": "npx",
"args": ["-y", "omni-vision-pro"],
"env": {
"OPENAI_API_KEY": "PASTE_YOUR_OPENAI_KEY_HERE"
}
}
}
}Free OCR-only mode
{
"mcpServers": {
"omni-vision-pro": {
"command": "npx",
"args": ["-y", "omni-vision-pro"]
}
}
}Completely quit and reopen Claude Desktop after saving the file.
Use a local source checkout
From this package folder:
npm install
npm run buildThen point the client to the built entry file using an absolute path.
OpenCode example on Windows:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"omni-vision-pro": {
"type": "local",
"command": ["node", "C:/full/path/to/omni-vision-pro/dist/index.js"],
"enabled": true,
"timeout": 120000
}
}
}Claude Desktop example:
{
"mcpServers": {
"omni-vision-pro": {
"command": "node",
"args": ["C:/full/path/to/omni-vision-pro/dist/index.js"]
}
}
}Forward slashes work in Windows JSON and avoid backslash escaping mistakes.
Use .env
The server loads .env from its current working directory and, for a local package checkout, the package root. Existing environment variables always take priority.
Example:
# Choose either or both. Gemini is tried first when both exist.
GEMINI_API_KEY=your_gemini_key
GEMINI_MODEL=gemini-2.5-flash
OPENAI_API_KEY=your_openai_key
# Optional filesystem boundary for code and ZIP tools.
OMNI_ALLOWED_ROOTS=C:\Users\you\ProjectsNever commit .env or API keys to source control.
Example requests
After the MCP server is connected, ask your client naturally:
Use omni-vision-pro to analyze this screenshot and reconstruct its UI hierarchy.Use omni-vision-pro to analyze these three screenshots in the exact order attached. Compare the responsive layout changes.Use omni-vision-pro to read the code context from C:/Projects/my-app/src and summarize the architecture.Use omni-vision-pro to inspect C:/Downloads/source-bundle.zip without extracting it and return the file tree plus relevant source files.Tool inputs
analyze_images
{
"image_paths": [
"C:/Screenshots/home.png",
"C:/Screenshots/settings.png"
],
"prompt": "Focus on reusable React components and accessibility."
}image_paths may also be a single string. The tool processes at most 10 images by default.
read_code_context
{
"path": "C:/Projects/my-app/src",
"max_files": 80,
"max_output_bytes": 750000
}read_zip_context
{
"path": "C:/Downloads/project.zip",
"max_files": 80,
"max_output_bytes": 750000
}Privacy
Gemini mode transmits a resized copy of each image to Google.
OpenAI mode transmits a resized copy of each image to OpenAI.
Tesseract mode keeps OCR processing on the local machine.
Source files and ZIP contents are read locally and are not automatically sent to Gemini or OpenAI by this server. The MCP client/model may still include returned tool text in its own model context according to that client's privacy policy.
Troubleshooting
The client cannot find npx
Check that Node.js is installed:
node --version
npx --versionDesktop applications sometimes have a smaller PATH than your terminal. Find the full path:
Windows:
where npxmacOS/Linux:
which npx
Then use that absolute path as the client command. On Windows it may look like C:\\Program Files\\nodejs\\npx.cmd inside JSON.
The first OCR request takes longer
Tesseract starts a local worker on first fallback. Keep the OpenCode timeout at 120000 milliseconds or increase it if the computer is slow.
An image is not found
The resolver automatically tries normal paths and known OpenCode/system temporary locations. If the image existed only in OpenCode memory, ask the client/model to pass the attachment as an inline data URL to analyze_images; no manual file-copy step is required.
Gemini fails but the key is valid
Set an active model explicitly:
GEMINI_MODEL=gemini-2.5-flashThe server also automatically falls back from the requested legacy gemini-1.5-flash model when the API reports it unavailable.
JSON configuration errors
Check commas and quotation marks carefully. JSON does not allow comments. On Windows, use forward slashes in file paths or double every backslash.
Build and verify
npm run check
npm run buildThe server uses standard MCP over stdio. Protocol messages use stdout exclusively; operational diagnostics are written to stderr so they cannot corrupt MCP traffic.
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
- Alicense-qualityDmaintenanceAn MCP server for analyzing images using OpenRouter vision models, offering capabilities like automatic image resizing, model configuration, and handling custom queries about images.Last updated10MIT
- AlicenseAqualityCmaintenanceAn MCP server that adds image recognition to AI coding tools, enabling them to analyze images, extract text, and perform OCR via multimodal APIs and traditional OCR engines.Last updated312MIT
- AlicenseAqualityCmaintenanceMCP server that analyzes images with Google's Gemini vision models, allowing agents to describe or ask questions about images without bloating context.Last updated1MIT
- Alicense-qualityCmaintenanceAn MCP server that enables any LLM to describe images from file paths, URLs, or base64 data by forwarding them to a supported vision provider such as OpenAI, Anthropic, or local Ollama models.Last updated2,0836MIT
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
MCP server for Flux AI image generation
MCP server for Grok Imagine AI video generation
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/0xnurrabby/omni-vision-pro'
If you have feedback or need assistance with the MCP directory API, please join our Discord server