eyes-mcp
eyes-mcp
Gib jedem textbasierten LLM Augen. Lokale Bilderkennung für deinen Coding-Agenten.
Ein Befehl · keine API-Schlüssel · nichts verlässt deinen Rechner
DeepSeek, GLM, Qwen-Coder, Llama… großartige Modelle, alle blind.
❌ Ohne Augen
Du fügst einen Screenshot in deinen Agenten ein (der ein textbasiertes Modell über Claude Code / Codex / Cursor ausführt):
> Here's the error in my UI, fix it [screenshot.png]
I'm sorry — I cannot see images. Please describe the error in text.Related MCP server: OpenSight MCP
✅ Mit Augen
Der Agent ruft stattdessen ein lokales VLM + OCR auf und liest den Screenshot selbst:
> Here's the error in my UI, fix it [screenshot.png]
I see a React hydration error in `CartDrawer.tsx:142`. The OCR shows:
"Hydration failed because the server rendered HTML didn't match the client." …Schnellstart
git clone https://github.com/JamesbbBriz/eyes-mcp
cd eyes-mcp && ./scripts/install.shDas war's. Der Installer:
fragt, welches Modell du möchtest, mit einer Empfehlung, die aus deinem RAM und deiner GPU berechnet wird (überspringe die Frage mit
EYES_PRESEToder--yes),installiert Abhängigkeiten und lädt das Modell herunter (~0.3 bis 3.5GB, fortsetzbar),
erkennt, welche deiner Agenten textbasierte Modelle ausführen, indem es deine Claude Code / Codex / Cursor-Konfigurationen liest und jedes Modell gegen eine Modalitätsdatenbank prüft,
registriert eyes-mcp nur dort, wo es benötigt wird. Multimodale Agenten werden automatisch übersprungen.
# options:
EYES_PRESET=fast ./scripts/install.sh # Qwen3.5-0.8B, natively multimodal
HF_ENDPOINT=https://hf-mirror.com ./install.sh # mainland-CN mirror
./install.sh --yes # accept all recommendations, no prompts
./install.sh --dry-run # preview without changing anythingNur den Modalitätscheck? python3 scripts/detect_modality.py
Voraussetzungen: Python ≥3.11, llama.cpp (brew install llama.cpp), ~1GB RAM.
Manuelle Registrierung
Auto-Installation übersprungen oder ein Agent, den der Installer nicht kennt? Füge ihn von Hand hinzu.
Claude Code (~/.claude.json → mcpServers):
"eyes-mcp": {
"command": "uv",
"args": ["--directory", "/ABS/PATH/eyes-mcp", "run", "eyes-mcp"],
"env": { "EYES_PRESET": "lfm-450m" }
}Codex (~/.codex/config.toml):
[mcp_servers.eyes-mcp]
command = "uv"
args = ["--directory", "/ABS/PATH/eyes-mcp", "run", "eyes-mcp"]
env = { EYES_PRESET = "lfm-450m" }Cursor (.cursor/mcp.json): gleiche Struktur wie Claude Code.
Starte den Agenten neu und frag dann: „Was ist auf diesem Screenshot?“
Werkzeuge
Werkzeug | Engine | Verwendung |
| VLM via llama.cpp | Beschreibungen, UI-Verständnis, visuelles Q&A |
| RapidOCR (onnx) | Dichter Text: Terminals, Dokumente, Tabellen; schnell und präzise |
Modell-Presets
Preset | Modell | Download | RAM | Lizenz | Hinweise |
| SmolVLM2-256M | ~0.3GB | ~1GB | Apache-2.0 | kleinstes brauchbares VLM |
| LFM2.5-VL-450M | ~0.4GB | ~1.2GB | getestet; schnellster Start | |
| Qwen3.5-0.8B | ~0.7GB | ~1.8GB | Apache-2.0 | nativ multimodal (Bild + Video) |
| GLM-OCR | ~1.4GB | ~3.5GB | MIT | Dichter Text / Dokument-Champion (3M+ Downloads/Monat) |
| Qwen3.5-2B | ~2GB | ~3.5GB | Apache-2.0 | bestes Verhältnis Qualität/Größe |
| Qwen3.5-4B | ~3GB | ~6GB | Apache-2.0 | Maximalstufe (GPU empfohlen) |
Versteckte Extras (weiterhin ein Befehl): smol500 (SmolVLM2-500M), paddle (PaddleOCR-VL-1.6), qwen3-2b (Qwen3-VL-2B).
Jedes andere GGUF funktioniert auch. Setze die Umgebungsvariable darauf und überspringe Presets komplett:
EYES_MODEL_DIR=~/models/my-vlm VLM_MODEL_FILE=model-Q4.gguf VLM_MMPROJ_FILE=mmproj.ggufGute Kandidaten, die nicht als Presets enthalten sind: LFM2.5-VL-1.6B/3B, InternVL3.5-2B/4B, MiniCPM-V-4.6, DeepSeek-OCR, dots.ocr, gemma-3n-E2B, moondream2. Alles, was llama.cpp mit einer mmproj-Datei unterstützt, funktioniert.
Jederzeit wechseln: Setze EYES_PRESET und führe ./scripts/download_models.sh erneut aus. Nicht sicher? python3 scripts/choose_model.py zeigt deinen RAM/GPU und markiert eine Empfehlung.
So funktioniert es
Claude Code / Codex / Cursor
│ MCP stdio
▼
eyes-mcp (stateless, mcp SDK 2.x)
├─ analyze_image → llama.cpp llama-server (local VLM) "understand"
└─ ocr_image → RapidOCR (onnx, ~20MB) "extract text"Lebenszyklus folgt deinem Agenten: Der VLM-Server startet, wenn das MCP startet, und beendet sich, wenn dein Agent endet. So hast du nie verwaiste Prozesse oder einen Daemon, den du betreuen musst.
Dynamischer Port: Der VLM bindet nie einen festen Port (tschüss, „8080 bereits in Verwendung“), sodass er mit deinen anderen lokalen Diensten koexistiert.
Wiederverwendung externer VLMs: Wenn du bereits eins unter
VLM_BASE_URLbetreibst, verwendet eyes-mcp es, anstatt ein eigenes zu starten.
Warum
Die günstigsten und besten Coding-Modelle derzeit (DeepSeek-V4-Flash, GLM-5.x, Qwen-Coder) sind rein textbasiert. Jede Agenten-Plattform geht davon aus, dass du einen Screenshot einfügen kannst, und jedes dieser Modelle scheitert still daran. eyes-mcp ist der fehlende Sidecar: ein kleines lokales VLM plus OCR, eingebettet in den Lebenszyklus, den dein Agent bereits versteht.
Roadmap
Verzögerter VLM-Start (erst beim ersten Tool-Aufruf starten, nicht beim MCP-Start)
screenshot_analyze(Bildschirm erfassen, keine Datei nötig)PDF-Seiten → Bilderkennung
npx eyes-mcpEinzeiler-InstallationPrompt-Vorlagen pro Modell (llama.cpp-OCR-Modelle benötigen spezifische Prompts)
FAQ
Spielt mein Agentenmodell eine Rolle? Nur insofern, als es rein textbasiert sein muss, damit das nützlich ist. Multimodale Modelle (GPT, Claude, GLM-V) sehen Bilder bereits, also lass es.
Wird eine GPU benötigt? Nein. Es läuft problemlos auf der CPU, und llama.cpp erkennt Apple Metal oder CUDA automatisch, wenn vorhanden.
Wo werden Modelle gespeichert? ~/.eyes-mcp/models/<preset>/. Lösche sie, um zurückzusetzen.
Lizenz
MIT. Die Modellgewichte behalten ihre eigenen Lizenzen (siehe Preset-Tabelle); sie werden bei der Installation heruntergeladen und hier nie weiterverteilt.
This server cannot be deployed
Maintenance
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Grabbit gives AI agents eyes on the web through a hosted MCP server. Send a public URL and get a pixel-perfect hosted image back, without maintaining Chromium, Playwright, or a browser fleet. Capture a full page, exact viewport, or single CSS selector as PNG, JPEG, or WebP. Grabbit handles cookie and consent banners, waits for JavaScript-heavy pages, blocks private and internal URLs, supports safe retries with idempotency keys, and delivers async results through signed webhooks. Completed captures include a CDN URL. Connect with OAuth 2.1 or an API key. Grabbit works with Claude, Cursor, Codex, and any MCP client. Live captures cost $0.002 each. The $50 annual plan includes 25,000 prepaid credits that never reset or expire. Free test keys return placeholder images, so you can wire up the integration before paying. Home: https://grabbit.live Docs: https://grabbit.live/screenshot-api Built by BrainGrid.
- mcpOAuthcom.screenshotink
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
Scrape, crawl and search the web for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceBridges vision models to text-only coding models using Florence-2, enabling non-vision LLMs to describe images, extract text, and analyze screenshots via MCP tools.6MIT
- AlicenseNot gradedqualityBmaintenanceMulti-backend AI vision for MCP agents. Analyze images, screenshots, and documents using local Ollama models or cloud APIs like OpenAI, Google Gemini, and OpenRouter.MIT
- AlicenseNot gradedqualityAmaintenanceLocal vision-capable MCP server that lets AI agents describe screenshots, UI, charts, and photos via vision and OCR tools, with support for multiple providers and automatic fallback.6MIT
- AlicenseNot gradedqualityCmaintenanceAdds image recognition and UI grounding capabilities to text-only LLMs through MCP tools, supporting local and cloud vision backends.40 npmMIT