screen-mcp
Provides interaction with Hyprland's window manager, enabling enumeration of windows via hyprctl and capturing screenshots of specific windows, regions, or the full screen.
Offers screen capture capabilities on Wayland compositors using grim (wlroots screencopy protocol), supporting region, window, and fullscreen screenshots.
Click on "Deploy 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., "@screen-mcptake a screenshot of the focused window and describe what's on it"
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.
screen-mcp
An MCP (Model Context Protocol) server that gives AI agents eyes on an
Omarchy / Hyprland Wayland desktop. It captures screenshots via grim and
offers optional image analysis powered by the Gemini API — useful when the
calling model has no native vision encoder.
Features
Tool | What it does | Returns |
| Enumerate Hyprland windows via | Text listing with addresses, titles, workspaces, sizes |
| Capture a pixel rectangle | Inline PNG image (base64) |
| Capture a window by title, class, address, or | Inline PNG image (base64) |
| Capture the entire screen | Inline PNG image (base64) |
| Send an image (base64 or file path) to Gemini for reasoning | Text response |
| Capture a region and analyze it in one call | Text (Gemini response) |
Screenshots use grim (wlroots screencopy protocol) — no X11 required.
Related MCP server: hyprland-mcp-server
Prerequisites
Omarchy, Hyprland, or any wlroots-based Wayland compositor
grim— Wayland screenshot toolslurp— (optional) interactive region selection helperhyprctl— Hyprland window/query CLIjq— (optional) used by some helper scripts
Check with:
grim --help && hyprctl clients -j | head -c 20For image analysis (optional)
A Gemini API key — get one at https://aistudio.google.com
Export it in your environment:
export GEMINI_API_KEY="your-api-key-here"Without the key, the screenshot tools still work; only analyze_image and
screenshot_and_analyze will return an error.
Installation
Via Claude Desktop
Add this to your Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"screen-mcp": {
"command": "npx",
"args": ["-y", "screen-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key-here"
}
}
}
}Via npx
npx -y screen-mcp
# Or install globally:
npm install -g screen-mcpUsage examples
Capture a screen region
screenshot_region(x=100, y=200, width=800, height=600, include_cursor=true)Capture a specific window
First list available windows to get an address or title:
list_windows()Then capture by title (substring match), address, or "focused":
screenshot_window(window="Spotify")
screenshot_window(window="focused")
screenshot_window(window="0x557ba79b4900")Analyze an image with Gemini
analyze_image(
image_path="/tmp/my-screenshot.png",
prompt="What applications are visible in this screenshot?",
model="gemini-2.5-flash"
)Or pass base64-encoded image data directly:
analyze_image(
image="<base64-encoded-image>",
prompt="Describe what you see in this image.",
mime_type="image/png"
)Capture and analyze in one call
screenshot_and_analyze(
x=0, y=0, width=1920, height=1080,
prompt="Count the number of windows open and list their titles.",
scale=0.5,
model="gemini-2.5-flash"
)Development
# Install deps
npm install
# Build
npm run build
# Run
npm start
# Development (recompile on change)
npm run devHow it works
Capture:
src/capture.tswrapsgrim(screenshots) andhyprctl(window enumeration). Window capture first triesgrim -T <stableId>(foreign-toplevel handle), falling back togrim -g "<x>,<y> <w>x<h>"(geometry from hyprctl).Analysis:
src/gemini.tsuses the official@google/genaiSDK. Images are passed inline as base64 to the Gemini API'sinteractions.createendpoint.Server:
src/index.tswires everything together as a stdio-transported MCP server using@modelcontextprotocol/server.
License
MIT
Available Tools
6 toolsanalyze_imageAnalyze Image (Gemini)ARead-only
Send an image to the Gemini API for visual reasoning. Useful when the calling model has no native image encoder. Provide either a base64-encoded image or a local file path.
Inputs: prompt (required), image, model, mime_type, +1 more.
list_windowsList WindowsARead-onlyIdempotent
List all visible windows on the Hyprland desktop via hyprctl. Use the returned address with screenshot_window, or use "focused" to target the active window.
Inputs: workspace.
screenshot_and_analyzeScreenshot & AnalyzeARead-only
Capture a screen region and immediately send it to Gemini for analysis in a single call. Combines screenshot_region and analyze_image. Useful for agents without native vision.
Inputs: x (required), y (required), width (required), height (required), +4 more.
screenshot_fullscreenScreenshot FullscreenARead-onlyIdempotent
Capture the entire screen using grim. Returns the image inline as base64.
Inputs: include_cursor.
screenshot_regionScreenshot RegionARead-onlyIdempotent
Capture a rectangular screen region by pixel coordinates using grim (Wayland wlroots screencopy). Coordinates are in layout pixels. Returns the image inline as base64.
Inputs: x (required), y (required), width (required), height (required), +2 more.
screenshot_windowScreenshot WindowARead-onlyIdempotent
Capture a specific window by title, class, address, or the keyword "focused". Uses hyprctl to resolve the window and grim -T to capture it. Returns the image inline as base64.
Inputs: window (required), include_cursor.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 6 tools
Each tool has a distinct purpose: listing windows, capturing by target (window/region/fullscreen), analyzing an existing image, and a combined capture+analyze convenience. The overlap between screenshot_and_analyze and screenshot_region+analyze_image is intentional but creates slight ambiguity for agents choosing between them.
All tool names follow a consistent snake_case verb_noun pattern (list_windows, screenshot_window, analyze_image). The compound screenshot_and_analyze is well-formed and consistent with the style, maintaining a clear and predictable naming convention.
With 6 tools, the server is well-scoped and each tool serves a clear, non-redundant function for screen capture and image analysis. The count is ideal for a focused utility server.
The tool surface covers the core lifecycle of capturing and analyzing screenshots, including window enumeration and multiple capture modes. Minor gaps exist, such as no explicit monitor listing or image format options, but the essential workflows are fully supported.
Maintenance
Related MCP Connectors
Screenshot any public web page from an AI agent. Free without signup, or with an API key.
Screenshot, PDF and Open Graph image API for AI agents: capture pages, render PDFs, make OG images.
Screenshot API for AI agents. Any public page as image or PDF, banners hidden, 227 countries.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to automate Wayland desktop environments through screenshot analysis, mouse control, and keyboard input simulation. It supports visual context via VLM providers like Gemini and OpenRouter to perform complex, multi-step desktop actions.1035 PyPI15GPL 3.0
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to capture screenshots, inspect windows, and interact with the Hyprland desktop environment through mouse clicks and keyboard input.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control a Hyprland Wayland desktop by listing windows, capturing screenshots, and sending input to a dedicated agent workspace without disrupting the user's screen.1MIT
- FlicenseAqualityBmaintenanceProvides agents with temporary visual capture of Hyprland/Wayland monitors, windows, or regions as PNGs, enabling visual verification and self-correction of UI and desktop tasks.8-