accueil / serveurs / Dev & Code / io.github.computer-agent-labs/terminal-use
io.github.computer-agent-labs/terminal-use
serveur MCP (Model Context Protocol)
Aucun comportement malveillant détecté au test comportemental.
Est-ce que io.github.computer-agent-labs/terminal-use est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.computer-agent-labs/terminal-use » est classé « Vérifié ». Aucun comportement malveillant détecté au test comportemental. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Versions auditées & empreintes
Vérifiez la version que vous utilisez : son empreinte doit correspondre à celle listée ici — sinon vous n'utilisez pas la version auditée.
⚠ La dernière version publiée (0.1.2) n'a pas encore été auditée. Un nouveau pentest est programmé ; les verdicts ci-dessous portent sur les versions listées.
Vous utilisez ce serveur ? Suivez-le (créez un compte) pour être alerté dès qu'une nouvelle version paraît ou que le verdict change.
Les 13 outils
- terminal_batch≈ 825 tokens
Send a sequence of inputs in one call and get the screen back once at the end — for driving a full-screen program without a round trip per keystroke (open a menu, move down three, press Enter, type a name, confirm). Actions run in order, each given a moment to take effect before the next. Each action is an object with a `type` and the fields that type uses: - `type`: `text` — typed as keystrokes; \n presses Enter. - `paste`: `text` — delivered as one bracketed paste where the program supports it. - `press`: `key`, optional `count` — same key specs as terminal_press. - `click`: `col`, `row` — left click, sent immediately with no preview; needs the program to track the mouse. - `scroll`: `direction`, optional `amount`, `col`, `row` — as terminal_scroll. - `wait`: `ms` for a fixed pause, or
Paramètres, retour & exemple (5)
ParamètresidleMs· integer · optionnel
Settle window after the last action. Default 200.actions· array · requis
The inputs to send, in order (1 to 50).maxWaitMs· integer · optionnel
Cap on the settle after the last action. Default 5000.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.stepIdleMs· integer · optionnel
How long output must be quiet after each action before the next is sent. Default 100. Raise it for programs that redraw slowly.
Exemple d'appel{"name": "terminal_batch", "arguments": {"actions": [], "sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_click≈ 515 tokens
Deliver a left mouse-button click at a cell in the terminal. Only works when the program currently in the foreground has opted into mouse tracking (vim with `set mouse=a`, fzf, lazygit, less with mouse mode, etc.) — at a plain shell prompt mouse mode is off and the click would just print escape sequences as text, so we refuse the actual click in that case. Coordinates are 1-indexed and refer to the live screen viewport: col 1, row 1 is the top-left cell, and the bottom-right cell is (terminal width, terminal height) which you can see via `terminal_read`'s state header. PREVIEW MODE (default `preview: true`): does NOT click. Returns a PNG with a bright magenta ring + dot drawn around the target cell so you can verify your coordinates. Always do this first when you are not 100% sure where
Paramètres, retour & exemple (7)
Paramètrescol· integer · requis
1-indexed column. Column 1 is the leftmost cell on the visible viewport.row· integer · requis
1-indexed row. Row 1 is the top of the visible viewport.idleMs· integer · optionnelpreview· boolean · optionnel
When true (DEFAULT), render a PNG with a bright magenta ring around the target cell WITHOUT actually clicking. When false, deliver the click and settle for output. Set to false explicitly when you are confident about the coordinates.filePath· string · optionnel
Preview only: absolute path to write the PNG to. If unset, image is inlined as base64.maxWaitMs· integer · optionnelsessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_click", "arguments": {"col": 1, "row": 1, "sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_create≈ 717 tokens
Spawn a new terminal session and return its sessionId. You must call this before any per-session tool — there is no shared default session. By default the session is an interactive shell. Pass `command` to run one program in the terminal instead (a TUI, a test run, a CLI under test): the session then lasts as long as that program, reports its exit status when it ends, and keeps its final screen readable until you destroy it. If the server already holds 50 live sessions, the least-recently-used one is evicted to make room (its sessionId is tombstoned and any later call against it will respawn with an 'evicted' notice).
Paramètres, retour & exemple (10)
Paramètrescwd· string · optionnel
Override the default working directory.env· object · optionnel
Environment variables to set for the session, on top of the server's own environment.cols· integer · optionnelrows· integer · optionnellabel· string · optionnel
Optional human-readable name shown in terminal_list output (e.g. "dev-server").login· boolean · optionnel
Start the shell as a login shell (`-l`), so it reads the profile files (~/.zprofile, ~/.bash_profile, ~/.profile) where PATH is usually set up. Use it when tools that work in the user's own terminal are "command not found" here — typical when the MCP client was started from a GUI rather than a terminal. Slower to start. No effect in PowerShell or cmd.exe. Default false (or the server's --login flag).shell· string · optionnel
Override the default shell (e.g. "/bin/zsh"; on Windows "pwsh.exe" or "cmd.exe" instead of PowerShell).theme· string · optionnel · dark | light | solarized-dark | solarized-light
Color palette used by terminal_screenshot and terminal_click previews for THIS session. Persists across auto-respawn / hardReset. Default "dark" (VS Code Dark+). Options: "dark", "light", "solarized-dark", "solarized-light".command· string · optionnel
Run this command line instead of an interactive shell, e.g. "vim notes.txt" or "npm test". It is run through the session's shell (`sh -c`; on Windows PowerShell `-Command`, or `cmd /c`), so quoting, pipes and redirection work as at that shell's prompt. Input tools talk to the program directly. When it exits, its exit status is reported, the final screen stays readable, and nothing is restarted automatically.scrollback· integer · optionnel
Exemple d'appel{"name": "terminal_create", "arguments": {"cwd": "texte", "env": {}, "cols": 1, "rows": 1, "label": "texte", "login": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_destroy≈ 173 tokens
Kill a session and forget the sessionId entirely. The shell process is terminated and the sessionId is *not* tombstoned — future calls against it will error with "Unknown sessionId". Use this when you're explicitly done with a session. Tombstones (which auto-respawn on next access) only happen for system-driven terminations: idle-kill, eviction, or shell exit.
Paramètres, retour & exemple (1)
ParamètressessionId· integer · requis
Numeric id from terminal_create or terminal_list.
Exemple d'appel{"name": "terminal_destroy", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_list≈ 133 tokens
List every active session and every tombstoned (recently-killed but reserved) sessionId. Tombstones are reservations: the shell is gone but the sessionId can still be called against — doing so respawns a fresh shell under the same id and surfaces the original termination reason (shell-exit, idle-killed, or evicted). Tombstones expire after 30 days; after that the id is gone.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "terminal_list", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_press≈ 318 tokens
Press a single named key or key combination. Examples of supported `key` values: `Enter`, `Tab`, `Escape`, `Backspace`, `Space`, `ArrowUp` / `ArrowDown` / `ArrowLeft` / `ArrowRight`, `Home`, `End`, `PageUp`, `PageDown`, `Delete`, `Insert`, `F1`..`F12`, `Ctrl+C`, `Ctrl+D`, `Ctrl+L`, `Ctrl+A`..`Ctrl+Z`, `Shift+Tab`, `Alt+B`, `Ctrl+ArrowLeft`, `Ctrl+Shift+ArrowRight`, etc. Same settle behavior as `terminal_type`.
Paramètres, retour & exemple (5)
Paramètreskey· string · requis
Key spec like "Enter", "Ctrl+C", "Shift+Tab", "ArrowUp", "F5", "Ctrl+Shift+ArrowLeft".count· integer · optionnel
Press the key this many times in a row (e.g. ArrowUp x 5). Default 1.idleMs· integer · optionnelmaxWaitMs· integer · optionnelsessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_press", "arguments": {"key": "texte", "sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_read≈ 518 tokens
Read a window of the terminal buffer. The buffer is the full xterm-emulated state (scrollback + visible viewport) in one contiguous index space. The window is paged from the bottom upward in multiples of `rows`. `rows` defaults to the current screen height and is capped at 1000. `page: 0` is the most recent screen-sized chunk; `page: 1` is the screen before that, and so on. Trailing blank rows are trimmed implicitly.
Paramètres, retour & exemple (6)
Paramètrespage· integer · optionnel
0 = newest screen-sized window. N = scroll up N pages (each page = `rows` lines). Past-top clamps.rows· integer · optionnel
Window height. Default = current screen height. Max 1000.cursor· boolean · optionnel
When true (default), mark the cursor inline with "▌". On an empty cell it takes the place of the blank; on a character it is inserted in front of that character, which shifts the rest of that one line right by a column. Nothing is overwritten. Skipped automatically while the program has the cursor hidden. Set to false if you need the unmodified text.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.highlights· boolean · optionnel
When true (default), list text on the current screen that is drawn in reverse video or on a background color — how TUIs show the selected menu entry, tab or button — with its screen row and columns. Plain text cannot show this otherwise.joinWrapped· boolean · optionnel
When true (default), rows the terminal soft-wrapped at its right edge are joined back into the single long line the program printed. Set to false to get one line per screen row.
Exemple d'appel{"name": "terminal_read", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_reset≈ 337 tokens
Wipe the terminal buffer and scrollback. By default the shell process keeps running (env vars, cwd, history all preserved). Pass `hardReset: true` to kill the current shell and spawn a brand-new one — anything mid-execution gets killed. When `hardReset: true`, you can also override `cols`, `rows`, `shell`, and `cwd`. In a session created with `command`, a hard reset runs that command again.
Paramètres, retour & exemple (6)
Paramètrescwd· string · optionnel
hardReset only: working directory for the new shell.cols· integer · optionnel
hardReset only: spawn at this width.rows· integer · optionnel
hardReset only: spawn at this height.shell· string · optionnel
hardReset only: shell command (default $SHELL).hardReset· boolean · optionnel
Kill + respawn the shell instead of just clearing the buffer. Default false.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_reset", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_resize≈ 216 tokens
Change the terminal size. Both `cols` and `rows` are optional; omitting one preserves the current value. Resizes both the PTY and the emulator (so programs running inside see the change via SIGWINCH).
Paramètres, retour & exemple (3)
Paramètrescols· integer · optionnel
New column count (1..1000). Omit to keep current cols.rows· integer · optionnel
New row count (1..1000). Omit to keep current rows.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_resize", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_screenshot≈ 271 tokens
Render a screen-sized window of the terminal to a PNG. Height is always the current screen height (`term.rows`); use `page` to walk back through scrollback in screen-sized increments at the same dimensions as the live screen. If `filePath` is set, the PNG is written there and the path is returned. Large images (>2097152 bytes) are also spilled to a temp file automatically.
Paramètres, retour & exemple (3)
Paramètrespage· integer · optionnel
0 = current live screen. N = the screen-sized window N screens earlier. Past-top clamps.filePath· string · optionnel
Absolute path to write the PNG to. If unset, image is inlined as base64.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_screenshot", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_scroll≈ 405 tokens
Turn the mouse wheel over a cell of a full-screen program: scroll a pager, a file list, a log pane. Behaves as a terminal emulator does — programs that track the mouse receive wheel events at that cell (so the pane under it scrolls); full-screen programs that do not (less, man) receive arrow keys instead. At a plain shell prompt there is nothing to scroll and the call fails: earlier output is read with `terminal_read` and its `page` argument, not by scrolling.
Paramètres, retour & exemple (7)
Paramètrescol· integer · optionnel
1-indexed column the pointer is over. Matters when panes scroll independently. Default: screen center.row· integer · optionnel
1-indexed row the pointer is over. Default: screen center.amount· integer · optionnel
Wheel notches. Most programs move about 3 lines per notch. Default 3.idleMs· integer · optionneldirection· string · requis · up | down
"up" moves toward earlier content, "down" toward later.maxWaitMs· integer · optionnelsessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_scroll", "arguments": {"direction": "up", "sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_type≈ 413 tokens
Type literal characters into the terminal as if a human were pressing keys. Embedded `\n` is normalized to `\r` so `"git push\n"` actually submits. Always waits for the buffer to settle (or to time out) before returning. The wait is capped at 10s; for anything slower (builds, installs, test runs) follow up with `terminal_wait`, which blocks until the command actually finishes.
Paramètres, retour & exemple (5)
Paramètrestext· string · requis
Characters to type. Embedded \n becomes Enter.paste· boolean · optionnel
Deliver the text as a single paste instead of keystrokes. Use it for multi-line text going into an editor, a REPL or a shell prompt: programs that support bracketed paste insert it verbatim (no auto-indent, lines are not run one by one), and nothing is submitted until you press Enter. Programs that do not support it receive the plain characters. Default false.idleMs· integer · optionnel
Settle window: silence this long after the last byte counts as settled. Default 200.maxWaitMs· integer · optionnel
Overall cap on the settle wait. Default 5000, clamped to 10000. Use terminal_wait for longer.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.
Exemple d'appel{"name": "terminal_type", "arguments": {"text": "texte", "sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - terminal_wait≈ 574 tokens
Block until the terminal reaches a state, instead of guessing with sleeps or polling `terminal_read`. Use it after `terminal_type` for anything that outlives the settle window: builds, installs, test runs, servers starting up. DEFAULT (no `pattern`): waits for the running command to finish — i.e. for the shell to take the terminal's foreground back and its prompt to go quiet. This asks the kernel who owns the terminal, so it works with any prompt and stays correct while a command is silent (`sleep 60`) or chatty. Returns immediately if the shell is already at its prompt. On Windows this cannot be detected in a shell session: the call waits for a stretch of silence instead and says so — prefer `pattern` there. In a session created with `command`, it waits for that command to exit and repor
Paramètres, retour & exemple (5)
Paramètresuntil· string · optionnel · command | quiet
"command" (default): the running command has finished and the shell is back at its prompt. "quiet": output has been silent for `quietMs`. Ignored when `pattern` is given.pattern· string · optionnel
JavaScript regular expression matched against the screen text, lines joined with "\n" (e.g. "Listening on .*:3000", "^>>>\\s*$", "(?i)error"). `^` and `$` match at the start and end of each line; trailing spaces are trimmed from screen lines, so do not match a space after a prompt. Omit to wait for command completion.quietMs· integer · optionnel
How long the output must stay silent. With until="command" (default 300) it applies once the shell is back in the foreground, so the prompt has finished drawing; with until="quiet" (default 1000) it is the whole condition.sessionId· integer · requis
Numeric id of the session to target. Get one by calling terminal_create. Use terminal_list to enumerate currently-known ids.timeoutMs· integer · optionnel
Give up after this long. Default 30000, max 600000.
Exemple d'appel{"name": "terminal_wait", "arguments": {"sessionId": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
Badge pour votre README
Ce serveur a passé le pentest comportemental. Le badge porte son nom et renvoie à cette fiche — la preuve, c'est la fiche (verdict live qu'on contrôle), pas l'image.
[](https://dokore.fr/serveur/io.github.computer-agent-labs--terminal-use)
<a href="https://dokore.fr/serveur/io.github.computer-agent-labs--terminal-use"><img src="https://dokore.fr/badge/io.github.computer-agent-labs--terminal-use.svg" alt="Vérifié par MCP Hub" height="20"></a>
Réévalué en continu : si le comportement change, le verdict tombe et le badge disparaît. Un badge qui ne pointe pas vers une fiche dokore.fr ne prouve rien. Comment ça marche
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».
Source
terminal-use@0.1.1