interactive-cli MCP server
Commit 4 Nov 2026Memungkinkan AI agent untuk berinteraksi dengan proses terminal menggunakan pseudo-terminal dan headless xterm rendering untuk menangani prompt dan REPL.
Juga dikenal sebagai ohernandezdev/interactive-cli
- Stars
- 1
- Tools
- 9
- Unduhan, 30 hari
- —
- Versi terbaru
- —
- Commit terakhir
- 4 Nov 2026
- Lisensi
- MIT
Apa itu interactive-cli MCP?
interactive-cli adalah MCP server. Memungkinkan AI agent untuk berinteraksi dengan proses terminal menggunakan pseudo-terminal dan headless xterm rendering untuk menangani prompt dan REPL. Server ini menyediakan 9 tool, seperti spawn, send_input, send_keys.
Ringkasan dibuat dari README proyek
Tentang interactive-cli MCP server
MCP server ini memungkinkan Anda menjalankan proses terminal interaktif seperti installer, sesi SSH, atau REPL melalui AI agent. Jika tool shell standar sering kali membuat agent hang saat menunggu input pengguna, server ini menggunakan pseudo-terminal asli dan headless xterm rendering untuk menyediakan grid teks layar yang bersih. Hal ini memungkinkan agent untuk melihat prompt, menavigasi menu, dan memberikan jawaban layaknya manusia.
Developer dapat menggunakan ini di macOS atau Linux dengan MCP client apa pun yang mendukung stdio, termasuk Claude Code, Cursor, Windsurf, dan Codex. Server ini menyediakan tool spesifik seperti spawn untuk memulai proses, send_keys untuk simulasi navigasi keyboard, dan send_input untuk mengetik teks ke dalam form. Server ini juga menyertakan tool wait_for yang menggunakan regex untuk memantau pola tertentu seperti penyelesaian build atau error.
Karena server menjalankan perintah melalui shell lokal Anda, agent akan beroperasi dengan izin (permissions) yang Anda miliki. Untuk mencegah client kelebihan beban, tangkapan layar dibatasi hingga 80.000 karakter, dan sistem akan mempertahankan buffer scrollback sebanyak 1.000 baris.
Apa yang bisa Anda lakukan dengannya
- 1Otomatisasi proses build yang kompleksAnda dapat menginstruksikan agent untuk menjalankan build dan menunggu munculnya pesan sukses atau error tertentu.
Ditulis berdasarkan README proyek. Setiap use case diperiksa terhadap kutipan dari README tersebut.
Tool interactive-cli MCP 9
Terdeteksi dari READMEspawnsend_inputsend_keysget_screenwait_forwait_for_exitresizelist_sessionsclose
| spawn | — | |
| send_input | — | |
| send_keys | — | |
| get_screen | — | |
| wait_for | — | |
| wait_for_exit | — | |
| resize | — | |
| list_sessions | — | |
| close | — |
Pengecekan otomatis
Berjalan 14 Nov 2026Laporan lengkap →Belum diverifikasi. Sebuah server memerlukan skor 80, tidak ada temuan serius, dan data yang cukup untuk kami periksa. Cara kerja checks · Yang perlu diperbaiki untuk menambah poin
- Source repository terhubung dan dapat dijangkauohernandezdev/interactive-cli is public and reachablegithub.com/ohernandezdev/interactive-cli ↗Lolos
- Nama paket mencantumkan repositori ini sebagai sumbernyaTidak diperiksa
- Provenance build (atestasi Sigstore)Tidak diperiksa
- Lisensi open source (OSI)MITspdx.org/licenses/MIT.html ↗Lolos
- Ada commit atau release dalam satu tahun terakhirLast commit or release 2026-11-04github.com/ohernandezdev/interactive-cli ↗Lolos
- OpenSSF ScorecardTidak diperiksa
- Nama package tidak mirip dengan package populerTidak diperiksa
- Tidak ada advisory kritis pada paket atau dependensinyaTidak diperiksa
- Tidak ada instruksi tersembunyi untuk model9 tool descriptions and the README read; no override phrases, credential paths or hidden charactersLolos
- Tools yang bersifat destruktif telah diberi labelNo tool named like delete, drop or execLolos
- Endpoint remote merespons handshake MCPTidak diperiksa
README
Lihat di GitHubinteractive-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
Pertanyaan tentang interactive-cli MCP
Tool apa yang disediakan interactive-cli MCP?
Server ini menyediakan 9 tool, termasuk spawn, send_input, send_keys, get_screen, wait_for.
Sistem operasi apa saja yang didukung?
Server ini hanya berfungsi pada macOS dan Linux; Windows tidak didukung.
Apakah agent bisa menangani prompt interaktif seperti npm init?
Ya, server ini menjalankan proses dalam PTY dan merender layar sehingga agent dapat menjawab prompt dan memilih item menu.
Bagaimana server menangani output terminal yang besar?
Tampilan layar dibatasi hingga 80.000 karakter untuk memastikan tetap sesuai dengan limit, dan scrollback dibatasi hingga 1.000 baris.