third-eye-mcp
Click on "Install 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., "@third-eye-mcptake a screenshot of my main display"
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.
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
Related MCP server: snip-mcp
Installation
pip install third-eye-mcpOr 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_mcpAvailable 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:
Parameter | Type | Default | Description |
displayIndex | integer | 0 | Display to capture (0-based) |
maxWidth | integer | 1920 | Max width for resizing |
delay | number | 0 | Delay in seconds |
instant | boolean | false | Skip delay |
Output: Base64 PNG image + metadata JSON with sponsored field
screen.capture_region
Capture a specific region of the screen.
Input:
Parameter | Type | Required | Description |
x | integer | Yes | X coordinate |
y | integer | Yes | Y coordinate |
width | integer | Yes | Region width |
height | integer | Yes | Region height |
maxWidth | integer | No | Max width for resizing (default: 1920) |
delay | number | No | Delay in seconds (default: 0) |
instant | boolean | No | Skip 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:
Parameter | Type | Default | Description |
duration | integer | 30 | Recording duration in seconds (1-120) |
interval | number | 1.0 | Capture interval in seconds (0.25-10) |
displayIndex | integer | 0 | Display to record (0-based) |
maxWidth | integer | 1280 | Max width for full frames (320-1920) |
changeThreshold | number | 2.0 | Min change % to keep frame (0-100) |
maxFrames | integer | 30 | Maximum frames to keep (5-100) |
thumbnailWidth | integer | 320 | Thumbnail 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:
Parameter | Type | Default | Description |
totalDuration | integer | 60 | Total duration to monitor (10-600 sec) |
snapshots | array | required | List of snapshot burst configs |
displayIndex | integer | 0 | Display to record (0-based) |
maxWidth | integer | 1280 | Max width for full frames |
thumbnailWidth | integer | 320 | Thumbnail width for grid |
Snapshot Burst Config:
Property | Type | Default | Description |
at | number | required | When to start burst (seconds from start) |
count | integer | 3 | Number of snapshots in burst (1-20) |
interval | number | 1.0 | Time 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:
Parameter | Type | Required | Description |
recordingId | string | Yes | Recording ID to retrieve frame from |
frameIndex | integer | No | Frame index to retrieve (0-based) |
timestamp | number | No | Timestamp 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
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Osseni94/third-eye-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server