
Real terminal sessions for agents: run commands, stream output, type into programs, kill trees.
Public tool metadata for what this MCP can expose to an agent.
terminal_startStart a session. Without `command`: your login shell (zsh/bash) with command tracking. With `command` + `args`: any program in a PTY (python, vim, ssh, a dev server). Returns `session_id`, state and the first screen.Start a session. Without `command`: your login shell (zsh/bash) with command tracking. With `command` + `args`: any program in a PTY (python, vim, ssh, a dev server). Returns `session_id`, state and the first screen.
No parameter schema in public metadata yet.
terminal_execRun one command line in a shell session and wait (default 20 s) for it to finish. Returns only that command's output, `exit_code` and the new `cwd`.Run one command line in a shell session and wait (default 20 s) for it to finish. Returns only that command's output, `exit_code` and the new `cwd`.
No parameter schema in public metadata yet.
terminal_writeType text (`input`) and/or named `keys` (`enter`, `ctrl+c`, `up`, `escape`, `f1`...). Waits until output settles or `until` matches and returns the new output.Type text (`input`) and/or named `keys` (`enter`, `ctrl+c`, `up`, `escape`, `f1`...). Waits until output settles or `until` matches and returns the new output.
No parameter schema in public metadata yet.
terminal_readRead without sending input. `cursor` returns only newer output and a `next_cursor`; `wait_for` can block for `output`, `command_end` or `exit`; `until` waits for a regex; `view: "screen"` returns the rendered screen for full-screen programs.Read without sending input. `cursor` returns only newer output and a `next_cursor`; `wait_for` can block for `output`, `command_end` or `exit`; `until` waits for a regex; `view: "screen"` returns the rendered screen for full-screen programs.
No parameter schema in public metadata yet.
terminal_listAll sessions with state, exit code, busy/idle, current command, cwd and cursor.All sessions with state, exit code, busy/idle, current command, cwd and cursor.
No parameter schema in public metadata yet.
terminal_killTerminate a session and its whole process tree (SIGHUP, then SIGKILL after `escalate_after_ms`).Terminate a session and its whole process tree (SIGHUP, then SIGKILL after `escalate_after_ms`).
No parameter schema in public metadata yet.
Sponsors
An MCP server that gives agents real terminals. A client can start shells or programs in a pseudo-terminal, run commands and get back exactly their output and exit code, keep reading output of long-running processes by cursor, type into interactive programs (REPLs, prompts, vim), see whether a session is busy, idle, waiting for input or exited, and terminate a session with its whole process tree.
It works with any MCP client. Local clients launch it over stdio; remote or hosted clients (such as Manus) connect over Streamable HTTP with a bearer token. It serves both the 2025-era protocol and the 2026-07-28 revision.
Demo: an MCP client starts a shell, runs commands, reads a long job by cursor, answers a prompt, drives a Python REPL and a web server, then kills every session
@ryamgoh/terminal-mcp