Let AI agents see and interact with terminal/CLI apps via PNG screenshots
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Inspect callable tools, capabilities, and parameters exposed to AI agents by Can See.
launchStart a CLI app in a virtual terminal. Returns a `sessionId`. Accepts optional `env` to set environment variables.
screenshotCapture the terminal as a PNG image.
screenshot_regionCapture a specific rectangular area of the terminal.
screenshot_text_regionFind text in the viewport and capture the surrounding area as a PNG.
capture_baselineSnapshot terminal state for later diff comparison.
diff_screenshotCompare current state against baseline with highlighted changes.
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.
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.
can-see depends on node-canvas (Cairo) and node-pty, which require native compilation. Most systems will need:
npm install --global windows-build-tools or install from Visual Studio Installerxcode-select --installsudo apt install build-essential libcairo2-dev libjpeg-dev libpango1.0-dev libgif-dev librsvg2-devAdd to your project's .mcp.json:
Or if installed globally:
can-see uses stdio transport. Point your MCP client at the can-see binary or npx -y can-see.
| Tool | Description |
|---|---|
launch | Start a CLI app in a virtual terminal. Returns a sessionId. Accepts optional env to set environment variables. |
screenshot | Capture the terminal as a PNG image. |
screenshot_region | Capture a specific rectangular area of the terminal. |
screenshot_text_region | Find text in the viewport and capture the surrounding area as a PNG. |
capture_baseline | Snapshot terminal state for later diff comparison. |
diff_screenshot | Compare current state against baseline with highlighted changes. |
get_cell_info | Query character, colors, and attributes at specific cell(s). Supports compact mode for reduced output. |
read_text | Read the terminal buffer as plain text. |
read_scrollback | Read text that scrolled above the visible viewport. |
wait_for_text | Wait until specific text appears in the terminal buffer. |
wait_for_idle | Wait until terminal output has been stable for a given duration. Supports stableMs for content-comparison mode (for apps with timers/spinners), excludeRows to ignore specific rows, and excludePattern (regex) for dynamic row exclusion. |
wait_for_color | Wait until a specific color appears at a position. |
wait_for_exit | Wait until the process exits and return its exit code and signal. |
start_recording | Begin capturing frames for an animated GIF. |
stop_recording | Stop recording and return the animated GIF with metadata (frameCount, durationMs). Auto-trims frames or saves to file if GIF exceeds inline size limit. |
send_keys | Send keystrokes (e.g., Enter, Ctrl+C, ['Down', 'Down', 'Enter']). |
send_text | Type a string of text into the app. |
get_process_status | Get process status β distinguish "app is idle" from "app has exited". Returns PID, running state, exit code. |
list_sessions | List all active terminal sessions. |
close | Kill the app and clean up. Always close when done. |
close_all | Kill all active sessions at once. Useful for cleanup between test runs. |
Enter, Tab, Escape, Backspace, Space, Up, Down, Left, Right, Home, End, Delete, PageUp, PageDown, Ctrl+A through Ctrl+Z.
| Variable | Default | Description |
|---|---|---|
DEFAULT_COLS | 120 | Terminal width in columns |
DEFAULT_ROWS | 30 | Terminal height in rows |
IDLE_TIMEOUT_MS | 300000 | Auto-close idle sessions after this many ms (5 min) |
From an MCP-connected agent:
New tools:
wait_for_exit β wait for process exit, get exit code and signalclose_all β kill all active sessions at onceget_process_status β distinguish "app is idle" from "app has exited"screenshot_text_region β find text in viewport, capture surrounding area as PNGEnhancements:
launch accepts env parameter for custom environment variableswait_for_idle supports excludePattern (regex) for dynamic row exclusion in stableMs modestop_recording returns frameCount and durationMs metadata alongside GIFget_cell_info supports compact option for reduced output ({char, fg, bold} only)Bug fixes:
wait_for_text and wait_for_color race condition where text/color present in the final buffer was missed when the process exited simultaneouslystableMs and idleMs are passed to wait_for_idleMIT
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/can-see)<a href="https://allmcps.com/mcp/can-see"><img src="https://allmcps.com/api/badge/can-see?style=directory" alt="Can See on AllMCPs" /></a>