visible-terminal-mcp
Click on "Deploy 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., "@visible-terminal-mcpOpen a terminal, run npm init -y, then read what's on screen"
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.
visible-terminal-mcp
An MCP server that gives an AI agent control of a genuinely visible Windows terminal window — the agent spawns it, types into it, reads back exactly what's rendered on screen, and closes it, while a human watches the real window the whole time.
The problem this solves
Most ways an AI agent can drive a terminal are headless: the agent spawns a process behind a pseudo-terminal (ConPTY / node-pty), types into it, and reports back what happened. That's fast and works well for scripted automation — but it gives a human nothing to look at. You're asked to trust that the agent did what it says it did, with no independent way to verify it in real time.
This project exists because that trust gap caused a real problem: an agent was asked to drive a second interactive CLI session on behalf of a user. Using a headless approach, the agent reported success — but the session had silently failed to persist its work, and there was no way for the user to have caught this while it was happening, because there was nothing to watch. See docs/motivation.md for the full incident this project was built to prevent from recurring.
The fix: don't hide the terminal. Spawn a real, classic Windows console window — the same kind you'd open yourself — and drive it with the same two things a human uses: a keyboard and a pair of eyes.
Related MCP server: com-use-mcp
What it actually gives you
Capability | Mechanism | Why it's different from a headless approach |
Spawn a real terminal window |
| It's an actual OS window, not a virtual buffer — the user can see it exists |
Type into it | Windows | Real keystrokes, including special keys (arrows, Enter, Esc, Tab) for navigating interactive menus/pickers |
Read what's on screen | Win32 Console API ( | Reads the actual character buffer the window is displaying — not a screenshot, not a guess, the same content the human sees |
Close it |
| Clean teardown when done |
Because reading goes through the real console buffer, the agent and the human are looking at the same ground truth — there's no second, hidden copy of "what happened" that only the agent has access to.
Use cases
Supervised automation of interactive CLIs — anything that only shows its full behavior when it detects a real terminal (confirmation prompts, TUI pickers, tools that disable prompts when piped), with a human able to watch it happen.
Driving a second instance of an interactive agent/CLI session on behalf of a user, transparently — the motivating case for this project.
Reproducing and debugging terminal-dependent bugs that don't manifest the same way under a headless PTY, with a human verifying each step as the agent takes it.
Teaching or demoing what an agent is doing step by step, rather than presenting only a final summary.
Requirements
Windows (uses Win32 Console API and PowerShell
SendKeys— this is not cross-platform)Node.js >= 18
PowerShell available on
PATH
Installation
git clone https://github.com/Sanjay-dev22/visible-terminal-mcp.git
cd visible-terminal-mcp
npm installUsing it as an MCP server
Register it with your MCP-compatible client. For Claude Code, add this to your mcpServers config (e.g. ~/.claude.json):
{
"mcpServers": {
"visible-terminal-control": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/visible-terminal-mcp/src/server.js"],
"env": {}
}
}
}Restart your MCP client, and four tools become available:
vterm_spawn
Opens a new, visible PowerShell window.
Param | Type | Required | Description |
| string | no | Working directory to start in |
Returns { pid } — the process id used by every other tool.
vterm_send
Sends keystrokes to a window, exactly as if typed on a keyboard.
Param | Type | Required | Description |
| string | yes | From |
| string | no | Literal text to type |
| boolean | no | Press Enter after the text |
| array | no | Named keys sent in order: |
Why each key is its own process call internally: sending multiple
SendKeyscalls within a single PowerShell invocation is not reliably delivered — confirmed empirically, only the first of several queued keys would land, even with delays in between.vterm_sendissues one PowerShell process invocation per discrete key/text/enter action, which is reliable 100% of the time in testing. This makes each call slightly slower than a naive batched version, but correct — seedocs/motivation.mdfor how this was diagnosed.
vterm_read
Reads exactly what's currently rendered in the window.
Param | Type | Required | Description |
| string | yes | From |
Returns the visible screen content as text.
vterm_close
Terminates the window's process.
Param | Type | Required | Description |
| string | yes | From |
Example
See examples/basic-spawn-type-read.js for a minimal spawn → type → read → close cycle, and examples/menu-navigation.js for using special keys to navigate a TUI/history menu (PowerShell command-history recall, as a stand-in for any arrow-key-driven picker).
npm run example:basic
npm run example:menu-navigationRelying on focus, not stealing it
vterm_send does not forcibly steal window focus (no SetForegroundWindow call). It relies on the target window already having focus — true immediately after vterm_spawn creates it, or after a human last interacted with it. This is a deliberate choice: combining forced focus-stealing with synthetic keystroke injection is a recognized pattern for malicious input automation, and this project avoids it even though it means the caller is responsible for not clicking elsewhere mid-sequence.
Known limitations
Windows only. The console-reading mechanism and
SendKeysare both Win32-specific.Reads text, not pixels.
vterm_readreturns the character buffer, not colors, fonts, or a literal screenshot.Can't reach an IDE's own integrated terminal panel (e.g. VS Code's) directly — that would require an IDE-extension-based tool, which this is not. It controls independent OS-level console windows.
One key per process call. See the note under
vterm_sendabove — this is intentional, not a missing optimization.Relies on the target window keeping focus between calls — if something else is clicked in between, keystrokes go to the wrong place, same as a real human would need to refocus.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Eyes and hands on real Windows PCs — observe, click, type via Glasswarp API.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Give your AI hands on every computer you own. Remote control of your Windows, Mac and Linux machines from one ChatGPT, Claude or Cursor chat — even from your phone. Ask it to find out why the office server is crawling, update every PC in the house, sort out your mom's laptop from another city, or ship the site from your work machine while you're on a train. It runs commands, reads files and takes a screenshot when it needs to see the screen. You decide what each computer allows, and you can cut any of them off in a second.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with fully interactive terminal sessions, including TUI support, keyboard control, and screen capture across Windows, Linux, and Mac.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to see and operate a Windows PC through mouse, keyboard, screenshots, OCR, window control, and shell commands.-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to drive native Windows apps and headed browsers inside a hidden child desktop session with its own screen, pointer and keyboard focus. Provides tools for screenshots, mouse/keyboard input, accessibility inspection, UI waits, display changes, Android emulators, application launches and cancellable command jobs, so the user's own desktop stays free.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI models to control a local Windows desktop by moving the cursor, clicking, scrolling, typing Unicode text, sending key chords, and capturing screenshots. Runs natively on Windows with minimal latency and no heavy dependencies such as Python, PyAutoGUI, or Docker.58 npm1MIT