mcp-ssh-tmux

mcp-ssh-tmux

A high-performance MCP server that manages persistent SSH sessions via a local tmux instance, enabling command execution, file transfer, and session monitoring for AI agents.

Category
访问服务器

README

mcp-ssh-tmux

PyPI version Downloads License: MIT GitHub stars

A high-performance, persistent Model Context Protocol (MCP) server that manages SSH sessions via a local tmux instance.

Why this exists?

Traditional SSH automation runs individual commands without state tracking between executions. Other implementations rely on complex regex patterns to detect command completion. By using tmux as a persistent terminal multiplexer, this project eliminates that complexity entirely. The AI agent simply "looks" at the screen like a human would - the server provides visual snapshots, and the agent interprets prompts, errors, and output naturally.

Key Features

  • Persistence: SSH connections stay alive in tmux even if the MCP server or your AI client restarts.
  • Observability: You can manually run tmux attach -t mcp-ssh to see exactly what the agent is doing in real-time.
  • Reliability: Uses ssh -G for robust config resolution (handles aliases, identity files, etc.).
  • Safety: Built-in command validation to prevent common dangerous operations.
  • File Transfer: Native tools for reading and writing remote files. Reads prefer a full-file SSH transfer and fall back to the existing PTY when needed.

Installation

Requirements

  • tmux must be installed on your system
    • Ubuntu/Debian: apt install tmux
    • macOS: brew install tmux
    • Arch: pacman -S tmux

Via uv (Recommended)

uv tool install mcp-ssh-tmux

Via pip

pip install mcp-ssh-tmux

Configuration

Add this to your mcp.json (e.g., in Claude Desktop, Cursor, or 1mcp):

{
  "mcpServers": {
    "ssh-tmux": {
      "command": "uv",
      "args": [
        "run",
        "mcp-ssh-tmux"
      ]
    }
  }
}

Note: If you installed via uv tool install, you can just use mcp-ssh-tmux as the command.

Tools

  • open_session(host, username, port): Opens a new SSH connection in a unique tmux window.
  • send_command(session_id, command, lines, timeout): Sends a command and polls for a prompt/output. Returns only the last lines of terminal output/scrollback. timeout (default 2.0s) controls how long to wait — increase for slower commands like package installs.
  • send_keys(session_id, keys): Sends raw keystrokes without Enter. Use for Ctrl+C, Ctrl+D, interactive input, etc.
  • get_snapshot(session_id, lines): Captures the current screen state. Returns only the last lines of terminal output/scrollback.
  • read_remote_file(session_id, remote_path, fallback_lines): Reads a remote text file. Prefer this over cat via send_command() when you need the full file contents. fallback_lines controls bounded tmux-history capture if direct SSH read is unavailable.
  • write_remote_file(session_id, remote_path, content, append): Writes content to a remote file.
  • list_sessions(): Lists all active SSH windows.
  • cleanup_dead_sessions(max_age_seconds): Kills all windows where the SSH connection has closed. Optionally filters by how long the session has been dead.
  • close_session(session_id): Kills the window and cleans up. WARNING: This terminates any running processes in the session. For long-running tasks, leave the session open and monitor with get_snapshot().

Transport Modes

By default, the server uses stdio for communication with MCP clients. You can switch to the modern Streamable HTTP transport using environment variables:

# Start server in HTTP mode on port 8080
FASTMCP_TRANSPORT=http FASTMCP_PORT=8080 mcp-ssh-tmux

The server will be available at http://localhost:8080/mcp.

Important Notes

Automatic Cleanup

  • Background Reaper: The server automatically cleans up sessions that have been dead (disconnected) for more than 24 hours.
  • Manual Cleanup: Use cleanup_dead_sessions() to manually clear disconnected sessions at any time.

Reading Files

  • Use read_remote_file() for file contents: send_command("cat ...") and get_snapshot() are screen/snapshot tools, so they only return the tail of terminal output.
  • lines controls snapshot depth: Increase lines on send_command() or get_snapshot() when you need more terminal history, but use read_remote_file() for actual file reads.
  • fallback_lines controls PTY fallback depth: If direct SSH file read is unavailable, read_remote_file() inspects only the last fallback_lines of tmux history. Increase it when needed, but keep it bounded.
  • Best for text files: read_remote_file() is intended for configs, source, logs, and similar text content.

Session Management

  • Do not close sessions with active processes: Closing a session terminates all running commands (builds, downloads, etc.)
  • Monitor long-running tasks: Use get_snapshot() to check progress without closing the session
  • Sessions persist: SSH connections remain alive in tmux even if the MCP server restarts
  • Manual inspection: Run tmux attach -t mcp-ssh to see what's happening in real-time

Acknowledgments

Built with FastMCP and libtmux.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Star History

If you find this project useful, please consider giving it a star! ⭐

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选