Skip to main content
Glama
matthewpugsley

screen-capture-mcp

screen-capture-mcp

A small local MCP server that lets an AI assistant (e.g. Claude Code) take a single still screenshot of one of your monitors, only when you ask it to.

  • No web server, no background capture, no video stream. The assistant launches it over stdio and it grabs one frame per tool call.

  • Images are downscaled (default 1568px on the long edge) to keep token cost reasonable while keeping text legible.

  • Works on Windows, macOS, and Linux (via mss).

Tools

Tool

What it does

list_monitors

Lists monitors numbered left to right (1 = leftmost), with resolution, position, and which is primary.

capture_screen

Captures one monitor. monitor: "primary" (default), "all", or a number. Optional max_dimension (256-4096) and image_format ("jpeg" default, or "png").

Related MCP server: Webshot MCP

Install

Requires uv.

git clone <this-repo-url> screen-capture-mcp
cd screen-capture-mcp
uv sync

Register with Claude Code (all projects)

Substitute the absolute path to your clone:

claude mcp add --scope user screen-capture -- uv run --directory /absolute/path/to/screen-capture-mcp screen-capture-mcp

Restart Claude Code, then ask something like "take a look at my left monitor."

Claude Code asks permission before each tool call by default. To skip the prompt, allow mcp__screen-capture__capture_screen in your permissions.

Notes

  • Games: use borderless fullscreen or windowed mode. Exclusive fullscreen can produce black captures.

  • macOS: grant your terminal the Screen Recording permission.

  • Privacy: captures go to whatever model your client uses. Nothing is saved to disk.

Development

uv run screen-capture-mcp   # runs the stdio server

Available Tools

2 tools
capture_screenA
Read-only

Take one screenshot of a monitor and return it as an image.

Args: monitor: "primary", "all" (every screen stitched together), or a monitor number (1 = leftmost). See list_monitors. max_dimension: Longest edge of the returned image in pixels (256-4096). The default balances legibility and token cost; raise it only when small text is unreadable. image_format: "jpeg" (smaller, default) or "png" (lossless, crisper small text).

ParametersJSON Schema
NameRequiredDescriptionDefault
monitorNoprimary
image_formatNojpeg
max_dimensionNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: 'all' stitches every screen together, and the default max_dimension is chosen to balance legibility against token cost. It omits permissions, error cases, and rate limits, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence states the action and return type, followed by a compact Args block with no filler. Every line supplies information an agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly states the return is an image, and all three parameters are fully explained despite zero schema coverage. It leaves minor gaps such as behavior on multi-monitor failure or permission requirements, but nothing that would cause a mis-call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: monitor accepts 'primary', 'all' (with stitch semantics), or a number where 1 = leftmost; max_dimension is bounded 256-4096 with a reason to change it; image_format lists jpeg vs png with a tradeoff for each. This adds real meaning that the bare schema (no enums, no descriptions) cannot convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Take one screenshot of a monitor and return it as an image') with the delivery format included. It also cross-references the sibling list_monitors as the way to discover monitor values, so an agent can distinguish the two tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditional guidance: raise max_dimension only when small text is unreadable, and choose png over jpeg when small text needs to be crisper. It does not state explicit exclusions (e.g. when not to screenshot vs use list_monitors), but for a single-purpose capture tool the parameter-level guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_monitorsA
Read-only

List connected monitors with their numbers, resolutions, positions, and which is primary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds only that the result includes per-monitor numbers, resolutions, positions, and the primary designation, which is useful context but discloses no behavior beyond annotations (no failure modes, no platform/auth notes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the action and then the payload. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description does not need to explain return values, yet it lists them anyway — harmless but slightly redundant. For a zero-param read-only tool whose safety profile is carried by annotations, the definition is otherwise sufficient to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and schema description coverage is 100%, so there is nothing for the description to clarify. Per the rubric, a parameterless tool earns the baseline of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (monitors) and even enumerates the returned attributes (numbers, resolutions, positions, primary flag). It is clearly distinguishable in action from the sibling capture_screen, but it never names or contrasts with that sibling explicitly, keeping it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement, no prerequisites, and no mention of the sibling capture_screen as an alternative. For a zero-parameter enumeration tool the intended use is strongly implied (call it when you need monitor topology), which lands at minimum-viable rather than absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.0
    • First observedcapture_screen
    • First observedlist_monitors

TDQS

A4.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have completely distinct purposes: list_monitors enumerates displays, while capture_screen takes a screenshot. There is no overlap or chance of misselection.

Naming Consistency5/5

Both names follow the same verb_noun snake_case convention (list_monitors, capture_screen), making the set highly predictable.

Tool Count4/5

Two tools is on the lean side, but for a tightly scoped screen-capture server they cover the essential list-then-capture workflow. A minor addition could enrich it, but nothing feels extraneous.

Completeness4/5

The core lifecycle of discovering monitors and capturing them is covered, with thoughtful options for monitor selection, sizing, and format. Gaps remain around region/window capture or recording, but the stated purpose is well served.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables taking screenshots of web pages with support for multiple devices (desktop, mobile, tablet), custom dimensions, full-page capture, and various image formats. Built with Playwright for reliable web page rendering and screenshot generation.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to capture and analyze screen content across multi-monitor setups with smart image optimization. Provides screenshot capabilities and detailed monitor information for visual debugging, UI analysis, and desktop assistance.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables capturing screenshots of all connected monitors with automatic JPEG compression and multi-platform support including WSL environments. Supports quality adjustment and image resizing through simple natural language commands.
    0
    ISC