Skip to main content
Glama

Screenshot Capture

screenshot_capture
Destructive

Captures a single frame of a display, window, or region and writes it to a PNG file (a temp file, or output_path); the macOS screen-capture indicator may show. Returns {path, resolution (PIXELS), scale_factor, display_id} — scale_factor is the backing scale of the display that was ACTUALLY captured (the same value list_displays reports for that display_id, by construction: both read one function), so pixels = points x scale_factor when converting a coordinate from the image to ui_click. If the display could not be determined you get scale_factor_unknown instead of a guess; resolution is always there, so you can derive the ratio yourself. Requires Screen Recording permission; without it returns an explicit permission_required, never a blank image.

Input Schema

NameRequiredDescriptionDefault
targetYesWhat to capture. Required: {kind: "display"|"window"|"window_title"|"region"} plus display_id (see list_displays), window_id (see list_windows), title, or region {x,y,w,h} in global points.
output_pathNoWhere to write the PNG (default: temp file). Missing parent folders are created.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / target / description
      Added value: +"What to capture. Required: {kind: \"display\"|\"window\"|\"window_title\"|\"region\"} plus display_id (see list_displays), window_id (see list_windows), title, or region {x,y,w,h} in global points."
    • changedInput schema / properties / target / properties / kind / enum
      Previous value: -[
      -  "display",
      -  "window",
      -  "region"
      -]New value: +[
      +  "display",
      +  "window",
      +  "window_title",
      +  "region"
      +]
    • addedInput schema / properties / target / properties / title
      Added value: +{
      +  "description": "Exact window title to capture (kind:\"window_title\"). Enumerates ALL windows directly — including overlays/panels like Notification Center that list_windows hides unless include_overlays:true. If more than one window has this title, the frontmost one is captured and the response reports matched_windows > 1.",
      +  "type": "string"
      +}
  3. Changed3 schema fields changed
    • removedInput schema / properties / target / description
      Removed value: -"What to capture. Required: {kind: \"display\"|\"window\"|\"window_title\"|\"region\"} plus display_id (see list_displays), window_id (see list_windows), title, or region {x,y,w,h} in global points."
    • changedInput schema / properties / target / properties / kind / enum
      Previous value: -[
      -  "display",
      -  "window",
      -  "window_title",
      -  "region"
      -]New value: +[
      +  "display",
      +  "window",
      +  "region"
      +]
    • removedInput schema / properties / target / properties / title
      Removed value: -{
      -  "description": "Exact window title to capture (kind:\"window_title\"). Enumerates ALL windows directly — including overlays/panels like Notification Center that list_windows hides unless include_overlays:true. If more than one window has this title, the frontmost one is captured and the response reports matched_windows > 1.",
      -  "type": "string"
      -}
  4. Changed3 schema fields changed
    • changedInput schema / properties / target / description
      Previous value: -"What to capture. Required: {kind: \"display\"|\"window\"|\"region\"} plus display_id (see list_displays), window_id (see list_windows), or region {x,y,w,h} in global points."New value: +"What to capture. Required: {kind: \"display\"|\"window\"|\"window_title\"|\"region\"} plus display_id (see list_displays), window_id (see list_windows), title, or region {x,y,w,h} in global points."
    • changedInput schema / properties / target / properties / kind / enum
      Previous value: -[
      -  "display",
      -  "window",
      -  "region"
      -]New value: +[
      +  "display",
      +  "window",
      +  "window_title",
      +  "region"
      +]
    • addedInput schema / properties / target / properties / title
      Added value: +{
      +  "description": "Exact window title to capture (kind:\"window_title\"). Enumerates ALL windows directly — including overlays/panels like Notification Center that list_windows hides unless include_overlays:true. If more than one window has this title, the frontmost one is captured and the response reports matched_windows > 1.",
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / target / description
      Added value: +"What to capture. Required: {kind: \"display\"|\"window\"|\"region\"} plus display_id (see list_displays), window_id (see list_windows), or region {x,y,w,h} in global points."
  6. Changed1 schema field changed
    • changedInput schema / properties / output_path / description
      Previous value: -"Where to write the PNG (default: temp file)."New value: +"Where to write the PNG (default: temp file). Missing parent folders are created."
  7. Added

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses a filesystem write of a PNG, the possible macOS screen-capture indicator, the Screen Recording permission requirement with an explicit permission_required failure (never a blank image), and the honest degradation path (scale_factor_unknown instead of a guess). Consistent with readOnlyHint=false / destructiveHint=true since it writes a file.

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

Conciseness3/5

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

Purpose is front-loaded in the first clause, which is good, but the single dense paragraph spends several sentences on return-value semantics (resolution, scale_factor provenance, 'by construction: both read one function') that an output schema already exists to convey. The information is accurate but partly redundant and hard to scan.

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

Completeness5/5

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

For a mutating capture tool with nested parameters, it covers what is captured, where output goes, permission failure mode, and ambiguity handling (matched_windows > 1). With an output schema present, it needs no further return-value detail.

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?

Schema coverage is 100%, so baseline is 3, but the description adds cross-references the schema lacks: display_id maps to list_displays, window_id to list_windows, and the points-vs-pixels relationship relevant to interpreting the region coordinates. The per-kind enum behavior is already covered in the schema, so this is an incremental rather than decisive gain.

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?

Specific verb + resource + scope: 'Captures a single frame of a display, window, or region and writes it to a PNG file'. It enumerates the four capture kinds and distinguishes itself from siblings like web_screenshot by being OS-level (display/window/region) and from screen_record_start by capturing one frame.

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?

It routes the agent to the right prerequisite tools ('see list_displays', 'see list_windows') and explains the downstream use case (converting image coordinates for ui_click). It does not explicitly say when to prefer web_screenshot over this tool, so no exclusions are stated.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources