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
keywordlikechrome-settingsorlogin-page. Keywords collide → auto-suffix (login-page→login-page2). Always surface the returned keyword back to the user.
Capture
| Tool | When to use |
|---|---|
capture_display | Whole monitor |
capture_region | Pixel rectangle on a display |
capture_window | Specific app by title / process fuzzy match (preferred) |
capture_active_window | Currently focused window — risky from an agent (may grab the agent's own terminal) |
capture_tracked_window | Pick 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
| Tool | Purpose |
|---|---|
list_displays | Connected monitors + geometry |
list_tracked_windows | Recently active windows — call before capture_tracked_window |
list_screenshots | Paginate gallery; filter by status / type / sort |
search_screenshots | Query filename, keyword, metadata — with date range and type |
get_screenshot | Full metadata for one shot (by id or keyword) |
get_app_status | App version, MCP port, feature flags |
list_ocr_languages | Available / installed OCR language packs |
list_marker_presets / search_marker_presets / get_marker_preset | Saved 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
| Tool | Purpose |
|---|---|
assign_keyword | Rename / tag — call right after capture if you want a stable name |
edit_screenshot | Open in the Beautify compositor. edit_existing: true overwrites; default creates a copy |
delete_screenshot | Soft delete |
open_screenshot | Open in the OS viewer (Preview on macOS) |
show_window | Show 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:
| Param | Values | Notes |
|---|---|---|
format | text · metadata · text_and_metadata | metadata returns per-word boxes + confidence |
variant | fast · best | Use best only when fast garbles the output |
lang | e.g. eng, rus, eng+rus | Non-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_window → add_markers → edit_screenshot → ocr_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_windowis risky from an agent (it may capture the agent's own terminal) — prefercapture_windowwith an explicitquery- Keyword collisions auto-suffix (
rabbit→rabbit2) — 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.