
Can See
Gives Claude vision into terminal UIs by running CLI apps in virtual terminals and capturing PNG screenshots. Uses node-pty and xterm's headless renderer to spin up sessions, then exposes tools to launch processes, send keystrokes, wait for text or idle states, and grab screenshots of the full terminal or specific regions. Includes diffing support to highlight what changed between captures, GIF recording for animated sequences, and scrollback access. Useful when you're debugging TUIs, interactive wizards, or anything with ANSI color and layout that's hard to describe in text. Sessions auto-close after idle timeout, or you can clean them up manually with close or close_all.
- tools
- 21
- transport
- STDIO
- env vars
- 3
- last updated
- Apr 15, 2026
Tools
21 toolsPublic tool metadata for what this MCP can expose to an agent.
launchStart a CLI app in a virtual terminal. Returns a `sessionId`. Accepts optional `env` to set environment variables.
Start a CLI app in a virtual terminal. Returns a `sessionId`. Accepts optional `env` to set environment variables.
No parameter schema in public metadata yet.
screenshotCapture the terminal as a PNG image.
Capture the terminal as a PNG image.
No parameter schema in public metadata yet.
screenshot_regionCapture a specific rectangular area of the terminal.
Capture a specific rectangular area of the terminal.
No parameter schema in public metadata yet.
screenshot_text_regionFind text in the viewport and capture the surrounding area as a PNG.
Find text in the viewport and capture the surrounding area as a PNG.
No parameter schema in public metadata yet.
capture_baselineSnapshot terminal state for later diff comparison.
Snapshot terminal state for later diff comparison.
No parameter schema in public metadata yet.
diff_screenshotCompare current state against baseline with highlighted changes.
Compare current state against baseline with highlighted changes.
No parameter schema in public metadata yet.
get_cell_infoQuery character, colors, and attributes at specific cell(s). Supports `compact` mode for reduced output.
Query character, colors, and attributes at specific cell(s). Supports `compact` mode for reduced output.
No parameter schema in public metadata yet.
read_textRead the terminal buffer as plain text.
Read the terminal buffer as plain text.
No parameter schema in public metadata yet.
read_scrollbackRead text that scrolled above the visible viewport.
Read text that scrolled above the visible viewport.
No parameter schema in public metadata yet.
wait_for_textWait until specific text appears in the terminal buffer.
Wait until specific text appears in the terminal buffer.
No parameter schema in public metadata yet.
wait_for_idleWait until terminal output has been stable for a given duration. Supports `stableMs` for content-comparison mode, `excludeRows` to ignore specific rows, and `excludePattern` (regex) for dynamic row exclusion.
Wait until terminal output has been stable for a given duration. Supports `stableMs` for content-comparison mode, `excludeRows` to ignore specific rows, and `excludePattern` (regex) for dynamic row exclusion.
No parameter schema in public metadata yet.
wait_for_colorWait until a specific color appears at a position.
Wait until a specific color appears at a position.
No parameter schema in public metadata yet.
wait_for_exitWait until the process exits and return its exit code and signal.
Wait until the process exits and return its exit code and signal.
No parameter schema in public metadata yet.
start_recordingBegin capturing frames for an animated GIF.
Begin capturing frames for an animated GIF.
No parameter schema in public metadata yet.
stop_recordingStop recording and return the animated GIF with metadata (`frameCount`, `durationMs`). Auto-trims frames or saves to file if GIF exceeds inline size limit.
Stop recording and return the animated GIF with metadata (`frameCount`, `durationMs`). Auto-trims frames or saves to file if GIF exceeds inline size limit.
No parameter schema in public metadata yet.
send_keysSend keystrokes (e.g., `Enter`, `Ctrl+C`, `['Down', 'Down', 'Enter']`).
Send keystrokes (e.g., `Enter`, `Ctrl+C`, `['Down', 'Down', 'Enter']`).
No parameter schema in public metadata yet.
send_textType a string of text into the app.
Type a string of text into the app.
No parameter schema in public metadata yet.
get_process_statusGet process status — distinguish "app is idle" from "app has exited". Returns PID, running state, exit code.
Get process status — distinguish "app is idle" from "app has exited". Returns PID, running state, exit code.
No parameter schema in public metadata yet.
list_sessionsList all active terminal sessions.
List all active terminal sessions.
No parameter schema in public metadata yet.
closeKill the app and clean up. Always close when done.
Kill the app and clean up. Always close when done.
No parameter schema in public metadata yet.
close_allKill all active sessions at once. Useful for cleanup between test runs.
Kill all active sessions at once. Useful for cleanup between test runs.
No parameter schema in public metadata yet.
Sponsors
Configuration
DEFAULT_COLSTerminal width in columns (default: 120)
DEFAULT_ROWSTerminal height in rows (default: 30)
IDLE_TIMEOUT_MSAuto-close idle sessions after this many milliseconds (default: 300000)
Readme
can-see
MCP server that lets AI agents see and interact with terminal/CLI applications through virtual terminals and PNG screenshots.
Built for Claude Code and any MCP-compatible agent.
Why?
Some things are easier to show than describe. When debugging a TUI app, an interactive CLI wizard, or anything with visual terminal output, can-see lets the agent see exactly what you see — colors, layout, cursor position, and all.
How it works
Details
- Repository
- github.com/hurleysk/can-see
- Category
- Developer Tools
- Package
can-see- Transport
- STDIO
- Registry
- MCP registry, active