MCP Tools

Heretic Lazy Shot exposes every core action through a built-in Model Context Protocol server. Any MCP-compatible agent can capture, OCR, pin markers and open the beautify compositor without a mouse.

Keyword hygiene. Every capture requires a short descriptive keyword like chrome-settings or login-page. Keywords collide → auto-suffix (login-pagelogin-page2). Always surface the returned keyword back to the user.

Capture

ToolWhen to use
capture_displayWhole monitor
capture_regionPixel rectangle on a display
capture_windowSpecific app by title / process fuzzy match (preferred)
capture_active_windowCurrently focused window — risky from an agent (may grab the agent's own terminal)
capture_tracked_windowPick from the recently-active window stack (needs windowTracker flag)

Examples

// capture_window — specific app
{ "query": "Chrome", "keyword": "chrome-settings" }
// capture_region — pixel rectangle on display 0
{ "x": 100, "y": 200, "width": 800, "height": 600, "keyword": "header-crop" }
// capture_display — full monitor 0
{ "display": 0, "keyword": "full-desktop" }

Discovery & listing

ToolPurpose
list_displaysConnected monitors + geometry
list_tracked_windowsRecently active windows — call before capture_tracked_window
list_screenshotsPaginate gallery; filter by status / type / sort
search_screenshotsQuery filename, keyword, metadata — with date range and type
get_screenshotFull metadata for one shot (by id or keyword)
get_app_statusApp version, MCP port, feature flags
list_ocr_languagesAvailable / installed OCR language packs
list_marker_presets / search_marker_presets / get_marker_presetSaved marker overlays
// search_screenshots
{ "query": "dashboard", "date_from": "2026-04-01", "type": "window" }

Capture type values: region | window | display | beautify | markers.

Actions on an existing screenshot

ToolPurpose
assign_keywordRename / tag — call right after capture if you want a stable name
edit_screenshotOpen in the Beautify compositor. edit_existing: true overwrites; default creates a copy
delete_screenshotSoft delete
open_screenshotOpen in the OS viewer (Preview on macOS)
show_windowShow or hide the lazy-shot app window itself
// rename after capture
{ "id": "chrome-settings", "keyword": "chrome-settings-dark" }

// open in compositor (creates a copy by default)
{ "id": "chrome-settings" }

Markers — add_markers

Overlay numbered or labelled pins. Provide explicit markers or reference a saved preset.

{
  "screenshot_id": "chrome-settings",
  "keyword": "chrome-settings-annotated",
  "markers": [
    { "x": 120, "y": 80,  "label": "1", "color": "#FF0000", "size": 32 },
    { "x": 340, "y": 200, "label": "2", "color": "#00AA00" }
  ]
}

For reusable overlays, save a preset in the app and call by name via get_marker_preset.

OCR

Two entry points:

  • ocr_screenshot — run OCR on a gallery item (by id or keyword)
  • ocr_image_path — run OCR on any file inside the screenshots / app-data directory

Parameters that matter:

ParamValuesNotes
formattext · metadata · text_and_metadatametadata returns per-word boxes + confidence
variantfast · bestUse best only when fast garbles the output
lange.g. eng, rus, eng+rusNon-installed packs auto-download (~4 MB each) on first call
{ "id": "login-page", "lang": "eng+rus", "format": "text_and_metadata" }

Response shape

Capture tools return a normalised object so agents can chain them:

{
  "id": "chrome-active-view-222",
  "keyword": "chrome-active-view",
  "path": "/Users/you/Pictures/lazy-shot/chrome-active-view-222.png",
  "width": 2880,
  "height": 1800,
  "type": "window"
}

Chain capture_windowadd_markersedit_screenshotocr_screenshot using the id or keyword from each step.

Prompt recipes

"Beautify the active Chrome tab"

Capture the Chrome window with keyword "chrome-active-view",
then open it in the beautify editor.

Under the hood: capture_window({ query: "Chrome", keyword: "chrome-active-view" })edit_screenshot({ id: "chrome-active-view" }).

"Capture a bug and pin three markers"

Capture the region x=0 y=0 w=1400 h=900 on display 0 with keyword "bug-42".
Pin three numbered markers at (120,80), (340,200) and (540,420).
Save the result as "bug-42-annotated" and open it.

"OCR the login page in English + Russian"

Capture the current Chrome window as "login-page", then OCR it with
lang=eng+rus and format=text_and_metadata. Return the recognised text.

"Find every dashboard shot from April"

Search screenshots: query="dashboard", type="window",
date_from="2026-04-01". Return ids and paths.

"Re-shoot using the tracked window stack"

List tracked windows. If Slack is in the list, run capture_tracked_window
on it with keyword "slack-thread". Otherwise capture Slack via capture_window.

Safety

  • All tools run locally — no cloud calls, no network egress
  • capture_active_window is risky from an agent (it may capture the agent's own terminal) — prefer capture_window with an explicit query
  • Keyword collisions auto-suffix (rabbitrabbit2) — use the returned keyword in follow-up calls
  • Non-installed OCR language packs auto-download (~4 MB each) on first call

See integrations for how to wire Claude Desktop, Claude Code, Cursor and Copilot to this server.