RunPod SSH MCP服务器-Mark Attar
我这样做是因为我厌倦了必须将RunPod输出复制粘贴到我的编码代理实例中
MCP服务器,允许Claude Code/其他编码代理通过SSH在远程RunPod GPU服务器上执行命令,并从服务器传输文件。
设置
# Install dependencies
cd ~/Developer/runpod-ssh-mcp-server
uv sync快速开始
- 使用Claude Code注册MCP服务器(一次性):
claude mcp add --transport stdio --scope user runpod-ssh-gpu -- uv run ~/Developer/runpod-ssh-mcp-server/server.py- 从RunPod的web UI复制SSH命令并将其粘贴到Claude中:
对于直接TCP模式,复制如下字符串(只有此模式支持SFTP&SCP):
“连接到我的pod: ssh root@192.168.1.10 -p 22345 -i ~/.ssh/id_ed25519" 对于SSH代理模式,复制中的字符串,如下所示:“连接到我的pod: ssh oaplvaencc9qc0-64411be6@ssh.runpod.io -i ~/.ssh/id_ed25519"或者,如果你的代理有一个好的浏览器MCP,它可能能够直接从RunPod中提取字符串。
就是这样——代理将解析字符串并自动保存连接配置。
连接模式
服务器支持两种连接模式,可从SSH字符串中自动检测到:
| 模式 | SSH字符串 | 功能 |
|---|---|---|
| 直接 | `ssh root@ -p | |
| -i ` | 完整的SSH:exec,SFTP上传/下载 | |
| 代理 | `ssh | |
| @ssh.runpod.io -i ` | 仅基于PTY的exec(无文件传输) |
直接模式 用途 exec_command() 用于干净的stdout/stderr/exit_code。 代理模式 用途 invoke_shell() 基于标记的输出解析(RunPod的SSH代理需要)。
要切换Pod,只需拨打 connect 再次使用新的SSH字符串。
Paramiko用于SSH连接和SFTP上传/下载,而FastMCP用于打包MCP。
工具
| 工具 | 描述 | 模式 |
|---|---|---|
connect | 从RunPod UI解析SSH字符串并保存连接配置 | 两者都有 |
run_command | 在RunPod上执行shell命令 | 两者都有 |
upload_file | 通过SFTP将本地文件上传到RunPod | 仅限Direct |
download_file | 通过SFTP从RunPod下载文件 | 仅限Direct |
start_background_job | 在tmux会话中运行命令 | 两者 |
check_job | 获取tmux会话的最新输出 | 两者都有 |
配置
这 connect 工具将配置保存到 ~/.config/runpod-ssh.json。您也可以手动创建此文件或使用环境变量(RUNPOD_HOST, RUNPOD_PORT, RUNPOD_USER, SSH_KEY_PATH)作为倒退。
使用MCP检查员进行测试
npx @modelcontextprotocol/inspector uv run server.py