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: screen-capture-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.
Related MCP Servers
- Alicense-qualityDmaintenanceAn MCP server for capturing screen regions directly into Claude Code conversations via hotkeys or tool calls. It provides Windows-specific screen snipping with multi-monitor support, persistent storage, and automatic management of captured images.MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables Claude Code and other MCP clients to take screenshots of the full screen or specific windows, with support for repeated captures over intervals.1375MIT
- AlicenseAqualityCmaintenanceMCP server for ScreenshotFreeAPI – capture website screenshots, render HTML/PDF, and fetch app store listing screenshots from any MCP-compatible AI client.79MIT
- Flicense-qualityDmaintenanceA reliable MCP server for taking screenshots with customizable timestamp overlays, region captures, and file management capabilities across macOS, Windows, and Linux.
Related MCP Connectors
Free remote MCP server for fetching public web pages through a rotating proxy pool.
MCP server for Grok Imagine AI video generation
MCP server for Hailuo (MiniMax) AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- 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