Give your agent eyes
An MCP server over stdio. No port, no daemon, no background process — your client starts it, it answers, it exits.
install + configure
$ pip install "screenagents[mcp]" // claude desktop · cursor · any mcp client{ "mcpServers": { "screenagents": { "command": "screenagents-mcp" } }}
run
$ screenagents-mcp[mcp] screenagents v0.1.0 listening on stdio[mcp] capture_screenshot · list_screenshot_backends
Ask. Look. Answer.
The tool returns the PNG as base64 alongside its metadata, so a multimodal model can actually see your screen — not describe what it assumes is there.
agent ──► list_screenshot_backends ──► "grim is available here"
│
└────► capture_screenshot(region="0,0,1280,720")
│
▼
{ "ok": true,
"path": "screenshot-20261018-1832-a1b2c3.png",
"width": 1280, "height": 720, "bytes": 88214,
"backend": "grim",
"image_base64": "iVBORw0KGgo…" }Two tools, no surprises
+--------------------------+-------------------------------------------------------------------+-------------------------------------------------------+
| tool | arguments | returns |
+--------------------------+-------------------------------------------------------------------+-------------------------------------------------------+
| capture_screenshot | path, region, monitor, display, backend, overwrite, include_image | ok, path, width, height, bytes, backend, image_base64 |
| list_screenshot_backends | — | ok, environment, backends[] |
+--------------------------+-------------------------------------------------------------------+-------------------------------------------------------+
region and monitor are optional — omit them for a full-screen capture. Set include_image=false when you only want the file metadata.Errors come back as
{ "ok": false, "error": "…" } instead of an exception, so the agent can read the reason and choose another backend.