interactive-cli MCP server
Commit 4. Nov. 2026Ermöglicht es AI-Agents, mit Terminal-Prozessen über ein Pseudo-Terminal und Headless-xterm-Rendering zu interagieren, um Prompts und REPLs zu handhaben.
Auch bekannt als ohernandezdev/interactive-cli
- Stars
- 1
- Tools
- 9
- Downloads, 30 Tage
- —
- Neueste Version
- —
- Letzter Commit
- 4. Nov. 2026
- Lizenz
- MIT
Was ist interactive-cli MCP?
interactive-cli ist ein MCP server. Ermöglicht es AI-Agents, mit Terminal-Prozessen über ein Pseudo-Terminal und Headless-xterm-Rendering zu interagieren, um Prompts und REPLs zu handhaben. Er stellt 9 Tools bereit, etwa spawn, send_input, send_keys.
Zusammenfassung generiert aus dem README des Projekts
Über interactive-cli MCP server
Dieser MCP server ermöglicht es AI-Agents, interaktive Terminal-Prozesse wie Installer, SSH-Sessions oder REPLs zu steuern. Während Standard-Shell-Tools dazu führen können, dass Agents hängen bleiben, wenn sie auf Benutzereingaben warten, nutzt dieser Server ein echtes Pseudo-Terminal und Headless-xterm-Rendering, um ein sauberes Textgitter des Bildschirms bereitzustellen. Dadurch kann ein Agent Prompts sehen, Menüs navigieren und Antworten geben, genau wie ein Mensch es tun würde.
Entwickler können dies auf macOS oder Linux mit jedem MCP client nutzen, der stdio unterstützt, einschließlich Claude Code, Cursor, Windsurf und Codex. Der Server stellt spezifische Tools wie spawn zum Starten eines Prozesses, send_keys zur Simulation der Tastaturnavigation und send_input zum Eintippen von Text in Formulare bereit. Er enthält außerdem ein wait_for Tool, das Regex nutzt, um auf bestimmte Muster wie den Abschluss eines Builds oder Fehler zu überwachen.
Da der Server Befehle über deine lokale Shell ausführt, agiert der Agent mit deinen bestehenden Berechtigungen. Um den Client nicht zu überlasten, sind die Screen-Captures auf 80.000 Zeichen begrenzt, und das System hält einen Scrollback-Buffer von 1.000 Zeilen bereit.
Was du damit machen kannst
- 1Komplexe Build-Prozesse automatisierenDu kannst einen Agent anweisen, einen Build auszuführen und darauf zu warten, dass eine spezifische Erfolgs- oder Fehlermeldung erscheint.
Geschrieben aus dem README des Projekts. Jeder Use Case wurde gegen ein Zitat daraus geprüft.
interactive-cli MCP tools 9
Erkannt aus dem READMEspawnsend_inputsend_keysget_screenwait_forwait_for_exitresizelist_sessionsclose
| spawn | — | |
| send_input | — | |
| send_keys | — | |
| get_screen | — | |
| wait_for | — | |
| wait_for_exit | — | |
| resize | — | |
| list_sessions | — | |
| close | — |
Automatisierte Checks
Geluften am 14. Nov. 2026Vollständiger Bericht →Noch nicht verifiziert. Ein Server benötigt einen Score von 80, keine kritischen Befunde und genug Daten für unsere Prüfung. Wie die Checks funktionieren · Was du für mehr Punkte verbessern kannst
- Source Repository verknüpft und erreichbarohernandezdev/interactive-cli is public and reachablegithub.com/ohernandezdev/interactive-cli ↗Bestanden
- Paket nennt dieses Repository als QuelleNicht geprüft
- Build-Provenienz (Sigstore-Attestierung)Nicht geprüft
- Open Source Lizenz (OSI)MITspdx.org/licenses/MIT.html ↗Bestanden
- Commit oder Release im letzten JahrLast commit or release 2026-11-04github.com/ohernandezdev/interactive-cli ↗Bestanden
- OpenSSF ScorecardNicht geprüft
- Package-Name ähnelt keinem populären PackageNicht geprüft
- Keine kritischen Advisories im Paket oder seinen AbhängigkeitenNicht geprüft
- Keine versteckten Anweisungen an das Modell9 tool descriptions and the README read; no override phrases, credential paths or hidden charactersBestanden
- Destruktive Tools sind markiertNo tool named like delete, drop or execBestanden
- Remote-Endpoint beantwortet den MCP-HandshakeNicht geprüft
README
Auf GitHub anseheninteractive-cli
An MCP server that runs commands in a real pseudo-terminal and hands your AI agent the rendered screen, so it can answer prompts, pick menu items and drive REPLs, SSH and installers the way you would.
Site: https://ohernandezdev.github.io/interactive-cli/
Works with Claude Code, Codex, Cursor, Windsurf, or any MCP client that speaks stdio.
Why
A shell tool sends a command and waits for it to finish. An interactive command never finishes: it waits for a person. The agent hangs, times out or kills it, and you end up typing the answer yourself.
$ npm init
package name: (my-app)
waiting for input…
interactive-cli bridges that gap. It spawns the process in a PTY, renders the screen with xterm headless (clean text, no ANSI escape soup), and lets the agent send input or keys and wait for patterns.
Install
Requires Node 18 or later, on macOS or Linux.
Claude Code
claude mcp add interactive-cli -- npx -y interactive-cli-mcp
Codex CLI
codex mcp add interactive-cli -- npx -y interactive-cli-mcp
This writes [mcp_servers.interactive-cli] with command = "npx" and args = ["-y", "interactive-cli-mcp"] to ~/.codex/config.toml.
Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"interactive-cli": {
"command": "npx",
"args": ["-y", "interactive-cli-mcp"]
}
}
}
Any MCP client
Point a stdio MCP client at:
npx -y interactive-cli-mcp
From source
git clone https://github.com/ohernandezdev/interactive-cli.git
cd interactive-cli
npm install && npm run build
claude mcp add interactive-cli -- node /absolute/path/to/interactive-cli/dist/index.js
What a session looks like
An illustrative eas build session. The agent calls the tools; the server answers with the rendered screen.
spawn("eas build --platform ios")
? Select a build profile ›
❯ development
preview
production
get_screen()
(same screen)
send_keys(["down", "down", "enter"])
✔ Selected profile: production
? Do you want to log in to your Apple account? › (Y/n)
send_input("y")
✔ Logged in
Building…
wait_for("Build complete|error", 600000)
✔ Build complete
close()
exit 0
(sessionId is omitted above for brevity; every call after spawn takes the id that spawn returned.)
Tools
| Tool | Parameters (defaults) | Read-only |
|---|---|---|
spawn |
command, cwd?, env?, cols = 120, rows = 30, waitMs = 2000 |
No |
send_input |
sessionId, text, pressEnter = true, waitMs = 2000 |
No |
send_keys |
sessionId, keys[], delayBetweenMs = 50, waitMs = 1500 |
No |
get_screen |
sessionId, search?, waitMs = 500 |
Yes |
wait_for |
sessionId, pattern, timeoutMs = 30000, intervalMs = 1000 |
No |
wait_for_exit |
sessionId, timeoutMs = 30000 |
No |
resize |
sessionId, cols, rows |
No |
list_sessions |
none | Yes |
close |
sessionId |
No |
spawnruns the command as$SHELL -c "<command>"(/bin/zshwhenSHELLis unset), so pipes, redirects and builtins work.envis merged with the current environment.waitMsis how long to wait for the first output.send_inputappends Enter unlesspressEnterisfalse, which types without submitting (useful for forms and password fields).send_keyssends the keys in order withdelayBetweenMsbetween them, then waitswaitMs.get_screenwaitswaitMsbefore capturing (default 500;0for an instant capture).searchis a regex: the result adds the matching lines with 2 lines of context.wait_fortakes a regex, matched case-insensitively. Use a longtimeoutMsfor builds.closesends SIGTERM, then SIGKILL if needed, and returns the final screen.spawn,send_input,send_keysandcloseare annotated as destructive, so clients such as Claude Code ask before using them.get_screenandlist_sessionsare annotated read-only.- Every result is JSON.
Keys
send_keys accepts: enter tab escape space up down left right backspace delete home end page_up page_down f1 to f12 ctrl+c ctrl+d ctrl+z ctrl+l ctrl+a ctrl+e ctrl+r ctrl+w ctrl+u ctrl+k ctrl+p ctrl+n y n 0 to 9
Resources
interactive-cli://sessions: JSON list of all sessionsinteractive-cli://sessions/{sessionId}/screen: live screen content of a session (text/plain)
Prompts
Prompt templates for common flows. In Claude Code they appear as slash commands (/mcp__interactive-cli__eas_build).
| Prompt | Arguments |
|---|---|
eas_build |
platform? (default ios), profile? (default production), cwd? |
ssh_session |
host (user@hostname), commands? (semicolon-separated) |
repl_session |
command (python3, node, psql, ...), setup? (semicolon-separated) |
docker_interactive |
image, shellCmd? (default /bin/sh) |
eas_build runs eas build --platform <platform> --profile <profile> --auto-submit. docker_interactive runs docker run -it <image> <shellCmd>.
How it works
graph LR
A[AI Agent] <-->|MCP Protocol| B[interactive-cli server]
B --> C[Session Manager]
C --> D[node-pty<br/><i>real PTY</i>]
C --> E[xterm headless<br/><i>screen render</i>]
C --> F[Truncation<br/><i>80K limit</i>]
D <--> G[Child Process<br/>ssh, eas, python...]
- node-pty spawns a real pseudo-terminal (
xterm-256color), so the child process behaves as it does in your terminal. - xterm headless keeps a virtual terminal (1,000 lines of scrollback) and renders it into a clean 2D text grid.
- Screens are capped at 80,000 characters, cut in the middle with a marker so the start and the end survive. Claude Code caps tool results at 100,000.
Typical flow:
sequenceDiagram
participant Agent as AI Agent
participant MCP as interactive-cli
participant PTY as Process (PTY)
Agent->>MCP: spawn("eas build --platform ios")
MCP->>PTY: Start process in PTY
PTY-->>MCP: Initial output
MCP-->>Agent: sessionId + screen
Agent->>MCP: send_keys(["down","down","enter"])
MCP->>PTY: ↓ ↓ ⏎
PTY-->>MCP: "✔ Selected profile: production"
MCP-->>Agent: updated screen
Agent->>MCP: wait_for("Build complete|error", 600000)
PTY-->>MCP: "✔ Build complete"
MCP-->>Agent: matched + screen
Agent->>MCP: close(sessionId)
MCP->>PTY: SIGTERM
MCP-->>Agent: final screen + exit code
Limits
- macOS and Linux only. Commands run through your shell (
$SHELL -c), and Windows is not supported. - Any screen in a result is capped at 80,000 characters.
- Scrollback is 1,000 lines.
- The agent runs commands with your permissions, in your shell. Review what your client approves.
Development
npm install
npm run build
node dist/index.js
Dependencies: @modelcontextprotocol/sdk, node-pty, @xterm/headless, zod.
License
MIT
interactive-cli MCP Fragen
Welche Tools bietet interactive-cli MCP?
Er stellt 9 Tools bereit, darunter spawn, send_input, send_keys, get_screen, wait_for.
Welche Betriebssysteme werden unterstützt?
Der Server funktioniert nur auf macOS und Linux; Windows wird nicht unterstützt.
Kann der Agent interaktive Prompts wie npm init handhaben?
Ja, er startet Prozesse in einem PTY und rendert den Bildschirm, sodass der Agent auf Prompts antworten und Menüpunkte auswählen kann.
Wie geht der Server mit großen Terminal-Ausgaben um?
Die Screens sind auf 80.000 Zeichen begrenzt, um sicherzustellen, dass sie innerhalb der Limits bleiben, und der Scrollback ist auf 1.000 Zeilen beschränkt.