支持 MCP 协议,让 Claude 直接操作服务器
一、项目背景
1.1 痛点分析
作为一名开发者/运维,你是否遇到过这些问题:
- 管理多台服务器,IP 和密码记不住
- 常用命令总是忘记,每次都要查
- 日志文件太大,肉眼分析效率低
- 重复性操作多,浪费时间
1.2 竞品分析
从对比可以看出,现有工具要么收费昂贵,要么功能单一,更重要的是没有 AI 能力。
1.3 为什么选择 MCP?
MCP(Model Context Protocol)是 Anthropic 推出的协议,让 AI 助手能够安全地操作外部工具。
通过 MCP,Claude 可以:
- 直接连接你的 SSH 服务器
- 执行命令并分析结果
- 管理文件和目录
- 监控系统状态
二、技术选型
2.1 为什么选 Tauri 2?
| 对比项 | Electron | Tauri 2 |
|---|---|---|
| 安装包大小 | 100MB+ | 10-20MB |
| 内存占用 | 200MB+ | 50-100MB |
| 启动速度 | 慢 | 快 |
| 后端语言 | Node.js | Rust |
| 安全性 | 一般 | 高 |
2.2 为什么选 Rust + russh?
- 原生 async/await:不需要用线程模拟
- 性能优秀:零成本抽象
- 安全可靠:内存安全保证
2.3 为什么选 React 19?
- 最新特性支持
- 生态成熟
- Ant Design 6 完美适配
2.4 技术架构
整体采用三层架构:
- 前端层:React + xterm.js,负责 UI 和终端渲染
- 桥接层:Tauri IPC,实现前后端通信
- 后端层:Rust + russh,处理 SSH 连接和文件传输
三、核心功能实现
3.1 SSH 连接管理
使用 russh 的 async API 实现非阻塞连接:
use russh::*;
async fn connect_ssh(host: &str, port: u16, username: &str, password: &str)
-> Result<Handle, Error> {
let config = russh::client::Config::default();
let mut session = russh::client::connect(
config,
(host, port),
Client {},
).await?;
session.authenticate_password(username, password).await?;
Ok(session)
}
关键设计:
- 使用
tokio::RwLock管理全局会话 - 每个连接独立 channel,互不阻塞
- 支持断线重连
3.2 终端实现
使用 xterm.js + Tauri Events 实现实时终端:
// 前端监听 shell 输出
import { listen } from '@tauri-apps/api/event';
const unlisten = await listen(`shell-output-${shellId}`, (event) => {
terminal.write(event.payload as Uint8Array);
});
// 用户输入发送到后端
terminal.onData((data) => {
invoke('write_shell', { id: shellId, data });
});
关键设计:
- 后端 tokio::spawn 独立任务读取输出
- 通过 Tauri Events 实时推送
- 支持 resize 同步
功能亮点:
- 多标签管理,可拖拽排序
- 悬浮工具栏(复制、搜索、全屏、监控)
- 右键菜单(复制、粘贴、全选、查找)
- 终端搜索(Ctrl+F)
3.3 SFTP 文件传输
使用 russh-sftp 实现后台传输:
async fn upload_file(
sftp: &SftpSession,
local_path: PathBuf,
remote_path: String,
app: AppHandle,
) -> Result<(), Error> {
let mut file = File::open(&local_path).await?;
let mut remote = sftp.create(Path::new(&remote_path)).await?;
let mut buffer = vec![0u8; 64 * 1024]; // 64KB 缓冲
loop {
let n = file.read(&mut buffer).await?;
if n == 0 { break; }
remote.write_all(&buffer[..n]).await?;
// 每 200ms 推送进度
app.emit("transfer-progress", &progress)?;
}
Ok(())
}
关键设计:
- 独立 SSH 连接,不阻塞终端
- 后台 tokio::spawn 任务
- 进度实时推送
功能亮点:
- 可视化文件树浏览
- 拖拽上传文件
- 右键菜单(下载、删除、重命名、压缩)
- 传输进度实时显示
3.4 MCP 协议集成
这是本项目的核心特色:通过 MCP 协议让 AI 直接操作服务器。
工作原理:
- 用户对 Claude 说:"检查所有服务器的 CPU 使用率"
- Claude 通过 MCP 协议调用 iTerminal 的工具
- iTerminal 连接服务器执行命令
- 结果返回给 Claude 进行分析
MCP 工具定义:
const tools = [
{
name: "iter_connect",
description: "创建 SSH 连接",
inputSchema: {
type: "object",
properties: {
host: { type: "string" },
port: { type: "number", default: 22 },
username: { type: "string" },
password: { type: "string" }
},
required: ["host", "username", "password"]
}
},
{
name: "iter_exec",
description: "执行命令",
inputSchema: {
type: "object",
properties: {
id: { type: "string" },
command: { type: "string" }
},
required: ["id", "command"]
}
},
{
name: "iter_monitor",
description: "获取系统监控数据",
inputSchema: {
type: "object",
properties: {
id: { type: "string" }
},
required: ["id"]
}
}
];
使用示例:
用户:检查所有生产服务器的 CPU 使用率
Claude:
1. 连接到生产服务器
2. 执行 top 命令获取 CPU 使用率
3. 分析结果:
- Server 1: CPU 使用率 45%
- Server 2: CPU 使用率 72%(偏高)
- Server 3: CPU 使用率 38%
建议:Server 2 的 CPU 使用率较高,建议检查是否有异常进程。
四、踩坑记录
4.1 Tauri 2 迁移问题
问题:Tauri 1 的配置文件格式在 Tauri 2 中不兼容
解决:
- 使用
tauri migrate命令自动迁移 - 手动检查
tauri.conf.json配置 - 注意
allowlist改为capabilities
4.2 russh async 注意事项
问题:在同步上下文调用 async API 会死锁
解决:
- 使用
tokio::spawn包装 async 调用 - 避免在主线程阻塞等待
4.3 xterm.js 中文支持
问题:中文输入时出现乱码或光标错位
解决:
- 设置正确的字体(如 JetBrains Mono)
- 配置
termios的 UTF-8 支持 - 服务端检查 locale 设置
4.4 文件传输性能
问题:大文件传输时进度事件过多导致 IPC 阻塞
解决:
- 使用 64KB 缓冲区
- 限制进度事件频率为每 200ms 一次
- 独立 SSH 连接避免阻塞终端
五、系统监控功能
除了基础的 SSH 和 SFTP,还实现了实时系统监控:
监控指标:
- CPU 使用率(总体 + 各核心)
- 内存使用(含 Swap)
- 磁盘使用(多分区支持)
- 系统信息(主机名、系统、内核、运行时间)
特点:
- 可配置刷新频率(1/3/5/10 秒)
- 颜色预警(>70% 警告,>90% 危险)
- 暂停/恢复功能
六、未来规划
| 功能 | 优先级 | 状态 |
|---|---|---|
| 密钥认证 | 高 | 计划中 |
| 密码加密存储 | 高 | 计划中 |
| 断线自动重连 | 高 | 计划中 |
| 命令片段库 | 中 | 计划中 |
| 分屏终端 | 中 | 计划中 |
| 团队协作 | 低 | 长期规划 |
| AI 日志分析 | 中 | 计划中 |
| 审计日志 | 中 | 计划中 |
七、开源地址
- GitHub: github.com/iTophua/ite…
- MCP 包:
npm install -g iterminal-mcp-server - 问题反馈: github.com/iTophua/ite…
如果觉得有用,欢迎 Star ⭐
八、总结
通过 Tauri 2 + React + Rust 的组合,我们开发了一款:
- 轻量:安装包仅 15MB,内存占用 50MB
- 安全:Rust 内存安全保证
- 智能:MCP 协议支持 AI 操作
- 开源:MIT 协议,完全免费
希望这个项目能帮助到更多开发者提升运维效率!
技术栈:Tauri 2.10 + React 19.2 + TypeScript 5.9 + Rust + russh 0.50
关键词:SSH、Tauri、Rust、React、MCP、Claude、AI、运维工具