Skip to main content

tmux-mcp

Model Context Protocol (MCP) server for tmux, written in Python and distributed via uvx.

Exposes 37 granular tools covering sessions, windows, panes, layouts, status inspection, and secure command execution using event-driven pipe-pane + wait-for primitives.


Key Features & Security Design

  • No Shell Injection Vulnerabilities: All tmux interactions execute strictly via argv parameter arrays without shell=True.
  • Event-Driven Execution Engine: Uses pipe-pane streams and tmux wait-for events instead of polling or scrollback regex. Captures exact return codes and complete output streams (>50,000 lines tested without truncation).
  • Interactive App Guard: Automatically blocks non-shell panes (e.g. vim, htop, python) from accidental command injection, prompting the caller to use keypress tools (send_keys) instead.
  • Strict Protocol & Output Purity: Zero stray stdout prints to prevent corrupting the MCP stdio JSON-RPC transport stream (logging strictly routed to sys.stderr).
  • Portable Flat Tool Schemas: Compatible with all MCP clients (Claude Code, Claude Desktop, OpenCode, Cursor, Windsurf, Zed, Continue, VS Code) by enforcing flat JSON schemas without unsupported $ref/$defs/anyOf constructs.

Quick Start

Run instantly without installing Python dependencies using uvx:

# Run with standard profile (default 22 tools)
uvx tmux-mcp-server

# Run with full profile (all 37 tools including destructive actions)
uvx tmux-mcp-server --tools=full

# Run in read-only mode (13 read tools)
uvx tmux-mcp-server --read-only

Tool Profiles

Profile Tools Count Description
standard (default) 22 All read, interact, split, resize, layout, and command execution tools (excludes destructive kill-* tools).
full 37 Complete set of 37 tools, including destructive operations (kill_session, kill_window, kill_pane).
read 13 Read-only inspection tools. Safe for unrestricted agent usage.
Custom N Comma-separated list of tool names (e.g. --tools=list_sessions,read_pane,run_command).

Client Configuration Examples

Watch the package name. This project is tmux-mcp-server. Do not configure "args": ["tmux-mcp"] — tmux-mcp is an unrelated, already-published PyPI package, and uvx would silently download and run that one instead.

Working on the code? Point the client at your checkout so edits take effect immediately:

"args": ["run", "--directory", "/absolute/path/to/tmux-mcp-server", "tmux-mcp-server"]

with "command": "uv". Note that uvx --from <path> caches the built wheel per version, so local edits are not picked up until you bump version in pyproject.toml — uv run --directory has no such caching.

1. Claude Code

Add to ~/.claude.json or .claude.json:

{
  "mcpServers": {
    "tmux": {
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  }
}

2. Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "tmux": {
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  }
}

3. OpenCode

Add to ~/.config/opencode/opencode.json (or project .opencode/mcp.json):

{
  "mcpServers": {
    "tmux": {
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  }
}

4. Cursor

Add to Settings -> Features -> MCP:

  • Name: tmux
  • Type: command
  • Command: uvx tmux-mcp-server

5. Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "tmux": {
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  }
}

6. Zed

Add to ~/.config/zed/settings.json:

{
  "context_servers": {
    "tmux": {
      "command": {
        "path": "uvx",
        "args": ["tmux-mcp-server"]
      }
    }
  }
}

7. Continue

Add to ~/.continue/config.json:

{
  "mcpServers": [
    {
      "name": "tmux",
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  ]
}

8. VS Code (Roo Code / Cline)

Add to .vscode/mcp.json:

{
  "mcpServers": {
    "tmux": {
      "command": "uvx",
      "args": ["tmux-mcp-server"]
    }
  }
}

9. Generic Stdio Client

Any MCP-compliant client can launch via stdio:

{
  "command": "uvx",
  "args": ["tmux-mcp-server"]
}

Tool Reference (37 Tools)

Sessions (6)

  • list_sessions
  • get_session
  • create_session
  • rename_session
  • switch_client
  • kill_session ⚠️

Windows (6)

  • list_windows
  • create_window
  • rename_window
  • select_window
  • move_window
  • kill_window ⚠️

Panes — Read & Interact (7)

  • list_panes
  • get_pane_info
  • read_pane
  • search_pane
  • send_keys
  • send_special_key
  • clear_pane

Panes — Layout & Sizing (9)

  • split_pane
  • select_pane
  • resize_pane
  • zoom_pane
  • swap_panes
  • move_pane
  • break_pane
  • set_layout
  • kill_pane ⚠️

Command Execution (5)

  • run_command
  • get_command_result
  • wait_command
  • list_commands
  • cancel_command

Server & Inspection (4)

  • server_info
  • list_clients
  • display_message
  • show_options

Development & Testing

Run all unit and integration tests (using an isolated test socket -L tmux-mcp-test):

uv run pytest

License

MIT

Metadata

Release files for tmux-mcp-server 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tmux-mcp-server 1.0.0
File Size Uploaded
tmux_mcp_server-1.0.0.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tmux-mcp-server 1.0.0
File Interpreter ABI Platform
tmux_mcp_server-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.0 kB

Release files / tmux_mcp_server-1.0.0.tar.gz

Download URL tmux_mcp_server-1.0.0.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
399679d3cb176dc55907a5c3726997c56c6fe877d3975d860117446a9dae0518
BLAKE2b-256 checksum
How to use checksums
46b4077afc0278fb2195a3a2a4fa5f3c9d6ae37ff0602dc00416ffdf49ddc5ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / tmux_mcp_server-1.0.0-py3-none-any.whl

Download URL tmux_mcp_server-1.0.0-py3-none-any.whl
Size 31.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ff491c1db468b56040f9655f603e08dd8485d27ccd073eef2c2d6f99c1076d44
BLAKE2b-256 checksum
How to use checksums
ddb240fc71152b3f0c0f863d88fe34f599e1b2d2d9a2fa98c8d9d917d9de432e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page