WinTerminal MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_terminal_sessionsA | Lists every session this server currently knows about, each backed by a real, persistent shell process attached to its own pseudo console. Returns for each session: name, shell (pwsh/powershell/cmd), starting directory, creation time, and whether the process is still alive (false if it exited or was killed since it was opened). Use this before write_to_terminal/read_terminal_output when you're not sure which named sessions already exist, or to check whether a session that exited needs to be reopened. |
| open_terminal_sessionA | Starts a new, persistent shell process attached to its own pseudo console, and registers it under a name you choose. Args:
You do not need to call this before write_to_terminal - writing to the "default" session name auto-creates it. Use this tool explicitly when you want a second, independently named session (e.g. run a dev server in "server" while running git commands in "git"), or want to pick the shell/starting directory yourself. Errors if a session with that name is already open - close it first or pick a different name. |
| write_to_terminalA | Writes a command or text into a session's shell input, exactly as if a person typed it, then presses Enter (by default). Args:
Returns immediately after the keystrokes are sent - it does NOT wait for the command to finish. Use read_terminal_output afterward (optionally with waitForIdleMs) to see the result. Errors:
|
| read_terminal_outputA | Reads a session's captured output transcript: everything the shell has printed since the session opened, with terminal escape/color codes stripped and carriage-return line-rewrites (progress bars, spinners) collapsed to their final state. Args:
Returns: { text, truncated, idleReached, timedOut }. Long output is truncated from the start (oldest lines dropped first) to maxOutputChars (see config.json); truncated is true when that happened. Note: this is a plain-text transcript, not a full terminal screen emulation - a full-screen app (vim, htop) that repaints the same screen region repeatedly will show as a scrolling log of each repaint, not one clean frame. |
| send_control_characterA | Sends a real Ctrl+ control byte (e.g. Ctrl+C to interrupt) directly into a session's own shell input. This writes the literal ASCII control byte straight into this one session's input pipe - it physically cannot reach any other process on the machine, since there is no keyboard/focus involved at all. Args:
Ctrl+Break is not supported - there is no ASCII control byte for it over this transport. Use "C" to interrupt a running command. Reliably interrupts a command that is actually running. It is not a reliable way to cancel text already typed into the prompt but not yet submitted (pressEnter:false) - PowerShell's line editor needs Ctrl+C delivered as its own keypress to cancel an in-progress edit, which this transport does not guarantee. To discard an unsent fragment, close and reopen the session instead. |
| close_terminal_sessionA | Terminates a session's shell process and forgets it. Args:
Errors with "No open session named ..." if it's already gone. |
| debug_inspect_sessionsA | Diagnostic tool: dumps the daemon's internal state for every session it knows about - pid, alive status, and how many characters of output are currently buffered. Use this when a session seems "stuck" (write/read errors, session not found) to see what the daemon actually has in memory. Not needed for normal use. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool targets a distinct operation—listing, opening, writing, reading, closing, sending control bytes, and debugging—so there is no real overlap in purpose. The only adjacent pair, list_terminal_sessions and debug_inspect_sessions, is clearly separated by the diagnostic framing of the latter.
All tool names use snake_case and begin with an imperative verb, which makes the set predictable. debug_inspect_sessions is slightly less clean because it stacks two verb-like words, but the overall convention remains consistent.
Seven tools is well-scoped for a terminal session server: create, list, write, read, control, close, and debug. Each tool earns its place, and the set is neither too thin nor too heavy.
The tools cover the full lifecycle of persistent terminal sessions, including opening, enumerating, writing input, reading output, interrupting commands, and closing. Minor conveniences like session resizing are absent, but no core terminal workflow has a dead end.