screencye
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., "@screencyeCan you analyze the UI layout in this screenshot: /tmp/dashboard.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.
screencye — eyes for text-only LLMs
Decode a screenshot into exact structured text so any text-only model can "see" your UI — words, coordinates, sizes, colors, spacing. Pure-code CV + OCR. Zero VRAM. Deterministic.
Give a screenshot to a text-only model (DeepSeek, a local model, Claude Code, Hermes, etc.) and it can now reason about exact positions instead of hallucinating them — because the screenshot was decoded into a transcript with precise measurements.
┌ CARD "Welcome back ..." at (431,197) 418×406 · fill #ffffff
│ TEXT "Welcome back" at (556,240) 168×19 · #111827
┌ INPUT "you@example.com" at (468,341) 344×40 · fill #ffffff
┌ BUTTON "Log in" at (467,517) 346×46 · fill #2563eb · text #ffffffHere's a text-only agent (Hermes) using both tools — decode_screenshot + describe_screenshot — to answer "what do you see?":

Why it exists
Text-only models can't see screenshots — and describing a misaligned button in words is error-prone.
Vision models steal VRAM — a local vision encoder (like Gemma's
--mmproj) lives in GPU memory even when idle, squeezing the text model.screencye runs on CPU — the decode is pure code + PaddleOCR via ONNX Runtime. No GPU, no network, no vision model in the reading path. All your VRAM stays with your text model. (The optional
describe_screenshottool uses a tiny on-CPU MobileCLIP2-S2 classifier — still zero VRAM.)
Related MCP server: uitars-mcp
Skip the vision encoder — save the VRAM
Running a local vision-language model in llama-server (Qwen-VL, Gemma 3, LLaVA, MiniCPM-V)? That --mmproj flag is its vision encoder — a separate projector file (~0.8–1.1 GB) sitting in VRAM on top of the LLM, even when you're only reading text.
For reading screens you don't need a vision model — you need the information in the image. screencye turns any screenshot into exact text (words, coordinates, colors, spacing) with a ~21 MB on-device engine and deterministic pixel analysis. Zero VRAM. Runs on CPU.
Drop --mmproj, run the model text-only, and let screencye do the looking:
Setup | VRAM |
Qwen-VL / Gemma 3 with | full model + ~0.8–1.1 GB projector |
Text-only model + screencye MCP | no projector; screen reading happens on CPU |
Same ability to read a UI at a fraction of the memory — and because the decode is exhaustive and deterministic, nothing is silently missed the way a vision encoder's selective attention can skip details.
If your job is understanding arbitrary images — a photo's subject, a chart's trend — keep the vision model. screencye is for screens: exact, complete, and nearly free to run.
How it works (no AI in the decode)
OCR — PaddleOCR v5 mobile (ONNX Runtime, ~21 MB) reads every word with a bounding box + confidence.
Layout — pure pixel code: Sobel edges, color-quantized flood fill, connected components → finds buttons, inputs, cards.
Inference — geometric heuristics classify each box (centered text in a bordered box = button, etc.).
Transcript — computed coordinates, spacing, alignment, colors; rendered as a nested tree in reading order.
Deterministic: same screenshot → byte-identical transcript, every time.
Install
CLI (any agent or script)
npm install -g github:veloce-ai-idm/deepsee
screencye /path/to/screenshot.pngMCP server (Claude Code, Hermes, etc.)
Add to your agent's MCP config (claude mcp add or the client's MCP settings):
{
"mcpServers": {
"screencye": {
"command": "screencye-mcp",
"args": []
}
}
}Then any agent can call the decode_screenshot tool with a file path and get the transcript.
Model files
All models ship in the repo's models/ folder (~91 MB total, each file under GitHub's 100 MB limit):
det_infer.onnx,rec_infer.onnx,ppocrv5_dict.txt— PaddleOCR v5 (reads every word)mobileclip-vision.onnx(fp16, 73 MB) +mobileclip-labels.json— MobileCLIP2-S2 semantic tagger
Resolution order:
SCREENCYE_MODEL_DIRenv var (explicit override)<install>/models/(ships with the package)
The label list lives in scripts/build_labels.py (one-time build: tokenizes labels and runs the MobileCLIP text encoder; needs the text ONNX, ~250 MB, from RuteNL/MobileCLIP2-S2-OpenCLIP-ONNX). The browser app (deepsee.veloceidm.com) serves the same fp16 model split into two ~37 MB parts — the IONOS host caps files at 50 MB, so it's chunked and reassembled at load time, not re-quantized.
Bigger models (S3/S4, higher zero-shot accuracy) are NOT bundled — their fp16 exports exceed GitHub's 100 MB/file limit, so they can't ship in this repo. Power users can point SCREENCYE_MODEL_DIR at an S3/S4 mobileclip-vision.onnx (from RuteNL/MobileCLIP2-S3-OpenCLIP-ONNX or S4) for a ~3–5% zero-shot accuracy boost.
Tools
Tool | Input | Output |
|
| Structured transcript (words, coords, colors, spacing) |
|
| Top semantic labels (MobileCLIP2-S2: "login page", "dashboard", "map", "game", …) |
describe_screenshot classifies against ~96 broad labels (UI types, games, photos, documents, charts, code, media, abstract). If no label clears the confidence threshold it appends a LOW CONFIDENCE warning instead of forcing a guess — so a blind model isn't misled while debugging. The label list lives in scripts/build_labels.py.
Privacy
Everything runs locally. The screenshot never leaves the machine — no API calls, no data egress.
Test
npm test # parity + structure + determinism on golden screenshots
node test/mcp-handshake-test.mjs # full MCP handshakeFiles
File | Purpose |
| The 5-pass deterministic decoder (Node port) |
| MCP server (stdio) with |
| CLI entry ( |
| Model-path resolution |
Roadmap
decode_screenshot_base64— pass image bytes directly (no temp file needed)screenshot capture helper
Powered by VELOCE AI Accelerator · ONNX Runtime · PaddleOCR
This server cannot be installed
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
- AlicenseNot gradedqualityNot gradedmaintenanceEnables LLMs to capture and analyze screenshots of your screen, windows, or regions with smart detection capabilities. Features natural language queries, automatic window targeting, and text enhancement for UI debugging and visual inspection.2
- AlicenseNot gradedqualityDmaintenanceEnables AI coding agents to locate UI elements on screen with exact pixel coordinates using a local UI-TARS-2B vision model. Provides offline GUI grounding with ~1.2s latency on 4.1GB VRAM, eliminating cloud dependencies for computer-use automation.MIT
- AlicenseAqualityBmaintenanceEnables blind AI coding models to debug visual bugs by capturing screenshots, analyzing them with a vision-capable model, and returning a written report.15MIT
- AlicenseNot gradedqualityCmaintenanceProvides structured visual analysis tools for coding agents, enabling UI analysis, screenshot comparison, OCR, and crop-based refinement through VLM.MIT
Related MCP Connectors
E2LLM gives your AI eyes and hands in a real browser: structured perception (SiFR) plus action.
Codebase intelligence for agents: 152 structured artifacts across 21 programs, one call.
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
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/veloce-ai-idm/deepsee'
If you have feedback or need assistance with the MCP directory API, please join our Discord server