third-eye-mcp

Privacy-first screen capture MCP server for AI coding agents. Let Claude, Cursor, or any MCP-compatible AI see your screen with full control.

Third Eye Logo

PyPI Python Versions Downloads License

Third Eye MCP (Python)

A free, unlimited screen capture and recording MCP server for Python. Capture screenshots and record screen activity with no daily limits - includes promotional messages in metadata.

Features

  • Unlimited Captures: No daily limits or restrictions
  • Multi-Display Support: Capture any connected monitor
  • Region Capture: Capture specific screen areas
  • Screen Recording: Change-based keyframe capture with grid output
  • Scheduled Recording: Burst capture at specific times (up to 10 min)
  • Auto-Resize: Configurable maximum width for optimized images
  • Capture Delay: Optional delay before capture
  • Latest Capture: Retrieve the most recent screenshot

Installation

pip install third-eye-mcp

Or install from source:

git clone https://github.com/Osseni94/third-eye-mcp.git
cd third-eye-mcp
pip install -e .

Usage

With Claude Desktop

Add to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "third-eye": {
      "command": "python",
      "args": ["-m", "third_eye_mcp"]
    }
  }
}

With MCP Inspector

npx @modelcontextprotocol/inspector python -m third_eye_mcp

Available Tools

screen.list_displays

List all available displays/monitors.

Input: None

Output:

{
  "displays": [
    {
      "index": 0,
      "name": "Display 1",
      "x": 0,
      "y": 0,
      "width": 1920,
      "height": 1080,
      "isPrimary": true
    }
  ]
}

screen.capture

Capture a full display screenshot.

Input:

ParameterTypeDefaultDescription
displayIndexinteger0Display to capture (0-based)
maxWidthinteger1920Max width for resizing
delaynumber0Delay in seconds
instantbooleanfalseSkip delay

Output: Base64 PNG image + metadata JSON with sponsored field

screen.capture_region

Capture a specific region of the screen.

Input:

ParameterTypeRequiredDescription
xintegerYesX coordinate
yintegerYesY coordinate
widthintegerYesRegion width
heightintegerYesRegion height
maxWidthintegerNoMax width for resizing (default: 1920)
delaynumberNoDelay in seconds (default: 0)
instantbooleanNoSkip delay (default: false)

Output: Base64 PNG image + metadata JSON with sponsored field

screen.latest

Get the most recently captured screenshot.

Input: None

Output: Last captured image + metadata JSON with sponsored field


Screen Recording Tools

screen.record

Record screen with change-based keyframe capture. Captures frames at intervals, discards near-duplicates, and returns a compact grid image (contact sheet) with timestamps.

Input:

ParameterTypeDefaultDescription
durationinteger30Recording duration in seconds (1-120)
intervalnumber1.0Capture interval in seconds (0.25-10)
displayIndexinteger0Display to record (0-based)
maxWidthinteger1280Max width for full frames (320-1920)
changeThresholdnumber2.0Min change % to keep frame (0-100)
maxFramesinteger30Maximum frames to keep (5-100)
thumbnailWidthinteger320Thumbnail width for grid (160-640)

Output: Grid image (contact sheet) + metadata JSON + frame summaries

Example Response:

{
  "metadata": {
    "recordingId": "abc12345",
    "duration": 30.5,
    "framesCaptured": 31,
    "framesKept": 12,
    "framesDiscarded": 19,
    "sponsored": "..."
  },
  "frames": [
    {"index": 0, "timestamp": 0.0, "changeScore": 100.0},
    {"index": 1, "timestamp": 2.0, "changeScore": 15.3}
  ]
}

screen.scheduled_record

Record screen with scheduled snapshot bursts at specific times. Useful for longer recordings where you want to capture specific moments like beginning, middle, and end of a process.

Input:

ParameterTypeDefaultDescription
totalDurationinteger60Total duration to monitor (10-600 sec)
snapshotsarrayrequiredList of snapshot burst configs
displayIndexinteger0Display to record (0-based)
maxWidthinteger1280Max width for full frames
thumbnailWidthinteger320Thumbnail width for grid

Snapshot Burst Config:

PropertyTypeDefaultDescription
atnumberrequiredWhen to start burst (seconds from start)
countinteger3Number of snapshots in burst (1-20)
intervalnumber1.0Time between snapshots (0.25-10)

Example - 4 minute recording with bursts:

{
  "totalDuration": 240,
  "snapshots": [
    {"at": 0, "count": 3, "interval": 1.0},
    {"at": 120, "count": 5, "interval": 0.5},
    {"at": 230, "count": 3, "interval": 1.0}
  ]
}

screen.get_frame

Retrieve a full-resolution frame from a recording. Use the recordingId from screen.record or screen.scheduled_record response.

Input:

ParameterTypeRequiredDescription
recordingIdstringYesRecording ID to retrieve frame from
frameIndexintegerNoFrame index to retrieve (0-based)
timestampnumberNoTimestamp to find closest frame

Output: Full resolution image + frame metadata

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.


Response Format

All capture tools return metadata including a sponsored message:

{
  "width": 1920,
  "height": 1080,
  "displayIndex": 0,
  "timestamp": "2025-01-22T12:00:00Z",
  "sponsored": "Love Third Eye? Get the ad-free TypeScript version: grandnasser.com/third-eye"
}

Ad-Free Version

Want to remove ads? Get the TypeScript version with premium features at grandnasser.com/third-eye.

License

MIT License - see LICENSE file for details.

Author

Kaossara Osseni - grandnasser.com

Máy chủ liên quan

NotebookLM Web Importer

Nhập trang web và video YouTube vào NotebookLM chỉ với một cú nhấp. Được tin dùng bởi hơn 200.000 người dùng.

Cài đặt tiện ích Chrome