terminal-mcp について
terminal-mcpは、永続的な対話型ターミナルセッションを必要とするAIエージェント向けのMCPサーバーです。PTYを介してSSH、REPL、データベースCLI、TUIアプリ、長時間実行プロセスを扱い、セッション操作とコマンドの安全確認を提供します。
主な機能
- 01永続的なPTYセッション
- 02SSH、REPL、データベースCLIでの対話操作
- 03TUIの画面スナップショットと差分
- 04パターン指定による出力待機
- 05危険なコマンドの確認ゲート
活用シーン
- 01SSHセッションで複数のコマンドを実行
- 02Python REPLで対話的に作業
- 03データベースCLIでの確認とクエリ
- 04ビルドの監視やTUIアプリの操作
MCP 対応
セッションの作成、対話、読み取り、サイズ変更、一覧表示、終了と、単発コマンドの実行に使う9種類のMCPツールを公開します。MCPクライアントはこれらのツールで永続的なターミナルセッションを操作できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
7掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| cols | integer | いいえ | ターミナルの幅(列数) |
| rows | integer | いいえ | ターミナルの高さ(行数) |
| label | string | いいえ | セッションの人間が読みやすいラベル |
| command | string | はい | 実行する Shell コマンド(例:'bash'、'python3'、'ssh user@host') |
| idle_timeout | integer | いいえ | アイドル状態のセッションを自動終了するまでの秒数 |
| enable_snapshot | boolean | いいえ | スナップショット読み取り用の pyte 画面バッファーを有効にします |
| scrollback_lines | integer | いいえ | 保持するスクロールバック履歴の行数(要 enable_snapshot) |
詳細
AI に本物のターミナルを。永続セッション。対話型プログラム。制限なし。
問題点
あらゆる AI コーディングツールが、同じ壁に突き当たります。本物のターミナルにアクセスできないのです。
Claude Code の Bash ツール、GitHub Copilot、Codex は、いずれもコマンドを独立したサブプロセスで実行します。コマンドごとに新しいプロセスが開始され、状態は引き継がれません。そのため、次のことができません。
- SSH セッション - リモートサーバーに接続し、複数のコマンドを実行できません
- REPL - Python、Node、Ruby のインタープリターを対話的に使えません
- データベース CLI - psql、mysql、redis-cli の接続を維持できません
- TUI アプリ - 矢印キーで htop、vim、fzf を操作できません
- 長時間実行プロセス - ビルドの監視、ログの確認、開発サーバーの実行ができません
解決策
terminal-mcp は AI エージェントに本物のターミナルを提供します。ツール呼び出しをまたいで維持される永続的な PTY セッションを利用できます。コマンドの送信、出力の読み取り、キー入力、TUI の操作を、人間がターミナルを使うのとまったく同じように行えます。
uvx terminal-mcp
コマンドは 1 つだけ。Claude Code、Claude Desktop、VS Code、Cursor、Windsurf で動作します。
クイックスタート
1. インストール(30 秒)
# No install needed - run directly
uvx terminal-mcp
# Or install globally
pip install terminal-mcp
2. AI クライアントに接続する
Claude Code
~/.claude.json またはプロジェクトの .mcp.json に追加します。
{
"mcpServers": {
"terminal": {
"command": "uvx",
"args": ["terminal-mcp"]
}
}
}
Claude Desktop
claude_desktop_config.json に追加します。
{
"mcpServers": {
"terminal": {
"command": "uvx",
"args": ["terminal-mcp"]
}
}
}
VS Code / Cursor
上のワンクリックインストールバッジをクリックするか、.vscode/mcp.json に追加します。
{
"servers": {
"terminal-mcp": {
"command": "uvx",
"args": ["terminal-mcp"]
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json に追加します。
{
"mcpServers": {
"terminal": {
"command": "uvx",
"args": ["terminal-mcp"]
}
}
}
3. 動作を確認する
session_exec exec="echo hello from terminal-mcp"
何ができますか?
リモートサーバーに SSH 接続する
session_create command="ssh [email protected]" label="prod"
session_interact session_id="a1b2c3d4" input="df -h" wait_for="\$"
session_interact session_id="a1b2c3d4" input="docker ps" wait_for="\$"
session_close session_id="a1b2c3d4"
対話型 REPL を実行する
session_create command="python3" label="python"
session_interact session_id="e5f6g7h8" input="import pandas as pd" wait_for=">>>"
session_interact session_id="e5f6g7h8" input="df = pd.read_csv('data.csv')" wait_for=">>>"
session_interact session_id="e5f6g7h8" input="df.describe()" wait_for=">>>"
session_close session_id="e5f6g7h8"
データベースにクエリを実行する
session_create command="psql -U admin mydb" label="db"
session_interact session_id="x1y2z3w4" input="SELECT count(*) FROM users;" wait_for="row"
session_interact session_id="x1y2z3w4" input="\dt" wait_for="#"
session_close session_id="x1y2z3w4"
TUI アプリを操作する
session_create command="htop" label="monitor"
session_read session_id="a1b2c3d4"
# Auto-detects TUI, returns screen snapshot
session_send session_id="a1b2c3d4" key="F6"
session_read session_id="a1b2c3d4" mode="diff"
# Returns only changed lines - saves tokens
session_send session_id="a1b2c3d4" key="F10"
session_close session_id="a1b2c3d4"
長時間実行されるビルドを監視する
session_create command="bash" label="build"
session_send session_id="a1b2c3d4" input="npm run build"
session_wait_for session_id="a1b2c3d4" pattern="Build complete|ERROR" timeout=120
単発コマンドを実行する
session_exec exec="git log --oneline -10"
session_exec exec="docker compose ps" timeout=10
主な機能
| 機能 | 内容 |
|---|---|
| セッションの永続化 | ツール呼び出しをまたいで維持される実際の PTY セッション |
| 1 回の呼び出しで送信+読み取り | session_interact により、LLM とのラウンドトリップを半減できます |
| パターンベースの読み取り | 正規表現に一致するまで wait_for が待機するため、タイムアウトを推測する必要がありません |
| TUI の自動検出 | htop、vim などを検出し、画面スナップショットモードに自動で切り替えます |
| 出力差分モード | 変更された画面の行だけを返し、トークンを最小限に抑えます |
| 特殊キー | 矢印キー、Tab、F1〜F12、Home/End、Page Up/Down |
| 制御文字 | Ctrl-C、Ctrl-D、Ctrl-Z、Ctrl-L、telnet エスケープ |
| 危険なコマンドのゲート | rm -rf、DROP TABLE、curl|sh をブロックし、確認を必須にします |
| OSC 133 シェル統合 | コマンドの境界と終了コードを自動検出します |
| スマートな切り詰め | コンテキストのオーバーフローを防ぐ 4 つの方法 |
| シークレット入力 | ログに記録せずにパスワードを送信します |
| 動的リサイズ | SIGWINCH により、実行中にターミナルのサイズを変更できます |
| アイドル時のクリーンアップ | アイドル状態のセッションを自動的に閉じます |
| クロスプラットフォーム | Linux、macOS、Windows に対応 |
ツールリファレンス
terminal-mcp は 9 個の MCP ツールを公開します。詳しくはdocs/tools.mdをご覧ください。
| ツール | 目的 |
|---|---|
session_create | 永続的なターミナルセッションを起動します |
session_send | テキスト、キー、または制御文字を送信します |
session_read | 出力を読み取ります(stream、snapshot、auto、diff モード) |
session_interact | 1 回の呼び出しで送信と読み取りを行います |
session_wait_for | 出力内の正規表現パターンを待ちます |
session_exec | 単発のコマンドを実行します |
session_close | セッションを正常に終了します |
session_resize | ターミナルのサイズを変更します |
session_list | アクティブなセッションを一覧表示します |
アーキテクチャ
flowchart LR
Client[AI Client] -->|MCP JSON-RPC| Server[terminal-mcp]
Server --> SM[Session Manager]
SM --> S1[PTY 1: bash]
SM --> S2[PTY 2: python3]
SM --> S3[PTY 3: ssh user@host]
S1 & S2 & S3 -.->|PTY output| Reader[Reader Thread]
Reader -.->|buffer| Server
各セッションは、pexpect.spawn(Windows では PopenSpawn)を介して実際の PTY を使用します。アーキテクチャの詳細は、docs/architecture.mdをご覧ください。
設定
すべての設定は TERMINAL_MCP_* 環境変数で指定できます。設定の詳細はdocs/configuration.mdをご覧ください。
| 設定 | 環境変数 | デフォルト |
|---|---|---|
| セッションの最大数 | TERMINAL_MCP_MAX_SESSIONS | 10 |
| アイドルタイムアウト | TERMINAL_MCP_IDLE_TIMEOUT | 1800(30 分) |
| 安全ゲート | TERMINAL_MCP_SAFETY_GATE | on |
| バッファー上限 | TERMINAL_MCP_MAX_BUFFER_BYTES | 1000000(1MB) |
| 切り詰め | TERMINAL_MCP_TRUNCATION_MODE | tail |
カスタム設定の例:
{
"mcpServers": {
"terminal": {
"command": "uvx",
"args": ["terminal-mcp"],
"env": {
"TERMINAL_MCP_MAX_SESSIONS": "20",
"TERMINAL_MCP_IDLE_TIMEOUT": "3600",
"TERMINAL_MCP_TRUNCATION_MODE": "head_tail"
}
}
}
}
ドキュメント
| ドキュメント | 説明 |
|---|---|
| ツールリファレンス | 9 個すべての MCP ツールの API 詳細 |
| アーキテクチャ | terminal-mcp の内部動作 |
| 設定 | すべての設定と環境変数 |
| 安全性とセキュリティ | 危険なコマンドの検出と安全ゲート |
| ユースケースと例 | 実際の使用例とパターン |
| 変更履歴 | バージョン履歴とリリースノート |
| コントリビューション | コントリビューションの方法 |
Supported Clients
| Client | Status | Install |
|---|---|---|
| Claude Code (CLI) | Supported | ~/.claude.json or .mcp.json |
| Claude Desktop | Supported | One-click install |
| VS Code (Copilot Chat) | Supported | One-click install or .vscode/mcp.json |
| Cursor | Supported | One-click install or Settings |
| Windsurf | Supported | ~/.codeium/windsurf/mcp_config.json |
Running Tests
pip install -e ".[dev]"
pytest tests/ -v
Contributing
Contributions welcome! See docs/contributing.md for guidelines.
License
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。