Capture App Screenshots for AI Agents
A privacy-first, macOS-only MCP server that lets AI agents screenshot pre-approved application windows for debugging.
Why it matters
Enable AI agents to securely capture screenshots of pre-approved macOS application windows, providing visual context for development and debugging without compromising privacy.
Outcomes
What it gets done
Capture screenshots of specific application windows in the background.
Manage a window approval system to control accessible applications.
Ensure screenshots are deleted immediately after use for enhanced privacy.
Configure JPEG compression limits for screenshot payloads.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-screeny | bash Capabilities
Tools your agent gets
Displays all approved application windows available for screenshot capture
Creates a screenshot of a specific window by its ID in the background without changing window focus
Overview
Screeny MCP Server
A macOS-only MCP server that captures screenshots of specific, pre-approved application windows for AI agents, with no external network connections. Use it when an AI agent needs scoped visual context on macOS; not for unrestricted screen recording, and each window must be explicitly approved first.
What it does
Screeny is a privacy-first, macOS-only MCP server that enables AI agents to capture screenshots of pre-approved application windows, giving them secure visual context for development and debugging tasks. Unlike other screenshot tools, it requires explicit user approval for each window before it can ever be captured - only windows approved during setup are accessible, capture happens in the background without stealing window focus or interrupting your workflow, and Screeny makes no external connections: everything runs on-device and screenshots are deleted immediately after use.
It exposes two tools. listWindows lists only the windows you've already approved, so an agent can't discover or request access to windows outside that allowlist. takeScreenshot captures a specific approved window by ID - it works in the background (no need to bring the window to front, though minimized windows can't be captured), returns actual pixel data rather than OCR or text extraction, and always JPEG-compresses the result with a configurable base64 payload cap (default Medium/250KB, clamped between 100-900KB). A screeny://info resource exposes server information and configuration details.
When to use - and when NOT to
Use it when an AI coding agent needs real visual context - for example, iterating on iOS simulator UI or debugging a rendering issue - without giving it blanket, unapproved access to your entire screen. The window-approval model is the point: it is designed for cautious, scoped screen access, not general screen recording.
It only runs on macOS and requires Python 3.10+. Larger screenshot size presets (Large/750KB, XL) can trigger MCP client context summarization loops with repeated screenshot calls in hosts like Cursor - if that happens, lower the size preset or use a model with a larger context window.
Capabilities
Two tools (listWindows, takeScreenshot) plus a screeny://info resource. Screenshot size presets range from Tiny (50KB, most stable, blurs fine text) through Small (100KB, recommended default), Medium (250KB), Large (500KB), to XL (750KB, most detail but most error-prone) - configurable via ~/.screeny/config.json's max_b64_kb or the SCREENY_MAX_B64_KB environment variable.
How to install
Install with pipx or run via uvx, then configure your MCP host:
pipx install mcp-server-screeny
After adding the server to your Claude Desktop or Cursor MCP configuration, grant Screen Capture permission to both your terminal application and your MCP host under System Settings then Privacy & Security then Screen & System Audio Recording, then run interactive window approval with mcp-server-screeny --setup (or --setup --allow-all to approve every current window). Approvals are saved to ~/.screeny/approved_windows.json.
Who it's for
macOS developers using AI coding agents like Claude or Cursor who want the agent to see actual screenshots of specific approved application windows - simulators, browsers, design tools - during debugging or iterative UI work, with explicit control over which windows are ever visible to the agent. The project is released under the MIT License.
Source README
Screeny MCP Server: Privacy first macOS Screenshots for AI Agents
A privacy-first, macOS-only MCP server that enables AI agents to capture screenshots of pre-approved application windows, providing secure visual context for development and debugging tasks.
๐ Privacy-First Design
Unlike other screenshot tools, Screeny requires explicit user approval for each window before it can be captured:
- Window approval system - Only pre-approved windows can be captured (approved during setup)
- User-controlled access - You decide exactly which windows are accessible
- Non-intrusive capture - Screenshots taken in background without changing window focus or interrupting your workflow
- No external connections - Screeny runs entirely on your device, screenshots are deleted immediately after use
Available Tools
listWindows- Lists all approved application windows available for screenshot capture.- Only shows user approved windows
takeScreenshot- Captures a screenshot of a specific window by its ID.- Captures windows in background - no need to bring window to front, but cannot capture minimized windows
- Provides actual pixel data - full-fidelity image, not OCR or text extraction
- JPEG compression with configurable cap - screenshots are always JPEG-compressed with a base64 payload cap (default preset: Medium / 250KB), configurable and clamped to 100-900KB
Resources
screeny://info- Server information and configuration details
Configuration
Claude Desktop
- Open Claude settings โ Developer โ Edit Config
- Add configuration
- Restart Claude Desktop after saving config
Using pipx
First install with: pipx install mcp-server-screeny
{
"mcpServers": {
"screeny": {
"command": "mcp-server-screeny",
"args": []
}
}
}
Note: If you get an
ENOENTerror, replace"mcp-server-screeny"with the full path to the executable (find it withwhich mcp-server-screenyin your terminal).
Using uvx
{
"mcpServers": {
"screeny": {
"command": "uvx",
"args": ["mcp-server-screeny"]
}
}
}
Note: If you get a "spawn uvx ENOENT" error, replace
"uvx"with the full path to uvx:which uvx # Find your uvx pathThen use that full path in the config (e.g.,
"/opt/homebrew/bin/uvx").
Cursor
- Open Cursor settings โ Tools & Integrations โ MCP Tools
- Add configuration
- Restart Cursor after saving config
Using pipx
First install with: pipx install mcp-server-screeny
{
"mcpServers": {
"screeny": {
"command": "mcp-server-screeny",
"args": []
}
}
}
Note: If you get an
ENOENTerror, replace"mcp-server-screeny"with the full path to the executable (find it withwhich mcp-server-screenyin your terminal).
Using uvx
{
"mcpServers": {
"screeny": {
"command": "uvx",
"args": ["mcp-server-screeny"]
}
}
}
Note: If you get a "spawn uvx ENOENT" error, replace
"uvx"with the full path to uvx:which uvx # Find your uvx pathThen use that full path in the config (e.g.,
"/opt/homebrew/bin/uvx").
Setup
1. Grant Screen Capture Permission (Required)
Important: Grant permission before running window approval.
Note: You need to grant Screen Capture permission to BOTH:
- Your Terminal application (Terminal.app, iTerm2, etc.) - Required for running setup (can be disabled after)
- Your MCP host (Claude Desktop, Cursor) - Required for taking screenshots
To add them:
- Open System Settings > Privacy & Security > Screen & System Audio Recording
- Click the "+" button
- Add your Terminal application AND your MCP host application
- Restart both applications after granting permissions
2. Window Approval (Required)
After configuring your MCP client above, approve which windows can be captured.
If using pipx
# Interactive approval
mcp-server-screeny --setup
# Auto-approve all current windows
mcp-server-screeny --setup --allow-all
If using uvx
# Interactive approval
uvx mcp-server-screeny --setup
# Auto-approve all current windows
uvx mcp-server-screeny --setup --allow-all
Approvals are saved to ~/.screeny/approved_windows.json. Re-run setup when you want to update the list of approved windows.
Advanced Options (Optional)
During setup, you can configure the screenshot size preset (affects stability and clarity):
- Tiny (50KB) - most stable; fine text will blur
- Small (100KB) - recommended default; balanced clarity and stability
- Medium (250KB) - more detail; may be slower and heavier
- Large (500KB) - high detail; may trigger client summarization
- XL (750KB) - maximum detail; most error-prone
Your choice is saved in ~/.screeny/config.json as max_b64_kb. You can also override via the SCREENY_MAX_B64_KB environment variable. The active cap is clamped to 100-900KB.
Security & Privacy
- Only user-approved windows can be captured
- All processing stays local on your machine
- Screenshots are temporary and deleted immediately after use
Troubleshooting
Permission Issues
# Test window detection and permissions
mcp-server-screeny --debug
# Re-run setup if windows changed
mcp-server-screeny --setup
Common Issues
"spawn uvx ENOENT" error
- Solution: Use the full path to uvx in your MCP config instead of just
"uvx" - Find path with:
which uvx - Example:
"/opt/homebrew/bin/uvx"or"/usr/local/bin/uvx"
"No approved windows found"
- Solution: Run
mcp-server-screeny --setupfirst (oruvx mcp-server-screeny --setupif using uvx)
"Screen Recording permission required" or "No windows found"
- Solution: Grant Screen Recording permission in System Settings > Privacy & Security > Screen & System Audio Recording
- Click "+" button and manually add your MCP host (Claude Desktop, Cursor, etc.)
- Restart your MCP host application after granting permissions
- Try running setup again after granting permissions
Requirements
- Python 3.10+
- macOS
- Screen Capture permission
FAQ
Common questions
Discussion
Questions & comments ยท 0
Sign In Sign in to leave a comment.