MCP tool surface
Every port ships an MCP server, and they do not agree on what the tools are called. Across the eight, 110 distinct tool names are registered; 6 of them exist in all eight, and 44 exist in exactly one.
This page exists because the claim it replaces was unfalsifiable from any
one port's documentation. The numbers below are extracted from each
port's own registration site — a FastMCP call, an rmcp
attribute, an [McpServerTool], a catalog literal — by
scripts/gen-mcp-tools.mjs, which refuses to write a matrix
unless its Python rule reproduces, name for name, the 54
tools libtmux-mcp documents itself.
Two things to know before you configure a client
Java and .NET prefix
every tool with tmux_ on the wire. The other six
do not. An agent told to call capture_pane finds nothing on
a Java server, and one told to call
tmux_capture_pane finds nothing on the other six. The
prefix is stripped in the table below so the comparison is about
capability rather than spelling.
Size varies by a factor of 4.9. Go 59 , Python 54 , Rust 48 , TypeScript 47 , .NET 42 , Swift 38 , Java 29 , C++ 12 . C++ is deliberately the smallest, and smaller still on
Windows: eight of its twelve tools sit behind
#if !defined(_WIN32), so a Windows build registers four
read-only tools and nothing that mutates. The comment above that guard
gives the reason — psmux 3.3.7 "can report another process's same-name
mutation as its own", so the catalog stays read-only there until
ownership can be proven. On Windows the six-tool common vocabulary
below shrinks to two: list_sessions and
list_windows.
The part every port agrees on
Six tools are registered by all eight ports. If you are writing an agent prompt that has to work against any libtmux MCP server, this is the vocabulary it can assume — on a non-Windows host; see the C++ caveat above:
- capture_pane
- list_panes
- list_sessions
- list_windows
- search_panes
- send_keys
Every tool, and who has it
Sorted by how many ports register it. A name means the tool is registered, not that its arguments match — argument parity is a separate question this page does not answer.
| Tool | Python | TypeScript | Rust | Go | Java | .NET | C++ | Swift |
|---|---|---|---|---|---|---|---|---|
| capture_pane | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| list_panes | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| list_sessions | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| list_windows | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| search_panes | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| send_keys | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| paste_text | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| resize_pane | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| select_layout | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| show_environment | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| show_hooks | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| wait_for_text | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | · |
| kill_pane | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | ✓ |
| kill_session | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | ✓ |
| kill_window | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | ✓ |
| list_servers | ✓ | · | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| respawn_pane | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | ✓ |
| set_option | ✓ | ✓ | ✓ | ✓ | ✓ | · | · | ✓ |
| wait_for_channel | ✓ | · | ✓ | ✓ | ✓ | ✓ | · | ✓ |
| capture_since | ✓ | · | ✓ | ✓ | ✓ | · | · | ✓ |
| create_session | ✓ | · | ✓ | ✓ | · | ✓ | ✓ | · |
| kill_server | ✓ | · | ✓ | ✓ | · | ✓ | · | ✓ |
| new_window | · | ✓ | ✓ | · | ✓ | · | ✓ | ✓ |
| run_command | ✓ | ✓ | ✓ | ✓ | · | · | · | ✓ |
| select_pane | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | · |
| select_window | ✓ | ✓ | ✓ | ✓ | · | ✓ | · | · |
| set_environment | ✓ | ✓ | ✓ | ✓ | · | · | · | ✓ |
| signal_channel | ✓ | · | ✓ | ✓ | ✓ | · | · | ✓ |
| split_pane | · | ✓ | ✓ | · | ✓ | ✓ | · | ✓ |
| clear_pane | ✓ | · | ✓ | ✓ | · | ✓ | · | · |
| display_message | ✓ | ✓ | · | ✓ | · | ✓ | · | · |
| pipe_pane | ✓ | ✓ | ✓ | ✓ | · | · | · | · |
| rename_session | ✓ | ✓ | · | ✓ | · | ✓ | · | · |
| rename_window | ✓ | ✓ | · | ✓ | · | ✓ | · | · |
| set_pane_title | ✓ | ✓ | · | ✓ | · | ✓ | · | · |
| show_options | · | ✓ | · | · | ✓ | ✓ | · | ✓ |
| snapshot_pane | ✓ | · | ✓ | ✓ | · | ✓ | · | · |
| create_window | ✓ | · | · | ✓ | · | ✓ | · | · |
| delete_buffer | ✓ | ✓ | · | ✓ | · | · | · | · |
| load_buffer | ✓ | ✓ | · | ✓ | · | · | · | · |
| move_window | ✓ | ✓ | · | ✓ | · | · | · | · |
| new_session | · | ✓ | · | · | ✓ | · | · | ✓ |
| paste_buffer | ✓ | ✓ | · | ✓ | · | · | · | · |
| rename | · | · | ✓ | · | ✓ | · | · | ✓ |
| resize_window | ✓ | ✓ | · | ✓ | · | · | · | · |
| send_keys_batch | ✓ | · | · | ✓ | · | ✓ | · | · |
| show_buffer | ✓ | ✓ | · | ✓ | · | · | · | · |
| show_option | ✓ | · | ✓ | ✓ | · | · | · | · |
| swap_pane | ✓ | ✓ | · | ✓ | · | · | · | · |
| whoami | · | ✓ | · | · | ✓ | ✓ | · | · |
| apply_workspace | · | · | · | · | ✓ | · | · | ✓ |
| build_workspace | · | ✓ | · | ✓ | · | · | · | · |
| enter_copy_mode | ✓ | · | · | ✓ | · | · | · | · |
| exit_copy_mode | ✓ | · | · | ✓ | · | · | · | · |
| find_pane_by_position | ✓ | · | · | ✓ | · | · | · | · |
| get_pane_info | ✓ | · | · | ✓ | · | · | · | · |
| get_server_info | ✓ | · | · | ✓ | · | · | · | · |
| get_session_info | ✓ | · | · | ✓ | · | · | · | · |
| get_window_info | ✓ | · | · | ✓ | · | · | · | · |
| list_buffers | · | ✓ | · | · | · | ✓ | · | · |
| list_jobs | · | · | ✓ | · | · | ✓ | · | · |
| move_pane | · | ✓ | · | ✓ | · | · | · | · |
| run | · | · | · | · | ✓ | ✓ | · | · |
| select | · | · | · | · | ✓ | · | · | ✓ |
| server_info | · | ✓ | · | · | · | ✓ | · | · |
| split_window | ✓ | · | · | ✓ | · | · | · | · |
| call_destructive_tools_batch | · | · | · | ✓ | · | · | · | · |
| call_mutating_tools_batch | · | · | · | ✓ | · | · | · | · |
| call_read_tools_batch | ✓ | · | · | · | · | · | · | · |
| call_readonly_tools_batch | · | · | · | ✓ | · | · | · | · |
| cancel_job | · | · | · | · | · | ✓ | · | · |
| describe | · | · | ✓ | · | · | · | · | · |
| describe_filters | · | · | · | · | · | · | · | ✓ |
| describe_server | · | · | · | · | · | · | · | ✓ |
| drain_channel | · | · | · | · | ✓ | · | · | · |
| expand_format | · | · | ✓ | · | · | · | · | · |
| find_panes | · | · | ✓ | · | · | · | · | · |
| find_sessions | · | · | ✓ | · | · | · | · | · |
| forget_job | · | · | ✓ | · | · | · | · | · |
| get_job | · | · | · | ✓ | · | · | · | · |
| get_pane | · | ✓ | · | · | · | · | · | · |
| get_recipe | · | · | · | ✓ | · | · | · | · |
| hierarchy | · | · | · | · | · | ✓ | · | · |
| inspect_tmux | · | · | · | · | · | · | ✓ | · |
| job | · | · | · | · | · | ✓ | · | · |
| job_status | · | · | ✓ | · | · | · | · | · |
| kill | · | · | · | · | ✓ | · | · | · |
| list_clients | · | · | · | · | ✓ | · | · | · |
| list_session_panes | · | · | · | · | · | · | ✓ | · |
| list_session_windows | · | · | ✓ | · | · | · | · | · |
| list_window_panes | · | · | ✓ | · | · | · | · | · |
| observe | · | ✓ | · | · | · | · | · | · |
| read_format | · | · | · | · | · | · | · | ✓ |
| run_commands | · | · | · | · | · | · | · | ✓ |
| run_plan | · | · | ✓ | · | · | · | · | · |
| run_shell | · | · | · | · | · | · | · | ✓ |
| save_buffer | · | ✓ | · | · | · | · | · | · |
| send_text | · | · | · | · | · | · | ✓ | · |
| show_hook | ✓ | · | · | · | · | · | · | · |
| snapshot | · | · | · | · | · | · | · | ✓ |
| start_command | · | · | ✓ | · | · | · | · | · |
| start_job | · | · | · | · | · | ✓ | · | · |
| swap_window | · | ✓ | · | · | · | · | · | · |
| tail_pane | · | · | · | · | · | ✓ | · | · |
| unset_option | · | ✓ | · | · | · | · | · | · |
| wait_for_idle | · | · | ✓ | · | · | · | · | · |
| wait_for_output | · | · | · | · | · | · | · | ✓ |
| watch_format | · | · | · | · | · | · | · | ✓ |
| watch_pane | · | · | ✓ | · | · | · | · | · |
| what_changed | · | · | ✓ | · | · | · | · | · |
Where these came from
| Port | Tools | Wire prefix | Registration site |
|---|---|---|---|
| Python | 54 | — | ~/work/python/libtmux-mcp/src/libtmux_mcp/tools |
| TypeScript | 47 | — | ~/work/libtmux/libtmux-ts/packages/mcp/src |
| Rust | 48 | — | ~/work/libtmux/libtmux-rs/crates/tmux-mcp/src/tools |
| Go | 59 | — | ~/work/libtmux/libtmux-go/mcp |
| Java | 29 | tmux_ | ~/work/libtmux/libtmux-java/libtmux-mcp/src/main/java/io/github/libtmux/mcp |
| .NET | 42 | tmux_ | ~/work/libtmux/libtmux-dotnet/src/LibTmux.Mcp |
| C++ | 12 | — | ~/work/libtmux/libtmux-cxx/apps/mcp/src |
| Swift | 38 | — | ~/work/libtmux/libtmux-swift/Sources/LibTmuxMCP |
Install a server from the MCP page, or read the reference implementation's per-tool documentation in the Python port. 8 ports, one protocol, and — for now — 110 names.