---
title: "How to Give Claude Code Screenshots on macOS"
description: "Claude Code can read your screen if you give it the right context. Two ways on macOS: paste an annotated capture, or let it capture on its own over MCP. Setup, limits, and when to use each."
date: 2026-07-09
updated: 2026-08-09
canonical: https://screentack.com/blog/give-claude-code-screenshots-macos
---

# How to Give Claude Code Screenshots on macOS

Claude Code is very good at reasoning about code it can read. It is not, by default, good at knowing what that code *looks like* when it runs — because it cannot see your screen. The bug is on the screen; the agent is in the terminal.

There are two ways to close that gap on macOS. One is a paste. The other lets Claude Code take the screenshot itself.

## Why the obvious approach underperforms

The obvious approach is to screenshot the window and paste it in. That works, and for a one-off it is fine. But it runs into a trade-off that shows up immediately:

- **Screenshot the whole screen** and the signal is diluted. The model sees your editor, your browser, three panels of chrome, and has to work out which pixel you meant.
- **Zoom into the bug** and you lose the context. Now the model can see the misaligned button but not that it sits inside a centred column that is itself too narrow.

You end up describing in words what the picture was supposed to convey — *"no, the blue one, top-right, inside the card"* — which is exactly the round-trip you were trying to avoid. That churn has a real cost, in both patience and tokens: see [why AI coding agents burn tokens on visual bugs](/blog/why-ai-coding-agents-burn-tokens-on-visual-bugs).

## Option A — paste an annotated capture

Instead of one image, send three things at once: the full screenshot, a crop of each region you care about, and a manifest saying where each region sits.

With Screentack, that is one hotkey. Press it, drag a box over each thing that is wrong, type a short label, and submit. The label matters more than it looks — it is not a note to yourself, it is **the instruction the agent reads**. "misaligned button" and "this padding is wrong on mobile" produce different fixes.

What lands in your Claude Code session is a single paste containing the wide shot, the labelled crops in order, and a `SESSION.md` manifest with each region's label and coordinates. The agent no longer has to guess which element you meant, because you named it.

## Option B — let Claude Code capture on its own

Pasting still means *you* are the one taking screenshots. In an iteration loop — change the code, look, change it again — that gets old fast, and the agent is stuck waiting on you between every round.

Registering Screentack as an MCP server flips that around. Claude Code gets tools it can call itself:

```
claude mcp add --scope user screentack -- /path/to/screentack --mcp
```

That is the stdio transport, and it is the one to start with — it ships with the app, so there is nothing else to run or configure. Point it at the `screentack` binary inside the installed app and you are done.

Once connected, the agent can list your windows, capture a specific one, zoom into part of it for readable text, or pull text out of a region with on-device OCR — without you touching anything. It writes a change, looks at the result, and corrects itself.

There is also an HTTP transport if you want an always-on setup where the app and the agent share live state. It needs the app running and a bearer token, so it is the second thing to try, not the first.

## The limit worth knowing about

Tools that return images are not free. As of August 2026, Claude Code's MCP documentation notes that image-returning tools are subject to `MAX_MCP_OUTPUT_TOKENS`, which you can configure.

The practical consequence: **prefer a region crop to a full-resolution display capture.** A 6K screenshot of your entire desktop is mostly wallpaper and window chrome, and you are paying for all of it. Capturing the one window — or better, one region of it — keeps the payload proportional to the question.

## Which one to use

Use the **paste** when you have a specific thing to point at and you want an answer about it. It is faster than explaining setup, and the labels do the disambiguating.

Use **MCP** when the agent needs to check its own work — anything where it will want to look more than once. That is where not being in the loop yourself actually saves time.

Most people end up using both, and the reason is simple: they are answers to different questions. One is "look at this." The other is "watch what you're doing."

For the general version of this argument across agents, see [how to give your AI coding agent visual context](/blog/give-your-ai-coding-agent-visual-context). For the loop where the agent draws its understanding back onto your screen before it writes code, see [bidirectional visual feedback for AI coding agents](/blog/bidirectional-visual-feedback-for-ai-coding-agents).

> Stop describing your screen to Claude Code. [Download Screentack](/#waitlist) — a free 7-day trial, then $29 once.
