eyes-mcp
eyes-mcp
Dale ojos a cualquier LLM de solo texto. Visión local para tu agente de codificación.
Un comando · cero API keys · nada sale de tu máquina
DeepSeek, GLM, Qwen-Coder, Llama… grandes modelos, todos ciegos.
❌ Sin ojos
Pegas una captura de pantalla en tu agente (que ejecuta un modelo solo de texto mediante Claude Code / Codex / Cursor):
> 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
✅ Con ojos
El agente llama a un VLM local + OCR en su lugar, y lee la captura de pantalla por sí mismo:
> 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." …Inicio rápido
git clone https://github.com/JamesbbBriz/eyes-mcp
cd eyes-mcp && ./scripts/install.shEso es todo. El instalador:
pregunta qué modelo quieres, con una recomendación calculada según tu RAM y tu GPU (omite la pregunta con
EYES_PRESETo--yes),instala las dependencias y descarga el modelo (~0.3 a 3.5GB, reanudable),
detecta cuáles de tus agentes ejecutan modelos solo de texto, leyendo tus configuraciones de Claude Code / Codex / Cursor y verificando cada modelo contra una base de datos de modalidades,
registra eyes-mcp solo donde se necesita. Los agentes multimodales se omiten automáticamente.
# 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 anything¿Solo quieres la comprobación de modalidad? python3 scripts/detect_modality.py
Requiere: Python ≥3.11, llama.cpp (brew install llama.cpp), ~1GB de RAM.
Registro manual
¿Omitiste la instalación automática, o tienes un agente que el instalador no conoce? Añádelo manualmente.
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): misma forma que Claude Code.
Reinicia el agente y luego pregunta: "¿qué hay en esta captura de pantalla?"
Herramientas
Herramienta | Motor | Uso |
| VLM via llama.cpp | Descripciones, comprensión de UI, preguntas y respuestas visuales |
| RapidOCR (onnx) | Texto denso: terminales, documentos, tablas; rápido y preciso |
Modelos predefinidos
Preajuste | Modelo | Descarga | RAM | Licencia | Notas |
| SmolVLM2-256M | ~0.3GB | ~1GB | Apache-2.0 | el VLM más pequeño y útil |
| LFM2.5-VL-450M | ~0.4GB | ~1.2GB | probado; inicio más rápido | |
| Qwen3.5-0.8B | ~0.7GB | ~1.8GB | Apache-2.0 | nativamente multimodal (imagen + video) |
| GLM-OCR | ~1.4GB | ~3.5GB | MIT | campeón en texto denso / documentos (3M+ descargas/mes) |
| Qwen3.5-2B | ~2GB | ~3.5GB | Apache-2.0 | mejor equilibrio calidad/tamaño |
| Qwen3.5-4B | ~3GB | ~6GB | Apache-2.0 | nivel máximo (GPU recomendada) |
Extras ocultos (sigue siendo un solo comando): smol500 (SmolVLM2-500M), paddle (PaddleOCR-VL-1.6), qwen3-2b (Qwen3-VL-2B).
Cualquier otro GGUF también funciona. Apunta la variable de entorno a él y omite los preajustes por completo:
EYES_MODEL_DIR=~/models/my-vlm VLM_MODEL_FILE=model-Q4.gguf VLM_MMPROJ_FILE=mmproj.ggufBuenos candidatos que no vienen como preajustes: LFM2.5-VL-1.6B/3B, InternVL3.5-2B/4B, MiniCPM-V-4.6, DeepSeek-OCR, dots.ocr, gemma-3n-E2B, moondream2. Todo lo que llama.cpp admita con un archivo mmproj funciona.
Cambia cuando quieras: configura EYES_PRESET y vuelve a ejecutar ./scripts/download_models.sh. ¿No sabes cuál? python3 scripts/choose_model.py muestra tu RAM/GPU y marca una recomendación.
Cómo funciona
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"El ciclo de vida sigue a tu agente: el servidor VLM se inicia cuando arranca el MCP y se apaga cuando tu agente sale, para que nunca termines con procesos huérfanos o un demonio que cuidar.
Puerto flotante: el VLM nunca se vincula a un puerto fijo (adiós, "8080 ya está en uso"), por lo que convive con tus otros servicios locales.
Reutilización de VLM externo: si ya ejecutas uno en
VLM_BASE_URL, eyes-mcp lo usa en lugar de lanzar el suyo propio.
Por qué
Los modelos de código más baratos y mejores actualmente (DeepSeek-V4-Flash, GLM-5.x, Qwen-Coder) son solo de texto. Cada plataforma asume que puedes pegar una captura de pantalla, y todos estos modelos fallan silenciosamente. eyes-mcp es el sidecar que faltaba: un pequeño VLM local más OCR, envuelto en el ciclo de vida que tu agente ya entiende.
Hoja de ruta
Inicio diferido del VLM (se lanza en la primera llamada a una herramienta, no al iniciar MCP)
screenshot_analyze(captura la pantalla, sin necesidad de archivo)Páginas PDF → visión
Instalador de una línea
npx eyes-mcpPlantillas de prompt por modelo (los modelos OCR de llama.cpp necesitan prompts específicos)
Preguntas frecuentes
¿Importa el modelo de mi agente? Solo en que debe ser solo de texto para que esto sea útil. Los modelos multimodales (GPT, Claude, GLM-V) ya ven imágenes, así que no te molestes.
¿Se necesita GPU? No. Funciona bien en CPU, y llama.cpp detecta Apple Metal o CUDA automáticamente si están presentes.
¿Dónde se almacenan los modelos? ~/.eyes-mcp/models/<preset>/. Bórralos para restablecer.
Licencia
MIT. Los pesos de los modelos conservan sus propias licencias (consulta la tabla de preajustes); se descargan en el momento de la instalación, nunca se redistribuyen aquí.
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