tmux会话管理工具

tmux-mcp-rs是一个为tmux设计的Model Context Protocol (MCP)服务器,允许客户端通过结构化工具创建会话、管理窗口和窗格、运行跟踪命令、检查输出和管理tmux缓冲区,而非依赖脆弱的屏幕抓取技术。

  • by bnomei
  • Rust
  • 本地部署
  • 57 星标
  • 更新于
在 GitHub 查看 bnomei/tmux-mcp

使用说明

tmux mcp rs

tmux-mcp-rs 是tmux的模型上下文协议(MCP)服务器。它允许MCP客户端创建会话、塑造窗口和窗格、运行跟踪命令、检查输出、管理tmux缓冲区,并通过结构化工具而不是脆弱的屏幕抓取来驱动交互式终端程序。

当代理需要真实的TTY、长时间运行的命令、并行窗格、可恢复的终端状态或人类可以在同一任务期间附加的tmux会话时,请使用它。

[!警告] 此服务器可以让MCP客户端运行shell命令、在窗格中键入内容、读取终端输出、修改tmux会话以及读取或写入tmux缓冲区。默认运行时策略是允许的。使用隔离的tmux套接字和 config.toml 在将其暴露给您不完全信任的客户端之前,请先执行策略。

目录

服务器提供什么

  • 具有结构化输入和输出的会话、窗口、窗格、客户端和缓冲区工具。
  • execute-command 和 get-command-result 用于具有命令ID、资源URI、状态、输出和侧通道退出代码跟踪的shell命令(可选 waitMs;更倾向于资源订阅以完成)。
  • 窗格、窗口、会话、客户端、服务器和跟踪命令资源,用于轻量级状态检查,而无需重新运行工具。
  • 交互式程序、提示、REPL和TUI的可选原始输入工具。
  • 工具筛选、命令筛选、套接字/会话/窗格作用域和粗略操作组的运行时策略控制。
  • 编译时功能标志,用于从二进制文件中删除原始输入工具以进行强化构建。
  • 可选的SSH路由,以便本地MCP服务器可以控制远程tmux服务器。

MCP路径通常比普通的tmux技能更可靠,因为每个操作都有一个命名的工具、类型化的参数、稳定的ID和结构化的响应。客户端不需要从捕获的文本中推断窗格ID,也不需要解析命令输出来确定命令是否已完成。

需求

  • tmux 3.0或更新版本 PATH.
  • 从源代码构建时使用Rust 1.70或更高版本。
  • 命令跟踪器支持的shell: bash, zsh,或 fish.

启动时,服务器运行 tmux -V。当它检测到tmux 2.x时,它会退出,因为tmux 2.x使用不同的输出格式和分割标志。如果无法检测到版本,启动将继续,受影响的工具调用将报告tmux错误。

安装

货物

cargo install tmux-mcp-rs

家酿

brew install bnomei/tmux-mcp/tmux-mcp-rs

npm

npx @bnomei/tmux-mcp-rs --version
# or: npm install -g @bnomei/tmux-mcp-rs

npm包是一个精简的包装器:在第一次运行时,它下载匹配的GitHub Release二进制文件,验证 .sha256,缓存它,并转发argv。

码头工人

docker run --rm ghcr.io/bnomei/tmux-mcp:0.6.0 --version

图片是 独立的:它包括阿尔卑斯山 tmux 3.x和预构建的musl Linux二进制文件。会话运行 集装箱内,不在桌面tmux服务器上。

  • 默认值(推荐用于Docker): 隔离代理沙盒。人类附着用途 docker exec (见下文)。
  • 可选(仅限Linux): 挂载一个主机tmux套接字,这样容器就可以驱动一个主机端服务器 tmux attach 以本地。macOS/Windows上的Docker Desktop通常无法通过这种方式访问主机Unix套接字。
  • 为了便于人/代理在笔记本电脑上共同连接,最好在主机上使用Homebrew、cargo或npm,而不是Docker。

stdio MCP客户端(保持stdin连接):

docker run --rm -i \
  --name tmux-mcp \
  -v "$PWD:/workspace" \
  ghcr.io/bnomei/tmux-mcp:0.6.0

观看容器内创建的会话:

docker exec -it tmux-mcp tmux attach -t workspace

Linux主机插座接线(高级):

# host: start an isolated tmux server
tmux -S /tmp/tmux-mcp-agent.sock -f /dev/null new-session -d -s workspace

# container: talk to that socket (image still needs its own tmux client)
docker run --rm -i \
  -v /tmp/tmux-mcp-agent.sock:/tmp/tmux-mcp-agent.sock \
  --user "$(id -u):$(id -g)" \
  ghcr.io/bnomei/tmux-mcp:0.6.0 \
  --socket /tmp/tmux-mcp-agent.sock

# host: attach as usual
tmux -S /tmp/tmux-mcp-agent.sock attach -t workspace

当权限失败时,将容器UID/GID与套接字所有者匹配。更多细节: 包装/README.md.

GitHub发布

从下载预构建的存档 GitHub发布,提取并放置 tmux-mcp-rs 在你的 PATH.

来源

git clone https://github.com/bnomei/tmux-mcp.git
cd tmux-mcp
cargo build --release

二进制文件被写入 target/release/tmux-mcp-rs.

验证安装

tmux -V
tmux-mcp-rs --version

预期产量:

tmux 3.x
tmux-mcp-rs <version>

快速开始

  1. 将服务器添加到MCP客户端。

    Codex CLI:

    codex mcp add tmux -- tmux-mcp-rs
    

    克劳德代码:

    claude mcp add --transport stdio tmux -- tmux-mcp-rs
    

    通用MCP客户端配置:

    {
      "mcpServers": {
        "tmux": {
          "command": "tmux-mcp-rs"
        }
      }
    }
    
  2. 在MCP客户端中,要求代理创建或列出tmux会话。

    典型的第一项任务是:

    Create a tmux session named workspace, list its windows and panes, then run pwd in the first pane.
    

    工具响应应包括会话ID、窗口ID、窗格ID和 commandId 对于被跟踪的命令。

  3. 如果您想观看或参与,请附加到同一个tmux会话。

    tmux attach -t workspace
    

为了更安全地进行多代理工作,请从隔离的套接字而不是默认的tmux服务器开始:

tmux -S /tmp/tmux-mcp-agent.sock -f /dev/null new-session -d -s workspace
tmux -S /tmp/tmux-mcp-agent.sock attach -t workspace

然后配置MCP服务器 --socket /tmp/tmux-mcp-agent.sock, TMUX_MCP_SOCKET=/tmp/tmux-mcp-agent.sock,或每个工具 socket 以(权力)否决

客户端配置

使用 args 当您的MCP客户端接受JSON配置时:

{
  "mcpServers": {
    "tmux": {
      "command": "tmux-mcp-rs",
      "args": [
        "--shell-type",
        "zsh",
        "--socket",
        "/tmp/tmux-mcp-agent.sock",
        "--config",
        "/path/to/config.toml"
      ]
    }
  }
}

对于远程tmux服务器,添加 --ssh:

{
  "mcpServers": {
    "tmux": {
      "command": "tmux-mcp-rs",
      "args": [
        "--ssh",
        "user@host",
        "--socket",
        "/tmp/tmux-mcp-agent.sock"
      ]
    }
  }
}

除以下工具外的所有MCP工具 socket-for-path 接受可选 socket 参数。如果工具省略了它,服务器将使用进程默认套接字。

配置参考

tmux-mcp-rs 不自动加载配置文件。通过一个 --config /path/to/config.toml.

CLI选项

选项 默认值 描述
--shell-type <SHELL> bash Shell用于Shell感知命令跟踪。支持的值: bash, zsh, fish.如果 [shell].type 如果配置文件中存在,则配置值获胜。
--config <PATH> unset 要读取的TOML配置文件。无效的TOML、无效的正则表达式和未知的工具或组无法启动。
--socket <PATH> tmux默认套接字 设置 TMUX_MCP_SOCKET 对于此服务器进程。A每个工具 socket 参数仍然在该调用中获胜。
--ssh <CONNECTION> unset 通过SSH路由tmux命令。此值获胜 [ssh].remote 和 TMUX_MCP_SSH.
--help n/a 打印CLI帮助。
--version n/a 打印二进制版本。

环境变量

变量 描述
TMUX_MCP_SOCKET 没有每个工具时的默认tmux套接字路径 socket 提供了覆盖。如果未设置,服务器将使用tmux的默认套接字路径: $TMUX_TMPDIR/tmux-$UID/default,或 /tmp/tmux-$UID/default 当 TMUX_TMPDIR 未设置。
TMUX_MCP_SSH SSH连接字符串在以下情况下使用 --ssh 和 [ssh].remote 未设置。使用shell单词规则解析字符串。不平衡的报价无法启动。
TMUX_MCP_TOOLS 按进程覆盖 [security.tools].使用 allow:<items> 或 deny:<items>。如果没有前缀,该值将被视为denylist。
RUST_LOG 通过以下方式启用跟踪输出 tracing-subscriber 当设置时。日志被写入stderr。

优先级规则:

设置 优先级
插座 每个工具 socket 参数,然后 --socket 或 TMUX_MCP_SOCKET,然后是tmux默认套接字路径。
SSH --ssh那么 [ssh].remote那么 TMUX_MCP_SSH然后没有SSH。
外壳类型 [shell].type那么 --shell-type那么 bash.
工具过滤器 TMUX_MCP_TOOLS那么 [security.tools],然后是拒绝模式,没有被拒绝的项目。

配置示例

[shell]
type = "zsh"

[ssh]
remote = "user@host"

[security]
enabled = true
allow_execute_command = true
allow_raw_mode = true
allow_send_keys = false
allow_kill = true
allow_create = true
allow_split = true
allow_rename = true
allow_move = true
allow_capture = true
allow_list = true
allowed_sockets = ["/tmp/tmux-mcp-agent.sock"]
allowed_sessions = ["workspace"]
allowed_panes = ["%1"]
allowed_buffer_paths = ["/srv/tmux-mcp-buffers"]

[security.command_filter]
mode = "allowlist"
patterns = ["^cargo ", "^git ", "^rg ", "^sed "]

[security.tools]
mode = "deny"
items = ["@raw-input"]

[tracking]
capture_initial_lines = 1000
capture_max_lines = 16000
completed_retention_minutes = 240
completed_max_entries = 1000
tracking_deadline_seconds = 600

[search]
streaming_threshold_bytes = 262144

安全选项

关键字 类型 默认值 描述
security.enabled 布尔值 true 启用策略检查。设为 false 只有当你想绕过每一项策略检查时。
security.allow_execute_command 布尔值 true 允许 execute-command 和 get-command-result.
security.allow_raw_mode 布尔值 true 允许 execute-command 与 rawMode=true,它发送命令时没有跟踪标记。
security.allow_send_keys 布尔值 true 允许使用原始输入工具: send-keys, send-hex, paste-text,以及特殊密钥助手。
security.allow_kill 布尔值 true 允许 kill-session, kill-window, kill-pane,以及 detach-client.
security.allow_create 布尔值 true 允许 create-session 和 create-window.
security.allow_split 布尔值 true 允许 split-pane.
security.allow_rename 布尔值 true 允许使用会话、窗口和窗格重命名工具。
security.allow_move 布尔值 true 允许使用聚焦、调整大小、缩放、布局、连接、打断、交换、移动和同步窗格工具。
security.allow_capture 布尔值 true 允许 capture-pane 以及tmux缓冲区读、写和搜索工具。缓冲区文件操作是此捕获界面的一部分。
security.allow_list 布尔值 true 允许使用会话、窗口、窗格、客户端、缓冲区和当前会话列表工具。
security.allowed_sockets string array或unset unset 设置后,每个工具和资源请求的有效套接字必须与这些路径之一完全匹配。
security.allowed_sessions string array或unset unset 设置后,会话范围的操作仅限于列表中的确切tmux会话ID或名称。
security.allowed_panes string array或unset unset 设置后,直接窗格操作仅限于列出的窗格ID。
security.allowed_buffer_paths string数组或unset unset 允许的规范目录 save-buffer 和 load-buffer.未设置时,路径必须是相对的,并位于本地临时目录下 tmux-mcp-buffers/ 目录,或 /tmp/tmux-mcp-buffers/ 通过SSH。空列表拒绝所有缓冲区文件路径。
security.command_filter.mode off, allowlist, denylist off Regex命令过滤模式。
security.command_filter.patterns 字符串数组 [] 命令过滤器使用的正则表达式模式。
security.tools.mode deny, allow deny 运行时工具表面过滤器模式。
security.tools.items 字符串数组 [] 精确的工具名称或组,例如 @raw-input.

security.command_filter 检查每个非空shell语句 execute-command, send-keys (字面和非字面), paste-text, set-buffer, append-buffer,并将解码后的字节传递给 send-hex.它拆分为非上市 ;, |, &,和换行符,然后递归检查命令替换、进程替换、子shell和大括号组。它拒绝接受无法安全分析的壳体形式,包括ANSI-C $'...' 引用和shell -c 包装纸。它不会筛选特殊的密钥助手。对于硬边界,请在运行时禁用原始输入工具或将其编译出来。

跟踪选项

密钥 默认值 描述
tracking.capture_initial_lines 1000 刷新正在运行的命令的部分输出时捕获的窗格行。
tracking.capture_max_lines 16000 在提取人类可见的开始/完成标记之间的最终输出时捕获的最大窗格线。
tracking.capture_backoff_factor 2 已接受配置兼容性。侧信道完成不再使用捕获退避。
tracking.completed_retention_minutes 240 内存中保留的已完成命令历史记录的年龄限制。
tracking.completed_max_entries 1000 内存中保留的最大已完成命令条目数。设为 0 禁用条目计数修剪,仅依赖保留时间。
tracking.tracking_deadline_seconds 600 侧通道监视器等待多长时间 tmux wait-for 标记前 tracking_error.

搜索选项

密钥 默认值 描述
search.streaming_threshold_bytes 262144 缓冲区大小阈值,其中搜索通过临时文件进行流式传输,而不是将完整的缓冲区文本加载到一个字符串中进行搜索

安全强化

默认情况下,策略强制已启用,但允许:

  • 全部粗糙 allow_* 大门是 true.
  • command_filter.mode 是 off.
  • allowed_sockets, allowed_sessions, allowed_panes,以及 allowed_buffer_paths 未设置。缓冲区文件操作仍然仅限于默认的临时目录沙盒。
  • [security.tools] 是拒绝模式,没有被拒绝的项目。

该默认值便于本地实验,但它不是沙箱。

使用隔离的tmux套接字

tmux -S /tmp/tmux-mcp-agent.sock -f /dev/null new-session -d -s workspace
tmux-mcp-rs --socket /tmp/tmux-mcp-agent.sock --config config.toml
[security]
allowed_sockets = ["/tmp/tmux-mcp-agent.sock"]

当 allowed_sockets 如果已设置,则没有显式套接字的调用仍将解析为进程默认套接字,并且必须与allowlist匹配。

在运行时删除原始输入

[security]
allow_send_keys = false

[security.tools]
mode = "deny"
items = ["@raw-input"]

当shell输入应该通过时使用此选项 execute-command 因此,命令过滤和命令结果跟踪仍然是核心。

仅显示读取工具和跟踪的命令执行

[security.tools]
mode = "allow"
items = ["@read", "execute-command"]

@read 包括 get-command-result,列出工具、捕获工具、缓冲区读取/搜索工具,以及 socket-for-path.

覆盖一个工序的刀具表面

TMUX_MCP_TOOLS=send-keys,paste-text tmux-mcp-rs
TMUX_MCP_TOOLS=deny:@raw-input tmux-mcp-rs
TMUX_MCP_TOOLS=allow:@read,execute-command tmux-mcp-rs

编译原始输入工具

默认的Cargo功能集包括 interactive 和 special-keys.

  • interactive 寄存器 send-keys, send-hex,以及 paste-text.
  • special-keys 寄存器 send-cancel, send-eof, send-escape, send-enter, send-tab, send-backspace, send-up, send-down, send-left, send-right, send-page-up, send-page-down, send-home,以及 send-end.

禁用这些功能以从二进制文件中删除工具:

# Filtered-only build: execute-command is the only shell-input path.
cargo build --release --no-default-features --features rayon,rapidfuzz

# Keep raw keystrokes but remove special-key helpers.
cargo build --release --no-default-features --features rayon,rapidfuzz,interactive

execute-command 始终已注册,并仍受 security.command_filter.

MCP工具参考

工具可用性取决于Cargo功能和运行时策略。运行时被拒绝的工具将从通告的MCP工具列表中删除,并在调用时被拒绝。

工具组

组 工具
@all 所有已知的工具都被编译成二进制文件。
@read socket-for-path,列出/查找工具, capture-pane缓冲区读取/搜索工具,以及 get-command-result.
@socket socket-for-path.
@list list-sessions, find-session, list-windows, list-panes, list-clients, list-buffers, get-current-session.
@execute execute-command, get-command-result.
@capture capture-pane.
@buffer-read list-buffers, show-buffer, search-buffer, subsearch-buffer.
@buffer-write save-buffer, load-buffer, delete-buffer, set-buffer, append-buffer, rename-buffer.
@create create-session, create-window.
@split split-pane.
@rename rename-session, rename-window, rename-pane.
@move move-window, select-window, select-pane, resize-pane, zoom-pane, select-layout, join-pane, break-pane, swap-pane, set-synchronize-panes.
@kill kill-session, kill-window, kill-pane, detach-client.
@interactive send-keys, send-hex, paste-text.
@special-keys send-cancel, send-eof, send-escape, send-enter, send-tab, send-backspace, send-up, send-down, send-left, send-right, send-page-up, send-page-down, send-home, send-end.
@raw-input 全部 @interactive 和 @special-keys 工具。

按任务列出的工具

任务 工具
插座实用程序 socket-for-path 导出确定性 /tmp/<hash>.sock 项目路径中的路径。
会话管理 list-sessions, find-session, create-session, kill-session, get-current-session, rename-session.
窗口管理 list-windows, create-window, kill-window, rename-window, move-window, select-window, select-layout, set-synchronize-panes.
窗格管理 list-panes, split-pane, kill-pane, rename-pane, capture-pane, select-pane, resize-pane, zoom-pane, join-pane, break-pane, swap-pane.
命令执行 execute-command 回报 commandId + resourceUri;更喜欢 resources/subscribe 然后继续阅读 resources/updated,或 get-command-result 与 waitMs.
客户管理 list-clients, detach-client.
缓冲器检查 list-buffers, show-buffer, search-buffer, subsearch-buffer.
缓冲液突变 save-buffer, load-buffer, delete-buffer, set-buffer, append-buffer, rename-buffer.
原始输入 send-keys, paste-text, send-hex, send-cancel, send-eof, send-escape, send-enter, send-tab, send-backspace, send-up, send-down, send-left, send-right, send-page-up, send-page-down, send-home, send-end.

更喜欢 execute-command 使用资源订阅/读取(或 get-command-result + waitMs)用于非交互式命令。每个窗格都有跟踪的命令队列。使用 capture-pane 只为实时进步;不要将窗格“完成”标记视为权威。仅将原始输入工具用于提示、REPL、编辑器、寻呼机和TUI,而不是在该窗格上运行跟踪命令时使用。

跟踪命令快照使用情况 schemaVersion: 1 目前正在通过 queued, running那么 completed, failed,或 tracking_error。该方案还保留 cancelled,但当前跟踪器不会发出它。正常的跟踪命令会拒绝嵌入的换行符、未加引号的shell注释标记(#),以及未报价的后台操作员(&)因为这些表格可以绕过跟踪尾声。集 rawMode=true 或 noEnter=true 仅当您有意禁用侧通道完成跟踪时;这些记录仍然存在 running.

show-buffer 默认情况下最多读取65536个字节。 search-buffer 默认为每个缓冲区40个上下文字节、50个匹配项和65536个扫描字节;它返回字节偏移量,并在结果被截断时恢复游标。文字和正则表达式搜索始终可用。模糊匹配和相似性得分要求 rapidfuzz 货物功能,默认启用。

MCP资源参考

服务器、窗格、窗口、会话和客户端资源反映了服务器的默认套接字。被跟踪的命令资源保留其原始记录的有效套接字 execute-command,包括每个刀具插座的超控。资源由当前安全策略动态枚举和过滤。

仅支持跟踪命令结果资源 resources/subscribe;在a之后读取资源 notifications/resources/updated 活动。其他资源URI提供按需快照。

URI 描述
tmux://server/info 带有默认套接字和SSH上下文的JSON。
tmux://pane/{paneId} 窗格中的最后200行以纯文本形式显示。
tmux://pane/{paneId}/info JSON格式的窗格元数据。
tmux://pane/{paneId}/tail/{lines} 将窗格中的N行作为纯文本。
tmux://pane/{paneId}/tail/{lines}/ansi 使用ANSI颜色从窗格中画出N条尾线。
tmux://window/{windowId}/info 窗口元数据为JSON。
tmux://session/{sessionId}/tree 会话、窗口和窗格快照为JSON。
tmux://clients tmux客户端为JSON格式。
tmux://command/{commandId}/result 跟踪命令状态和输出。

远程和套接字工作流

远程SSH

使用 --ssh 在另一台机器上运行tmux命令。SSH身份验证必须是非交互式的,例如基于代理或密钥的登录。

tmux-mcp-rs --ssh "user@host"

在目标之前传递SSH选项:

tmux-mcp-rs --ssh "-i ~/.ssh/key user@host"

连接字符串使用shell单词规则进行拆分。目标应该是最后一个令牌。服务器在将远程tmux命令发送到SSH之前会引用它,当可以访问远程tmux时,tmux版本检查会应用于远程tmux。

远程加隔离插座

在远程主机上创建专用tmux服务器:

ssh user@host 'tmux -S /tmp/tmux-mcp-agent.sock -f /dev/null new-session -d -s workspace'

针对该远程套接字启动本地MCP服务器:

tmux-mcp-rs --ssh "user@host" --socket /tmp/tmux-mcp-agent.sock

需要时直接从外壳连接:

ssh -t user@host 'tmux -S /tmp/tmux-mcp-agent.sock attach -t workspace'

插座隔离

使用 --socket 或 TMUX_MCP_SOCKET 要在一个tmux服务器上保留一个代理:

tmux-mcp-rs --socket /tmp/tmux-mcp-agent.sock
TMUX_MCP_SOCKET=/tmp/tmux-mcp-agent.sock tmux-mcp-rs

在MCP客户端启动之前,如果您想要一个人类可见的工作区,请预先创建会话:

tmux -S /tmp/tmux-mcp-agent.sock -f /dev/null new-session -d -s workspace
TMUX_MCP_SOCKET=/tmp/tmux-mcp-agent.sock tmux-mcp-rs

Docker和套接字

GHCR映像包括tmux 3.x,默认为 独立的 容器内的会话(docker exec … tmux attach).仅在Linux上,您可以挂载主机套接字,以便容器MCP服务器驱动主机tmux服务器——请参阅 安装→ 码头工人 和 包装/README.mdmacOS/Windows上的Docker Desktop不是可靠的主机套接字路径;当您需要轻松的本地协同连接时,请使用本机安装。

代理工作流模式

集成测试涵盖了以下tmux工作流:

图案 刀具表面
ID优先定位 list-windows, list-panes, rename-window.
每个会话的任务布局 create-session, create-window, split-pane, rename-pane,列出工具。
有状态的shell上下文 send-keys, capture-pane.
连续输出窗格 send-keys, capture-pane.
交互式提示自动化 send-keys, capture-pane.
交互式中断 send-cancel, send-eof, capture-pane.
同步窗格广播 set-synchronize-panes, send-keys, capture-pane.
缓冲区切换和搜索 list-buffers, show-buffer, save-buffer, delete-buffer, search-buffer, subsearch-buffer.
窗格重新排列 split-pane, select-layout, swap-pane, break-pane, join-pane.
元数据和缩放 重命名工具, zoom-pane, resize-pane,窗格/窗口资源。
审核就绪上下文包 execute-command, get-command-result, capture-pane.
代理编排 create-window, split-pane, execute-command, send-keys, capture-pane.

对于面向代理的tmux工作流,请参阅:

tmux-buffer-explorer 使用tmux缓冲区作为大文本的外部搜索空间。当代理需要有界搜索和后续切片,而不是将整个缓冲区加载到上下文中时,它很有用。

发展

构建二进制文件:

cargo build --release

运行不需要tmux的单元测试:

cargo test --lib
cargo test --test cli
cargo test --test search

运行tmux支持的集成测试:

TMUX_MCP_INTEGRATION=1 cargo test --test integration

集成测试使用临时套接字创建隔离的tmux服务器,并在之后对其进行清理。

运行与CI相同的Rust检查:

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets

发布说明和发布包装详细信息实时发布 更改日志.md 和 docs/RELEASE.md.

注意事项和限制

  • tmux拥有粘贴缓冲区,而此服务器在内存中保留跟踪的命令快照。 paste-text, set-buffer, append-buffer,并且大的保留命令输出仍然会消耗主机内存。跟踪的输出由以下内容限制 capture_max_lines,但保留的字符串和单个行长度不受字节限制。
  • 缓冲区搜索通过临时文件流式传输大缓冲区 search.streaming_threshold_bytes,但tmux缓冲区本身并不是按大小驱逐的。
  • tmux行从制表符分隔的行中解析 -F 输出。窗格标题、路径或类似字段内的文字选项卡可能会移动后面的字段,并产生格式错误或跳过的行。
  • paste-text 使用括号内的粘贴标记。不支持括号粘贴的shell和程序可能会将嵌入的换行符视为Enter。在macOS上,默认 /bin/bash 3.2不支持现代括号粘贴行为;zsh或更新的bash对于不应该逐行提交的多行输入更安全。
  • save-buffer 写入tmux服务器文件系统,以及 load-buffer 从中读取。两者都受 allow_capture, [security.tools],以及 security.allowed_buffer_paths。在默认启用策略的情况下,调用者使用本地临时目录中的相对路径 tmux-mcp-buffers/ 沙箱或 /tmp/tmux-mcp-buffers/ 通过SSH;父遍历和规范或符号链接转义被拒绝。
  • 命令结果是套接字绑定的。 get-command-result 必须使用与原始插座相同的有效插座 execute-command 电话。
  • 跟踪命令完成使用专用tmux出口缓冲区+ wait-for 信号,不可伪造的窗格滚动。可选的开始/完成行仅适用于人工/调试。
  • 交互式 send-keys/paste-text 在同一窗格上跟踪运行期间未定义;等待命令完成或使用另一个窗格。
  • 端到端SSH行为是手动验证的,因为CI不提供远程主机。

源锚点

许可证

MIT许可证。看 许可证.