프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

terminal-use

제작자: computer-agent-labs버전 0.2.1i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.computer-agent-labs/terminal-use

설치

개요

제작자가 쓴 설명(영어 원문)

Lets AI agents drive a real terminal: type, press keys, click, read the screen, take screenshots.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 기타

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 레지스트리에 입력해야 할 키가 나와 있지 않아요.

필요한 것

  • npmNode.js 설치(npx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "terminal-use": {
      "command": "npx",
      "args": [
        "-y",
        "terminal-use"
      ]
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add terminal-use -- npx -y terminal-use

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "terminal-use": {
      "command": "npx",
      "args": [
        "-y",
        "terminal-use"
      ]
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "terminal-use": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "terminal-use"
      ]
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 computer-agent-labs 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 32484개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 32484개 중 70%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 32484개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

terminal-use, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.2.1)은 16일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Recta

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Spec Driven Development

제작자: formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

내 컴퓨터에서 실행★ 440MIT14개월 전 업데이트
설치

Remote Desktop Commander

제작자: desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

클라우드에서 실행★ 211어제 업데이트
설치

Recta

제작자: RectaBuild

Cheaper cross-chain stablecoin routes for AI agents; 5 % of the verified saving, nothing if none.

컴퓨터 또는 클라우드오늘 업데이트
설치

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

terminal-use

An MCP server that lets an AI agent use a real terminal the way a person does: type, press keys, click, read the screen, take a screenshot.

*Every frame above was drawn by terminal-use's own screenshot renderer; the caption on each is the tool call that produced it.*

Most agent shell tools run a command and hand back its output. That breaks down for anything interactive — vim, htop, a REPL, an installer asking questions, git rebase -i, an SSH session. terminal-use gives the agent a shell on a real pseudo-terminal, rendered by a real terminal emulator, so full-screen and interactive programs work and the agent sees what you would see.

  • Real PTY, real emulator — colors, cursor movement and the alternate screen are interpreted, not passed along as escape codes.
  • Text and pixels — read the screen as plain text, or as a PNG when layout and color matter.
  • Waits properly — block until a command actually finishes, or until some text appears.
  • Watch along — attach your own terminal to any session and type alongside the agent.

Quick start

Requires Node.js 22.12 or newer, on macOS, Linux or Windows.

Pick your client:

ClientHow to add it
Claude Codeclaude mcp add terminal-use --scope user -- npx -y terminal-use
CursorAdd to Cursor
VS CodeAdd to VS Code
Codexcodex mcp add terminal-use -- npx -y terminal-use
Gemini CLIgemini mcp add -s user terminal-use npx -y terminal-use

Claude Desktop, and any other client that takes a command: add this to its MCP configuration (for Claude Desktop: Settings → Developer → Edit Config).

{

"mcpServers": { "terminal-use": { "command": "npx", "args": ["-y", "terminal-use"] } } }

Start a new session in your client and ask it to do something in a terminal, for example: *"Open vim, write a haiku into /tmp/haiku.txt, save and quit, then show me a screenshot of cat-ing it."*

Server options go after the command: npx -y terminal-use --cols 100 --rows 40.

OptionDefault
--shell $SHELL or /bin/bash; PowerShell on WindowsShell to run in new sessions
--cwd where the server was startedWorking directory for new sessions
--cols / --rows 120 / 30Terminal size
--scrollback 5000Lines of history kept
--loginoffStart shells as login shells (see below)
"command not found" inside a session

If programs that work in your own terminal (node, brew, pyenv…) are missing inside a session, the server probably inherited a bare environment. That happens when the MCP client is started from the Dock or a launcher instead of a terminal: your PATH is set up by your shell's profile files (~/.zprofile, ~/.bash_profile, ~/.profile), and nothing has read them.

A login shell reads those files. Turn it on for every session with the --login server flag, or for one session with login: true on terminal_create. It is off by default because it makes each shell slower to start and runs whatever your profile runs. It has no effect in PowerShell or cmd.exe, which have no login mode.

Tools

Every tool except terminal_create and terminal_list takes the sessionId that terminal_create returns.

ToolWhat it does
terminal_createStart a session: an interactive shell, or one program with command. Optional label, cols, rows, shell, cwd, env, login, scrollback, theme.
terminal_listList sessions.
terminal_destroyEnd a session.
terminal_typeType text. \n presses Enter. paste: true sends it as one paste.
terminal_pressPress a key or combination: Enter, Ctrl+C, ArrowUp, Shift+Tab, Alt+Enter, F5…
terminal_waitWait for the running command to finish, for a regex to appear, or for output to go quiet.
terminal_readRead the screen or scrollback as text.
terminal_screenshotRender the screen as a PNG.
terminal_clickLeft-click a cell, with a preview step.
terminal_scrollTurn the mouse wheel over a cell.
terminal_batchSend several inputs in one call and get the screen back once.
terminal_resizeChange the terminal size.
terminal_resetClear the screen and scrollback, or restart the shell with hardReset: true.

Docker

The repository has a Dockerfile for running the server in a container:

docker build -t terminal-use .

docker run -i --rm -v "$PWD":/workspace terminal-use

In an MCP client, use docker as the command with run -i --rm terminal-use as its arguments. The terminals the agent gets are then shells inside the container, not on your machine: it sees only what you mount, which is the point if you want it boxed in. Attaching from your own terminal is not available in this setup.

The skill

terminal-use comes with an Agent Skill: a short guide for the agent on how to use these tools well — when to use a command session, how to wait, how to read what is selected — plus recipes for vim, pagers, REPLs, menu-driven programs, ssh prompts and end-to-end testing of a TUI. It lives in skills/terminal-use.

  • Hosts that load skills from MCP servers get it automatically. The server implements the MCP Skills extension (io.modelcontextprotocol/skills): the skill is listed by skills/list and its files are served as skill://terminal-use/... resources. Few hosts support this yet.
  • Hosts that load skills from disk can install the same files. For Claude Code:
  cp -r "$(npx -y terminal-use skills-dir)/terminal-use" ~/.claude/skills/

The skill is optional. Without it the agent still has the tool descriptions and the server's built-in instructions.

Shell sessions and command sessions

By default a session is an interactive shell: type commands into it as you would at a prompt.

Pass command to terminal_create to run one program in the terminal instead:

{"command": "npm test -- --watch", "cwd": "/path/to/project", "env": {"CI": "1"}}

The command goes through the session's shell (sh -c, PowerShell -Command, or cmd /c), so quoting, pipes and redirection work as they do at that shell's prompt. Input goes straight to the program. When it exits:

  • its exit status is reported (by the call that was in progress, by terminal_wait, and in terminal_list);
  • the final screen stays readable with terminal_read and terminal_screenshot;
  • input tools return an error with the exit status rather than restarting anything;
  • terminal_reset with hardReset: true runs it again, and terminal_destroy removes it.

This is the mode for testing a CLI or TUI: launch it, drive it, check how it ended.

Watching and typing along

terminal_create returns a command you can run in your own terminal to join the session:

node /path/to/terminal-use/bin/terminal-use.js attach 3 --socket /tmp/terminal-use-501/41234-3.sock

You see what the agent sees and can type into the same shell. It works like a shared tmux session: several people can attach at once, and Ctrl+] detaches.

  • You get the current screen and recent scrollback on connect, not a blank terminal.
  • --resize makes the session follow your window size. By default the session keeps its own.
  • --socket picks the server. Each MCP client runs its own terminal-use, and they all number sessions from 1; without --socket, attach works when only one running server has that id and lists the candidates otherwise.
  • On Windows the session is reached through a named pipe instead of a socket file; the command you are given works the same way.
  • Sockets are per-user (0600, inside a 0700 directory under the system temp dir). Anyone who can connect gets a shell as you, so they are not exposed any further than that.

How it works

agent ──MCP──▶ terminal-use ──▶ node-pty ──▶ your shell

│ └─ @xterm/headless ◀── everything the shell prints │ ├─ terminal_read (text) └─ terminal_screenshot (PNG)

node-pty runs the shell on a pseudo-terminal. Everything it prints is fed to a headless xterm.js emulator, and that emulator's buffer is the single source of truth: reads and screenshots both come from it, so the agent gets the rendered screen rather than a stream of escape codes.

Details

Waiting for things

terminal_type, terminal_press and terminal_click return once output has been quiet for a moment (idleMs, default 200 ms) and never wait longer than 10 seconds. That suits keystrokes. It doesn't suit a build, which can be silent for a while long before it is done. For anything slow, follow up with terminal_wait:

  • Default — wait for the command to finish. terminal-use asks the kernel which process owns the terminal's foreground. A shell hands the terminal to each command it runs and takes it back afterwards, so when the shell owns it again, the prompt is back. This needs no shell integration or prompt parsing, and works for commands that print nothing.
  • `pattern` — wait for a regex to match the screen. For things that never exit (Listening on port), REPL prompts, or a particular state of a TUI. ^ and $ match at line starts and ends; a leading (?i) or (?s) sets further flags.
  • `until: "quiet"` — wait for output to stop for quietMs (default 1 s). The same rule the typing tools use, without the 10-second cap.

In a command session, the default mode waits for the program to exit and reports its exit status.

timeoutMs defaults to 30 seconds (maximum 10 minutes). A timeout isn't an error: the response says the command is still running, and you can wait again.

On Windows there is no way to ask who owns the terminal, so in a shell session the default mode waits for two seconds of silence instead, and says it is a guess. Prefer a pattern there, or run the program as a command session, where waiting for it to exit works on every platform.

Limits worth knowing: background jobs (cmd &) don't count as running. Inside a nested program such as ssh or a REPL, the outer shell doesn't get the foreground back until that program exits, so use pattern or until: "quiet" there. No exit status is reported; run echo $?.

Reading the screen

terminal_read returns text in screen-sized pages: page: 0 is the current screen, page: 1 the one before it, and so on back through scrollback.

Lines the terminal wrapped at its right edge are joined back into the single line the program printed (joinWrapped: false gives one line per screen row).

Text can't show color, so it can't show which menu entry is selected. Reads therefore end with a list of what is highlighted on screen — text in reverse video or on a background color — with the row and columns terminal_click takes:

Highlighted on screen (reverse video or background color; screen row, columns):

row 7, cols 3-18: "Unstaged changes"

If most of the screen is colored panels, the list is replaced by a pointer to terminal_screenshot. Turn it off with highlights: false.

The cursor is marked with ▌. On an empty cell it simply tak

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기