third-eye-mcp
v1.1.0
Published
Privacy-first screen capture and recording MCP server for AI coding agents
Downloads
221
Maintainers
Readme
Third Eye
Privacy-first screen capture and recording MCP server for AI coding agents.
Works with Claude Desktop, Cursor, Windsurf, Continue, and any MCP-compatible client.
Features
- Privacy First - 100% local, no cloud uploads, no telemetry
- Multi-Monitor - List and capture from any display
- Region Capture - Capture specific areas of your screen
- Screen Recording - Change-based keyframe capture with grid output
- Scheduled Recording - Burst capture at specific times (up to 10 min)
- Smart Delay - 5-second default delay to switch windows before capture
- Downscaling - Reduce image size to save tokens
- Freemium - 10 free captures/day, $10 for unlimited
Installation
Using npx (Recommended)
npx third-eye-mcpGlobal Install
npm install -g third-eye-mcpConfiguration
Claude Desktop
Add to your Claude Desktop config:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS/Linux: ~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"third-eye": {
"command": "npx",
"args": ["third-eye-mcp"]
}
}
}Claude Code CLI
claude mcp add third-eye "npx third-eye-mcp"Cursor
Add to your Cursor MCP settings (~/.cursor/mcp.json or via Settings > MCP):
{
"mcpServers": {
"third-eye": {
"command": "npx",
"args": ["third-eye-mcp"]
}
}
}Other MCP Clients (Windsurf, Continue, etc.)
Any MCP-compatible client can use Third Eye with the same configuration format. Add the server to your client's MCP configuration using npx third-eye-mcp as the command.
Available Tools
| Tool | Description |
|------|-------------|
| screen.list_displays | List all monitors with resolution, position, scale factor |
| screen.capture | Capture full screen with optional delay and downscaling |
| screen.capture_region | Capture a specific rectangular region |
| screen.latest | Get the most recent capture |
| screen.record | Record screen with change-based keyframe capture |
| screen.scheduled_record | Record with scheduled snapshot bursts |
| screen.get_frame | Retrieve full-resolution frame from a recording |
| screen.status | Check remaining captures and license status |
| screen.activate_license | Activate a license key for unlimited captures |
Usage Examples
Ask Claude:
- "Take a screenshot of my screen"
- "Capture the second monitor"
- "Screenshot the region at 100,100 with size 500x300"
- "Record my screen for 30 seconds"
- "Record the screen and show me what changed"
- "Get frame 5 from the recording"
- "How many captures do I have left?"
- "Activate my license: TEYE-XXXX-XXXX-XXXX"
Parameters
screen.capture
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| displayIndex | number | 0 | Display to capture (0-based) |
| max_width | number | - | Downscale if wider |
| delay | number | 5 | Seconds before capture (0-10) |
| instant | boolean | false | Skip delay if true |
screen.capture_region
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| x | number | Yes | X coordinate |
| y | number | Yes | Y coordinate |
| width | number | Yes | Width in pixels |
| height | number | Yes | Height in pixels |
| delay | number | No | Seconds before capture |
| instant | boolean | No | Skip delay if true |
screen.record
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| duration | number | 30 | Recording duration in seconds (1-120) |
| interval | number | 1.0 | Capture interval in seconds (0.25-10) |
| displayIndex | number | 0 | Display to record (0-based) |
| maxWidth | number | 1280 | Max width for full frames (320-1920) |
| changeThreshold | number | 2.0 | Min change % to keep frame (0-100) |
| maxFrames | number | 30 | Maximum frames to keep (5-100) |
| thumbnailWidth | number | 320 | Thumbnail width for grid (160-640) |
screen.scheduled_record
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| totalDuration | number | 60 | Total duration in seconds (10-600) |
| snapshots | array | required | List of snapshot burst configs |
| displayIndex | number | 0 | Display to record (0-based) |
| maxWidth | number | 1280 | Max width for full frames |
| thumbnailWidth | number | 320 | Thumbnail width for grid |
Snapshot Burst Config:
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| at | number | required | When to start burst (seconds from start) |
| count | number | 3 | Number of snapshots in burst (1-20) |
| interval | number | 1.0 | Time between snapshots (0.25-10) |
screen.get_frame
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| recordingId | string | Yes | Recording ID from screen.record response |
| frameIndex | number | No | Frame index to retrieve (0-based) |
| timestamp | number | No | Timestamp to find closest frame |
Note: Recordings are stored in memory for 5 minutes (max 5 recordings). Use screen.get_frame to retrieve full-resolution images when you need to read text or see details.
Pricing
| Tier | Captures | Price | |------|----------|-------| | Free | 10/day | $0 | | Unlimited | Unlimited | $10 one-time |
License
Proprietary - See LICENSE for terms.
Free tier: 10 captures/day. Unlimited: $10 one-time license.
Author
Kaossara Osseni - Grand Nasser Enterprises
