Screen Vision MCP Server
The Screen Vision MCP Server gives Claude the ability to see and analyze your screen, camera, and media files — all locally and on-demand.
Screen Capture & Analysis
Capture full screen, region, or window — Take screenshots with optional delay and multi-monitor support
List monitors — Show all connected displays and resolutions
Get active context — Retrieve current window, cursor, and monitor info without capturing an image
Understand screen — AI-powered analysis of what's on screen with optional custom prompts
Text Extraction (OCR)
Read screen text — Extract text from the screen or a specific region
Video & Real-Time Monitoring
Watch screen — Record and sample your screen over time with frame sampling and optional audio transcription
Analyze video — Extract keyframes and metadata from a local video file
Image Analysis
Analyze image — Process local image files (e.g., AirDropped photos or saved screenshots)
Phone Camera Integration
Pair via QR code — Connect your phone as a camera source
Capture camera — Grab the latest frame from a connected phone camera
Watch camera — Stream phone camera with scene detection and optional audio transcription
Phone status — Check the connection status of the phone camera
Security & Privacy
All captures are local and on-demand — nothing runs in the background
Work mode (
SCREEN_VISION_MODE=work) enables PII/PCI scanning, app deny-lists, call detection, rate limiting, and audit logging
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Screen Vision MCP Server Take a screenshot of my screen"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Screen Vision MCP Server
Give Claude Code the ability to see your screen
Screen Vision lets Claude capture screenshots, watch your screen in real-time with audio transcription, analyze video files, and read text via OCR. It runs locally as an MCP server — Claude sees what you see, when you ask.
Privacy & Security
All capture is local and on-demand — no background recording, no persistent process, no external transmission.
Screen Vision runs as a local MCP server (stdio transport). It only captures when Claude explicitly calls a tool in response to your request.
Captured images and transcriptions are sent only to your existing Claude Code session — the same endpoint all Claude Code traffic uses. No third-party services, no cloud storage.
The server does not run in the background between Claude Code sessions. It starts when Claude Code starts and stops when it stops.
No data is written to disk unless you explicitly ask Claude to save a file.
Related MCP server: sight-mcp
Quick Start
pip install screen-vision[ocr]Then add to your Claude Code MCP config (.mcp.json):
{
"mcpServers": {
"screen-vision": {
"command": "screen-vision-mcp"
}
}
}System deps for OCR and video:
brew install tesseract # Required for OCR (read_screen_text)
brew install ffmpeg # Required for video analysis (analyze_video)What You Can Say
"Take a screenshot of my screen" → capture_screen
"Capture the Chrome window" → capture_window
"Watch my screen for 1 minute" → watch_screen (with audio transcription)
"Analyze the video at ~/Downloads/demo.mp4" → analyze_video
"Read the text on my screen" → read_screen_text
"What window am I in?" → get_active_context (no screenshot)
"What's on my screen right now?" → understand_screen (AI analysis)
"Analyze this photo I AirDropped" → analyze_imageTools (14)
Tool | What it does | Needs |
| Full screen capture with delay + multi-monitor | — |
| Capture a specific rectangular area | — |
| Capture a window by title | — |
| List displays with resolutions | — |
| Window/cursor/monitor info (no image) | — |
| OCR text extraction from screen | tesseract |
| AI-powered screen analysis | Anthropic API key |
| Analyze a dropped/AirDropped image file | — |
| Watch screen with frame sampling + audio | ffmpeg (audio) |
| Extract keyframes from video files | ffmpeg |
| Grab latest frame from phone camera | — |
| Stream phone camera with scene detection + audio | — |
| Show QR code to connect phone camera | — |
| Check phone camera connection status | — |
Security
Screen Vision includes security controls for corporate environments:
PII/PCI scanning — Detects credit card numbers, SSNs, phone numbers, email addresses in OCR text
App deny-list — Blocks captures of Slack, Teams, Zoom, banking apps, password managers
Call detection — Blocks captures during active audio calls
Rate limits — 200 captures/session, 2s minimum interval, 5min max watch duration
Audit logs — All captures logged to
~/.screen-vision/audit.log
Set SCREEN_VISION_MODE=work to enable all security controls. Default mode is personal (no restrictions).
Dependencies
Core (always installed): mcp[cli], mss, Pillow, numpy, httpx
Extras (mix and match):
Extra | Install | What you get |
|
|
|
|
|
|
|
|
|
|
| All of the above |
Python 3.11+ required.
Development
pip install -e ".[ocr,test]"
pytest tests/ -v
ruff check src/Author
Alex Vicuna — github.com/avicuna
Contributing
Issues and PRs welcome: https://github.com/avicuna/screen-vision
Available Tools
14 toolsanalyze_imageA
Analyze a dropped image file (AirDrop, screenshot, saved photo).
Works in both work and personal modes. In work mode, security scanning is applied.
Args: file_path: Path to the image file to analyze prompt: Optional analysis prompt (reserved for future use)
Returns: JSON string with analyzed image data or error
Inputs: file_path (required), prompt. Returns: result
analyze_videoA
Analyze a local video file.
Args: file_path: Path to the video file start_time: Start time in seconds (default: 0) end_time: End time in seconds (default: None = entire video) max_frames: Maximum number of frames to extract (default: 20)
Returns: JSON string with extracted frames and metadata
Inputs: file_path (required), end_time, max_frames, start_time. Returns: result
capture_cameraA
Grab the latest frame from connected phone camera.
Only available in personal mode. Requires phone to be connected via show_pairing_qr() first.
Args: prompt: Optional prompt (reserved for future use)
Returns: JSON string with frame data or error
Inputs: prompt. Returns: result
capture_regionB
Capture a specific screen region.
Args: x: Left coordinate of the region y: Top coordinate of the region width: Width of the region height: Height of the region scale: Scale factor for resizing (default: 1.0)
Returns: JSON string with captured frame data or error
Inputs: x (required), y (required), width (required), height (required), +1 more. Returns: result
capture_screenA
Capture the full screen with optional delay for window switching.
Args: delay_seconds: Wait this many seconds before capturing (default: 3) monitor: Monitor index to capture (0 = all monitors, 1+ = specific monitor) scale: Scale factor for resizing (default: 0.5)
Returns: JSON string with captured frame data or error
Inputs: scale, monitor, delay_seconds. Returns: result
capture_windowB
Capture a specific window by title.
Args: window_title: Title of the window to capture scale: Scale factor for resizing (default: 0.5)
Returns: JSON string with captured frame data or error
Inputs: window_title (required), scale. Returns: result
get_active_contextB
Get lightweight context: window, cursor, monitors.
Returns: JSON string with context information
Inputs: no named parameters. Returns: result
list_monitorsB
List available monitors.
Returns: JSON string with monitor information
Inputs: no named parameters. Returns: result
phone_statusB
Check phone camera connection status.
Returns connection status, frame queue size, and server state.
Returns: JSON string with status information
Inputs: no named parameters. Returns: result
read_screen_textB
OCR the screen or a region.
Args: region: Optional region as "x,y,width,height" string
Returns: JSON string with extracted text
Inputs: region. Returns: result
show_pairing_qrA
Show QR code to connect phone camera. Scan with iPhone to start streaming.
Only available in personal mode. In work mode, use analyze_image() with AirDrop instead.
Returns: JSON string with QR code data and pairing instructions, or error
Inputs: no named parameters. Returns: result
understand_screenA
Understand what's on screen — like Google Lens for your desktop. Returns structured analysis: what app, what content, what's happening, actionable insights. Optionally provide a prompt for focused analysis: 'what error is this?' or 'explain this dashboard'.
Args: prompt: Optional custom prompt for focused analysis (default: "")
Returns: JSON string with understanding result, image, OCR text, and metadata
Inputs: prompt. Returns: result
watch_cameraA
Stream phone camera frames with scene detection and optional audio.
Only available in personal mode. Requires phone to be connected via show_pairing_qr() first. Collects frames over the specified duration, applies scene change detection to keep only keyframes, and optionally records and transcribes audio.
Args: duration_seconds: How long to collect frames (default: 30) include_audio: Whether to collect and transcribe audio (default: True) max_frames: Maximum number of keyframes to keep (default: 20)
Returns: JSON string with keyframes, transcript, and metadata
Inputs: max_frames, include_audio, duration_seconds. Returns: result
watch_screenA
Watch the screen for a duration with frame sampling and optional audio.
Args: duration_seconds: How long to watch (default: 60) interval_seconds: Time between frame captures (default: 4.0) include_audio: Whether to record and transcribe audio (default: True) max_frames: Maximum number of keyframes to keep (default: 30)
Returns: JSON string with keyframes, transcript, and metadata
Inputs: max_frames, include_audio, duration_seconds, interval_seconds. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct source or operation: capture tools differentiate by screen/window/region/camera, watch tools add duration, analyze tools handle files, and informational tools cover context and status. No two tools serve the same purpose.
Most tools follow a verb_noun pattern (e.g., analyze_image, capture_screen). One outlier is 'phone_status', which uses a noun prefix instead of a verb, but the rest are consistent and clear.
14 tools is well-scoped for a screen vision server, covering capture, analysis, OCR, context, camera streaming, and video analysis without feeling bloated or sparse.
The tool set covers core workflows: capture, analysis, OCR, context, and camera integration. Minor gaps like listing windows or managing streams are present but not critical for most use cases.
Maintenance
Related MCP Connectors
Hosted Screenshots MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for screen recording and screenshots, bridging Claude Code with Chrome extensions.MIT
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that brings AI vision capabilities to Claude Desktop. Analyze images and videos using OpenAI GPT-4o, Claude, or any compatible vision API.31 npmMIT
- FlicenseAqualityDmaintenanceAn MCP server that captures screenshots of URLs or local app windows and analyzes them with a local Ollama vision model, enabling Claude to visually inspect web pages and desktop applications without sending image data externally.3-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that gives Claude the ability to watch any desktop window, detecting changes and providing compact image bundles for Claude's vision, enabling real-time screen-watching without API costs.-