---
title: "MCP Tools — Heretic Lazy Shot"
description: "Full reference of every MCP tool exposed by Heretic Lazy Shot. Capture, OCR, markers, beautify and search — drive the app from Claude, Cursor or any MCP-compatible agent."
canonical: https://giglabo.com/heretic/applications/heretic-lazy-shot/docs/mcp-tools
locale: en
---

# MCP Tools — Heretic Lazy Shot

> Markdown twin of https://giglabo.com/heretic/applications/heretic-lazy-shot/docs/mcp-tools
> Fetch this instead of the HTML page: same content, a fraction of the bytes.
> Site structure and the full page list for agents: https://giglabo.com/llms.txt

Full reference of every MCP tool exposed by Heretic Lazy Shot. Capture, OCR, markers, beautify and search — drive the app from Claude, Cursor or any MCP-compatible agent.

## 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-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

```json
// capture_window — specific app
{ "query": "Chrome", "keyword": "chrome-settings" }
```

```json
// capture_region — pixel rectangle on display 0
{ "x": 100, "y": 200, "width": 800, "height": 600, "keyword": "header-crop" }
```

```json
// 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 |

```json
// 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 |

```json
// 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.

```json
{
  "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 |

```json
{ "id": "login-page", "lang": "eng+rus", "format": "text_and_metadata" }
```

## Response shape

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

```json
{
  "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_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 (`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](https://giglabo.com/heretic/applications/heretic-lazy-shot/docs/integrations) for how to wire Claude Desktop, Claude Code, Cursor and Copilot to this server.

## Related

- HTML version of this page: https://giglabo.com/heretic/applications/heretic-lazy-shot/docs/mcp-tools
- Site map for agents: https://giglabo.com/llms.txt
