使用说明
MCP SSH Wingman
一种模型上下文协议(MCP)服务器,通过以下方式提供对Unix shell提示的只读访问 tmux这使得像克劳德这样的人工智能助手能够安全地观察终端环境,而无需执行命令。
特性
- 🔒 只读访问 -观察终端内容,无执行风险
- 🖥️ tmux集成 -利用tmux的会话管理实现可靠的终端访问
- 📜 回溯历史 -访问历史终端输出
- 📊 终端元数据 -检索维度、当前路径和会话信息
- 🔌 MCP协议 -AI助手集成的标准协议
常见问题
你会添加吗 GNU screen 支持?
不是在不久的将来。尽管 screen 可用于结对编程/调试,它没有任何机制来强制只读模式。
由于只读保护是此MCP和其他MCP之间的主要区别 具有ssh功能的MCP ,屏幕需要支持只读会话才能集成
你会添加吗 细胞 支持?
在未来,可能。https://github.com/zellij-org/zellij/issues/4348需要首先实施,以确保 zellij 具有只读功能,就像 tmux
先决条件
- tmux(用于终端会话管理)
- (可选)转到1.21或更高版本(仅需要从源代码构建)
安装
自制(macOS/Linux)
brew tap conallob/tap
brew install mcp-ssh-wingman
预构建二进制文件
从下载预构建的二进制文件 发布页面.
适用于:
- macOS(arm64/amd64)
- Linux(arm64/amd64)
- FreeBSD(arm64/amd64)
从源代码构建
看 Developpent.md 获取构建说明。
用法
运行服务器
# Start with default tmux session name (mcp-wingman)
mcp-ssh-wingman
# Use a custom tmux session name
mcp-ssh-wingman --session my-session
# Show version
mcp-ssh-wingman --version
与Claude Desktop集成
将服务器添加到Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"ssh-wingman": {
"command": "/usr/local/bin/mcp-ssh-wingman",
"args": ["--session", "mcp-wingman"]
}
}
}
更新配置后重新启动Claude Desktop。
与Gemini CLI集成
将此部分添加到Gemini配置文件中(~/.gemini/settings.json):
{
"mcpServers": {
"ssh-wingman": {
"command": "/usr/local/bin/mcp-ssh-wingman",
"args": ["--session", "mcp-wingman"]
}
}
}
运行 gemini CLI,并确保它可以看到MCP服务器:
> /mcp list
Configured MCP servers:
🟢 ssh-wingman - Ready (3 tools)
Tools:
- get_terminal_info
- read_scrollback
- read_terminal
使用提示进行测试:
> using ssh-wingman MCP Server, what do you see in my session?
╭────────────────────────────────────────────────────────────────────────────────────────╮
│ ? read_terminal (ssh-wingman MCP Server) {} ← │
│ │
│ MCP Server: ssh-wingman │
│ Tool: read_terminal │
│ │
│ Allow execution of MCP tool "read_terminal" from server "ssh-wingma… │
│ │
│ ● 1. Yes, allow once │
│ 2. Yes, always allow tool "read_terminal" from server "ssh-wingma… │
│ 3. Yes, always allow all tools from server "ssh-wingman" │
│ 4. No, suggest changes (esc) │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────╯
⠏ Waiting for user confirmation...
你最好在那里选择选项3。
可用工具
服务器公开了以下MCP工具:
read_terminal
从tmux会话中读取当前终端内容。
例子:
{
"name": "read_terminal"
}
read_scrollback
从tmux会话中读取回滚历史记录。
参数:
lines(number):从回滚缓冲区检索的行数
例子:
{
"name": "read_scrollback",
"arguments": {
"lines": 100
}
}
get_terminal_info
获取有关终端的信息(尺寸、当前路径等)。
例子:
{
"name": "get_terminal_info"
}
可用资源
terminal://current
当前终端内容作为文本资源。
terminal://info
终端元数据和信息。
运作原理
服务器创建或连接到tmux会话,并使用tmux的内置命令安全读取终端内容:
- 会话管理:创建/附加到分离的tmux会话
- 内容捕获:用途
tmux capture-pane阅读可见内容 - 只读:从不向会话发送按键或命令
- MCP协议:通过标准MCP工具和资源公开终端内容
这种方法确保AI助手可以观察终端活动,而不会意外执行命令或修改终端状态。
用例
- 监控长时间运行的流程并构建输出
- 观察基于终端的应用程序行为
- 通过查看终端历史记录来调试问题
- 根据当前终端状态提供上下文感知协助
安全考虑
MCP SSH Wingman的设计考虑了安全性:
- 只读:服务器从不向终端发送输入
- 本地访问:仅在本地tmux会话上运行
- 无命令执行:无法执行shell命令
- 孤立会话:每个会话都是独立的,并由tmux沙盒管理
故障排除
服务器无法启动
- 确保已安装tmux:
tmux -V - 检查二进制文件是否具有执行权限:
chmod +x /usr/local/bin/mcp-ssh-wingman
Claude Desktop无法连接
- 验证配置文件中二进制文件的路径
- 检查Claude Desktop日志中的错误消息
- 确保二进制文件首先从命令行成功运行
看不到终端内容
- 验证tmux会话是否存在:
tmux list-sessions - 确保会话名称与配置中指定的名称匹配
- 检查tmux会话是否有活动窗格
贡献
欢迎投稿!请随时提交问题或拉取请求。
有关开发指南,请参阅 Developpent.md.