Why an agent needs a screenshot tool
A coding agent can read your files, but it cannot see what your app actually rendered, which error dialog popped up, or what a user would see on the second monitor. Describing it by hand is slow and loses detail. With the Pointframe MCP server, the agent captures the screen itself, looks at the image, and keeps a verifiable PNG on disk with its SHA-256 hash, monitor geometry, and DPI.
What the agent can do
- See a monitor or a window.
list_displaysandlist_windowsfind the target;capture_monitorandcapture_windowsave a PNG and return it inline, downscaled to at most 1600 px, so the model sees it directly. A monitor capture can be limited to a sub-region. - Read on-screen text.
read_text_from_monitorandread_text_from_windowrun Windows OCR on the capture, which is useful for error dialogs, logs, and terminals that the agent cannot otherwise read. - Find earlier screenshots.
search_capturessearches saved screenshots by filename or by the text inside them, andget_capturereturns one with its metadata and a preview. - Record a reproduction.
start_recording,get_recording_status, andstop_recordingproduce an MP4 of a monitor. Pass rectangles to pixelate passwords, tokens, or customer data before the frames are encoded.
Set it up
Claude Desktop. Download Pointframe.Mcp-win-x64.mcpb and open it. Claude Desktop installs it as an extension.
VS Code. Install the Pointframe CLI from the release ZIP (extract it and run the first command below from that folder), then let it download, verify, configure, and test the MCP server:
.\Pointframe.Cli.exe install
pointframe mcp install --client vscode
pointframe mcp doctor --client vscode
The installer preserves your other MCP servers, creates a backup before its first configuration change, and leaves desktop-testing tools disabled. Use pointframe mcp install --client vscode --dry-run to validate the package and proposed change without installing it.
Claude Code, Codex, Cursor, and VS Code run the server from a folder on disk. Download and verify the latest bundle once (a .mcpb is a ZIP archive):
$dir = "$env:LOCALAPPDATA\Programs\Pointframe.Mcp"
$mcpb = "$env:TEMP\Pointframe.Mcp-win-x64.mcpb"
$release = 'https://github.com/dimitar-radenkov/Pointframe/releases/latest/download'
Invoke-WebRequest "$release/Pointframe.Mcp-win-x64.mcpb" -OutFile $mcpb
Invoke-WebRequest "$release/Pointframe.Mcp-win-x64.mcpb.sha256" -OutFile "$mcpb.sha256"
$expected = ((Get-Content "$mcpb.sha256" -Raw).Trim() -split '\s+')[0]
$actual = (Get-FileHash $mcpb -Algorithm SHA256).Hash
if ($actual -ne $expected) { throw 'MCPB SHA-256 verification failed.' }
New-Item -ItemType Directory -Force $dir | Out-Null
tar -xf $mcpb -C $dir
Stop the server in your client before updating, because Windows locks a running Pointframe.Mcp.exe. Then register it. For Claude Code:
claude mcp add --scope user pointframe -- "$env:LOCALAPPDATA\Programs\Pointframe.Mcp\Pointframe.Mcp.exe"
claude mcp add refuses a name that already exists; to change the path, run claude mcp remove --scope user pointframe first. For Codex (running it again is safe):
codex mcp add pointframe -- "$env:LOCALAPPDATA\Programs\Pointframe.Mcp\Pointframe.Mcp.exe"
For VS Code, add it to .vscode/mcp.json or your user MCP configuration, using your own user name in the path:
{
"servers": {
"pointframe": {
"type": "stdio",
"command": "C:\\Users\\<you>\\AppData\\Local\\Programs\\Pointframe.Mcp\\Pointframe.Mcp.exe"
}
}
}
For Cursor and other clients that use the mcpServers format, such as %USERPROFILE%\.cursor\mcp.json:
{
"mcpServers": {
"pointframe": {
"command": "C:\\Users\\<you>\\AppData\\Local\\Programs\\Pointframe.Mcp\\Pointframe.Mcp.exe"
}
}
}
In VS Code you can also run MCP: Add Server from the Command Palette, choose Command (stdio), and enter the path to Pointframe.Mcp.exe. To check the connection, ask the agent to list your displays; it should call list_displays. The pointframe://server-info resource reports the server version and whether ffmpeg was found for recording. The server is also listed in the official MCP Registry as io.github.dimitar-radenkov/pointframe-mcp.
All eleven tools
Discovery: list_displays, list_windows. Capture: capture_monitor, capture_window. OCR: read_text_from_monitor, read_text_from_window. Saved captures: search_captures, get_capture. Recording: start_recording, get_recording_status, stop_recording. The full reference is in the README, and a plain-text summary for agents is in llms.txt.
Things to ask your agent
- "Take a screenshot of my second monitor and tell me why the layout looks broken."
- "Read the error dialog in the installer window and suggest a fix."
- "Capture the app before and after your change so I can compare them."
- "Find the screenshot from yesterday that mentions 'timeout'."
- "Record my main monitor while I reproduce the bug, and blur the token field."
Local and observable by default
The server runs as a local stdio process in your own Windows session and writes captures under %LOCALAPPDATA%\Pointframe. The capture, OCR, and recording tools only observe; they never click or type. Tools that drive the desktop exist for automated UI testing, but they stay off unless you enable them with a local policy file. A capture tool returns the image to your MCP client unless you pass includeImage: false. Official builds of the MCP server and the CLI send one anonymous event per tool call or command: the tool or command name, whether it succeeded, a coarse duration bucket, cli or mcp, the MCP client type, and the version. They never send arguments, paths, screenshots, text, error messages, or any user, machine, or install identifier, and Application Insights masks IP addresses. Opt out with POINTFRAME_TELEMETRY_OPTOUT=1 or DO_NOT_TRACK=1; source builds send nothing. See the privacy policy for the details and the desktop app's separate telemetry.
Prefer a script? Use the CLI
The same capture, OCR, and recording engine is available as a standalone command-line tool that prints single-line JSON with stable error codes, ready for scripts and CI jobs.
.\Pointframe.Cli.exe install
.\Pointframe.Cli.exe capture --monitor '\\.\DISPLAY1' --output .\shot.png
.\Pointframe.Cli.exe ocr-window --window-id 12345678
Give your agent eyes on Windows
Free and open source under the MIT license. Windows 10 and 11, interactive desktop session required.
Frequently asked questions
Can Claude see my screen on Windows?
Yes, with an MCP server that captures the screen. Pointframe's capture tools return the screenshot as an image the model can look at, along with the saved PNG and its metadata.
Does the MCP server send my screenshots anywhere?
The server itself runs locally and writes captures to your own disk. A screenshot reaches the model only when a capture tool returns it to your MCP client, and you can pass includeImage: false to return metadata only.
Does it need the Pointframe desktop app?
No. The MCP server is a standalone, self-contained executable. It does not need the Pointframe tray app or the .NET runtime, and the bundle includes ffmpeg for recording.
Can the agent click or type on my desktop?
Not by default. The capture, OCR, and recording tools only observe. Desktop-testing tools that send input are a separate, opt-in mode that stays off unless you enable it with a local policy file.