使用说明
远程服务器mcp
一种模型上下文协议(MCP)服务器,允许AI代理通过SSH在预配置的远程机器上执行shell命令。它预先验证配置,流式传输命令输出,并记录遥测数据,以便未来的护栏可以插入,而无需重写核心传输层。
先决条件
- Node.js 20+
- 远程SSH主机配置了运行MCP服务器的计算机可访问的凭据
安装
npm install
配置
默认情况下,服务器在以下位置查找TOML文件 ~/.config/remote-server-mcp/config.toml.用覆盖路径 REMOTE_SERVER_MCP_CONFIG 环境变量(如果需要)。
示例 config.toml:
[[hosts]]
alias = "staging-web"
host = "staging.example.com"
username = "deploy"
auth.type = "ssh-key"
auth.privateKeyPath = "/Users/me/.ssh/id_ed25519"
knownHostsPath = "/Users/me/.ssh/known_hosts"
timeoutMs = 60000
支持的身份验证策略:
ssh-key–从磁盘加载私钥(可选passphrasePrompt阅读REMOTE_SERVER_MCP_PASSPHRASE_<ALIAS>环境变量)ssh-agent–使用当前的SSH代理(SSH_AUTH_SOCK)credential-command–运行一个shell命令,将密码打印到stdout
文件更改时,配置会自动热重新加载。
运行服务器
npm run build
npm start
在开发过程中,您可以直接运行TypeScript源代码:
npm run dev
服务器当前使用stdio MCP传输;通过指向流程将其与MCP客户端集成。
MCP客户端(stdio)设置
因为服务器使用stdio,所以您可以让MCP客户端按需生成它,而不是保留一个长时间运行的守护进程。
- 构建一次
npm run build. - (可选但方便)运行
npm link所以remote-server-mcpCLI在开发过程中可在全球范围内使用。 - 在MCP客户端配置中,定义一个stdio服务器,例如:
[[servers]]
name = "remote-server-mcp"
type = "stdio"
command = "npx"
args = ["-y", "remote-server-mcp@latest"]
startup_timeout_sec = 45
[servers.env]
REMOTE_SERVER_MCP_CONFIG = "/Users/me/.config/remote-server-mcp/config.toml"
REMOTE_SERVER_MCP_LOG_PATH = "/Users/me/.config/remote-server-mcp/server.log"
- 始终提供
REMOTE_SERVER_MCP_CONFIG;如果没有它,进程将立即退出(客户端参见Transport closed).REMOTE_SERVER_MCP_LOG_PATH将遥测技术排除在stdout之外,因此stdio帧保持有效。 - 如果您尚未发布该包,请指向
command到node并将绝对路径传递给dist/index.js,或使用command = "npx",args = ["tsx", "src/index.ts"]用于实时执行TypeScript。 - 每次客户端会话启动时,它都会通过MCP日志通道调用二进制流stdout/stderr,并在命令完成时退出——不需要后台服务。
stdio启动故障排除
- 握手瞬间失败: 确认MCP客户端正在通过这两个
REMOTE_SERVER_MCP_CONFIG以及(可选)REMOTE_SERVER_MCP_LOG_PATH缺少的配置路径清单为connection closed: initialize response因为服务器在发出任何MCP帧之前中止。 - SSH首次提示执行块: 集
strictHostKeyChecking = false用于初始连接或预填充known_hosts使用远程指纹。通过stdio无法满足交互式“是/否”提示。 - 后续运行挂起: 多重背景
remote-server-mcp进程争夺stdio。使用pgrep -fl remote-server-mcp并终止陈旧npm exec …/node …PID,以便MCP客户端可以干净地生成新副本。
测试
npm test
测试涵盖了配置解析、验证失败场景和命令服务编排(包括流式传输和遥测挂钩)。Linting通过以下方式执行:
npm run lint
遥测和挂钩
执行遥测通过Pino发出。默认情况下,日志会转到stderr(因此stdio MCP传输会保持stdout干净)。集 REMOTE_SERVER_MCP_LOG_PATH 将日志写入文件。预/后/错误钩子回调已到位,以供未来的策略执行。
安全注意事项
- 切勿提交真实凭据或私钥
- 确保在启用之前填充了主机密钥验证路径
strictHostKeyChecking - 在部署到生产环境之前,使用提供的挂钩界面添加确认或白名单