io.github.HurleySk/can-see

Registre officiel IA et agents

Let AI agents see and interact with terminal/CLI apps via PNG screenshots

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

NPM package can-see
Claude Code
claude mcp add can-see -e 'DEFAULT_COLS=<DEFAULT_COLS>' -e 'DEFAULT_ROWS=<DEFAULT_ROWS>' -e 'IDLE_TIMEOUT_MS=<IDLE_TIMEOUT_MS>' -- npx -y can-see@0.4.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "can-see": {
            "command": "npx",
            "args": [
                "-y",
                "can-see@0.4.0"
            ],
            "env": {
                "DEFAULT_COLS": "<DEFAULT_COLS>",
                "DEFAULT_ROWS": "<DEFAULT_ROWS>",
                "IDLE_TIMEOUT_MS": "<IDLE_TIMEOUT_MS>"
            }
        }
    }
}

Variables d'environnement

  • DEFAULT_COLS Terminal width in columns (default: 120)
  • DEFAULT_ROWS Terminal height in rows (default: 30)
  • IDLE_TIMEOUT_MS Auto-close idle sessions after this many milliseconds (default: 300000)

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. can-see
  2. Why?
  3. How it works
  4. Installation
  5. Configuration
  6. Tools
  7. Environment variables
  8. Example usage
  9. Changelog
  10. License

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

  1. Launch a CLI app in a virtual terminal (node-pty + @xterm/headless)
  2. Screenshot the terminal as a PNG image (rendered via node-canvas)
  3. Send keys/text to interact with the app
  4. Screenshot again to see the result
  5. Close the session when done

Installation

npm install -g can-see
Prerequisites

can-see depends on node-canvas (Cairo) and node-pty, which require native compilation. Most systems will need:

  • Windows: Visual Studio Build Tools (C++ workload) — npm install --global windows-build-tools or install from Visual Studio Installer
  • macOS: Xcode Command Line Tools — xcode-select --install
  • Linux: sudo apt install build-essential libcairo2-dev libjpeg-dev libpango1.0-dev libgif-dev librsvg2-dev

Configuration

Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "can-see": {
      "command": "npx",
      "args": ["-y", "can-see"]
    }
  }
}

Or if installed globally:

{
  "mcpServers": {
    "can-see": {
      "command": "can-see"
    }
  }
}
Other MCP clients

can-see uses stdio transport. Point your MCP client at the can-see binary or npx -y can-see.

Tools

ToolDescription
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.
get_cell_infoQuery character, colors, and attributes at specific cell(s). Supports compact mode for reduced output.
read_textRead the terminal buffer as plain text.
read_scrollbackRead text that scrolled above the visible viewport.
wait_for_textWait until specific text appears in the terminal buffer.
wait_for_idleWait 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_colorWait until a specific color appears at a position.
wait_for_exitWait until the process exits and return its exit code and signal.
start_recordingBegin capturing frames for an animated GIF.
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.
send_keysSend keystrokes (e.g., Enter, Ctrl+C, ['Down', 'Down', 'Enter']).
send_textType a string of text into the app.
get_process_statusGet process status — distinguish "app is idle" from "app has exited". Returns PID, running state, exit code.
list_sessionsList all active terminal sessions.
closeKill the app and clean up. Always close when done.
close_allKill all active sessions at once. Useful for cleanup between test runs.
Supported keys

Enter, Tab, Escape, Backspace, Space, Up, Down, Left, Right, Home, End, Delete, PageUp, PageDown, Ctrl+A through Ctrl+Z.

Environment variables

VariableDefaultDescription
DEFAULT_COLS120Terminal width in columns
DEFAULT_ROWS30Terminal height in rows
IDLE_TIMEOUT_MS300000Auto-close idle sessions after this many ms (5 min)

Example usage

From an MCP-connected agent:

Agent: I'll launch your app to see what's happening.
→ launch("node", ["app.js"])  → sessionId: "abc-123"

Agent: Let me wait for the app to start.
→ wait_for_text("abc-123", "Ready")  → Found "Ready" after 1200ms

Agent: Let me read the current output.
→ read_text("abc-123")  → "Welcome to MyApp\nReady\n> "

Agent: I can see the prompt. Let me select option 2.
→ send_keys("abc-123", ["Down", "Enter"])

Agent: Waiting for the screen to settle.
→ wait_for_idle("abc-123")  → Terminal idle for 520ms

Agent: Let me check the result.
→ screenshot("abc-123")  → [PNG image showing result]

Agent: Done, closing the session.
→ close("abc-123")

Changelog

0.5.0

New tools:

  • wait_for_exit — wait for process exit, get exit code and signal
  • close_all — kill all active sessions at once
  • get_process_status — distinguish "app is idle" from "app has exited"
  • screenshot_text_region — find text in viewport, capture surrounding area as PNG

Enhancements:

  • launch accepts env parameter for custom environment variables
  • wait_for_idle supports excludePattern (regex) for dynamic row exclusion in stableMs mode
  • stop_recording returns frameCount and durationMs metadata alongside GIF
  • get_cell_info supports compact option for reduced output ({char, fg, bold} only)

Bug fixes:

  • Fixed wait_for_text and wait_for_color race condition where text/color present in the final buffer was missed when the process exited simultaneously
  • Added mutual exclusion validation when both stableMs and idleMs are passed to wait_for_idle

License

MIT

Questions fréquentes

Qu'est-ce que io.github.HurleySk/can-see ?

Let AI agents see and interact with terminal/CLI apps via PNG screenshots

Comment installer io.github.HurleySk/can-see ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add can-see -e 'DEFAULT_COLS=<DEFAULT_COLS>' -e 'DEFAULT_ROWS=<DEFAULT_ROWS>' -e 'IDLE_TIMEOUT_MS=<IDLE_TIMEOUT_MS>' -- npx -y can-see@0.4.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour io.github.HurleySk/can-see ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

io.github.HurleySk/can-see est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient io.github.HurleySk/can-see ?

Il est publié par HurleySk. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.