eyes-mcp
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., "@eyes-mcpCapture the active window and look at it to verify the UI change."
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.
eyes-mcp
Temporary visual eyes for agents on Hyprland/Wayland. Lets Claude (or any MCP client) capture monitors, windows, or arbitrary regions and see the result as a PNG — closing the QA loop without relying on Playwright or screen-share heuristics.
Captures live in a per-process tempdir (/tmp/eyes-mcp-{pid}/) and self-destruct after a TTL (default 60s). Each capture tool returns metadata with a path; read that file to view the image. Capturing and looking are separate steps on purpose — you can take several captures and only spend tokens on the ones worth inspecting — but the TTL is running, so read what you need promptly.
Why
Agents writing UI fixes, desktop scripts, theming tweaks, notebook plots, or anything that produces a visual artifact normally have no way to verify the result. They commit blind, declare success, and the human catches the regression. eyes-mcp gives them a quick, scoped peek so they can self-correct before claiming "done".
Related MCP server: hyprland-mcp-server
Requirements
Hyprland (Wayland) — uses
hyprctlfor window/monitor enumerationgrim— Wayland screenshot backendPython 3.11+
Pillow (image resize)
uv— required by the plugin install path (see below)
# Arch
sudo pacman -S grim hyprlandInstall
cd ~/Projects/mcp/eyes-mcp
pip install -e .Install as plugin
claude plugin install eyes --marketplace Rixmerz/claude-pluginsPulls the whole repo via source: github, launches the server with uv run --project ${CLAUDE_PLUGIN_ROOT} eyes-mcp — resolves deps from
pyproject.toml on first run, no pip install -e . needed.
First-launch timeout risk: on a cold uv cache, resolving and installing
all deps (fastmcp, pillow, pydantic, transitively ~70 packages) has measured
up to ~90s before the server reports ready. Claude Code's default MCP startup
timeout is 30s, so the very first launch after claude plugin install eyes
can time out. Work around it by warming the cache once before registering the
plugin:
uv sync --project ~/.claude/plugins/cache/rixmerz/eyes/0.1.1The cache path uses the plugin name (eyes), not the repo name — adjust
the version to match what you installed. Or run uv sync --project <path>
against a manual checkout. Subsequent launches use the warmed uv cache and
start well under the timeout.
Register with Claude Code
claude mcp add eyes -- python -m eyes_mcpOr in ~/.config/claude/mcp.json (or equivalent):
{
"mcpServers": {
"eyes": {
"command": "python",
"args": ["-m", "eyes_mcp"],
"env": {
"EYES_TTL_SECONDS": "60",
"EYES_MAX_SIDE_PX": "1920"
}
}
}
}Tools
Tool | Purpose |
| Full monitor screenshot. Defaults to focused monitor. |
| Currently focused window. |
| Window matching class/title substring (largest match wins). |
| Arbitrary rectangle in global compositor coords. |
| Enumerate monitors (name, geometry, focused). |
| Enumerate open windows (class, title, geometry). |
| Captures still alive in current session. |
| Wipe all session captures now. |
Each capture tool returns a JSON metadata blob (id, path, dims, bytes, ttl). Read the file at path to view the PNG.
capture_window fails rather than guessing when the target window is on a workspace that is not currently displayed: grim reads the composited output, so capturing a hidden window would silently return the visible workspace's pixels under the requested window's name. It also cannot see through an occluding window stacked on top of the target — what you get is what is on screen.
Config
Env var | Default | Meaning |
|
| Seconds before a capture is swept from disk. |
|
| Longest side after downscale (token-cost guard). |
Lifecycle
Tempdir created on startup:
/tmp/eyes-mcp-{pid}/Background sweeper deletes expired files every
TTL/4secondsatexitwipes the whole tempdir on clean shutdownAll captures are PNG; downscaled in-place via Pillow LANCZOS
Limitations
Wayland-only (relies on
grim+hyprctl). No X11, macOS, Windows.No webcam capture in v1 (intentional scope cut).
Region selection is non-interactive — agents can't drive
slurp. Usecapture_windowor pass coords directly.Multi-monitor coords are global (Hyprland's compositor space).
License
MIT
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 Connectors
Generate images, GIFs, and PDFs from HTML, URLs, or templates — from your AI agent.
Screenshot any URL/HTML as PNG/JPEG/WebP, or read it as clean Markdown/text for LLMs.
Screenshot any URL as a hosted image. No local browser; handles bot walls and full-page captures.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables screenshot capture and visual analysis using cloud or local vision models, with tools to describe screens, list windows, and analyze images.11913MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to capture screenshots, inspect windows, and interact with the Hyprland desktop environment through mouse clicks and keyboard input.1
- AlicenseNot gradedqualityDmaintenanceLets an LLM see what's on your screen by capturing an entire monitor or a specific application window.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to capture screen regions by defining a visual overlay or arbitrary coordinates, returning base64 PNG images.35MIT
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/Rixmerz/eyes-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server