大家好呀,我是程序员夏叶,深度AI编程使用者,专注于分享AI编程方面的使用技巧、经验以及前沿资讯,有兴趣的可以关注我的公众号,一起学习,共同进步。
本文是我的玩转100个MCP系列第四弹,使用Trae+sftp MCP,实现Trae的最佳编程实践,一个完整的闭环流程像下面这样:
- 修改代码
- 上传服务器(调用SFTP MCP)
- 写测试程序测试后台服务接口
- 从服务器获取错误日志(调用SFTP MCP)
- 修改代码,继续整个流程
以上步骤都是Trae自己在1次问答里面完成的,基本上放在那里,我去干别的事,它自己就把我接口都调通了,基本上每一次请求都能把Trae压榨的干干净净,绝不浪费每一次请求,就是每次需要点一下继续比较麻烦。
先看一下效果:
怎么说呢,效果真的很炸裂,我这个后端服务里面26个接口,Trae就是这样给我调通的。
一、sftp MCP产生背景
这个MCP起源其实是被Trae闹的,这里不得不吐槽一下Trae对项目的规则的遵循还有待加强哦,因为某些原因,我是把后端服务放到云服务器上去运行的,最开始我是手动上传文件,然后在服务器上复制报错下来发给Trae让它修复的,但是每次它改完以后就要在本地启服务,我在项目规则里面加了3条规则:

Trae完全当耳旁风了,搞得我很头大,每次都要手动停止请求,咋说它都不听,整个叛逆了,后来我就想到是不是可以整一个这样的MCP,让它可以自己上传文件,读取错误日志,然后自己修复这样子。
说干就干,我用Trae写了这个sftp MCP,然后自定义一个智能体,这下它就完全遵循我的指令了,再也不瞎整了。
二、sftp MCP功能介绍
SFTP MCP服务器是一个基于模型上下文协议(MCP)构建的强大工具,它通过标准输入/输出(stdio)与客户端进行安全通信,提供了一系列与SFTP和远程服务器交互的功能。其核心特性包括:
- 安全传输 :采用
stdio
作为传输方式,所有通信都在本地进行,避免了网络端口暴露,提升了安全性。 - 目录同步 (
sync_directory
) :能够将本地目录完整地同步到远程SFTP服务器。此功能支持.gitignore
风格的忽略规则,可以排除不需要同步的文件和目录(如日志文件、依赖目录等)。 - 单文件上传 (
upload_file
):支持上传单个文件到远程服务器,并能根据配置自动推断远程路径,简化了操作。 - 远程文件读取 (
read_remote_file
):可以读取并返回远程服务器上指定文件的内容,并支持指定文件编码。 - 远程命令执行 (
execute_remote_command
):通过SSH在远程服务器上执行任意Shell命令,并返回命令的输出、错误和退出码,非常适合自动化运维任务。 - 远程目录列表 (
list_remote_directory
):能够列出远程服务器上指定目录的内容,并返回详细的文件信息(如文件名、大小、权限等)。
三、sftp MCP安装和配置
3.1 python和uv的安装
因为这个MCP是基于python,所以首先需要自行安装python环境和uv命令,具体安装方式请参考下面这篇文章:
体验了一波Trae中智能体+MCP功能,真的太顶了(附保姆级MCP配置教程)
3.2 sftp MCP下载
sftp MCP的git地址如下: github.com/XiaYeAI/sft...
将项目克隆到本地,然后在终端进入到sftp-mcp-server目录,比如我的是E:\GIT_CODE\mcp\sftp-mcp-server
,进入该目录下,执行如下命令:
bash
uv sync
这个命令会安装项目依赖。
3.3 在Trae中配置sftp MCP
打开Trae IDE的AI侧栏,点击设置->MCP->手动添加。
在打开的输入框中输入如下配置:
bash
{
"mcpServers": {
"sftp-server": {
"command": "uv",
"args": ["--directory", "/path/to/your/project", "run", "python", "src/main.py"],
"env": {
"TARGET_HOST": "your-sftp-server.com",
"TARGET_USERNAME": "your-username",
"TARGET_PASSWORD": "your-password",
"LOCAL_PATH": "/path/to/local/directory",
"REMOTE_PATH": "/path/to/remote/directory",
"IGNORE_PATTERNS": "["*.log", "node_modules/", ".git/"]"
}
}
}
}
重要说明:
- 将
/path/to/your/project
替换为您的项目根目录的绝对路径 - env中环境变量说明如下:
变量 | 描述 | 默认值 |
---|---|---|
TARGET_HOST |
服务器主机名或 IP 地址 | 必需 |
TARGET_USERNAME |
用户名 | 必需 |
TARGET_PASSWORD |
密码 | 必需 |
LOCAL_PATH |
本地目录路径 | 必需 |
REMOTE_PATH |
远程目录路径 | 必需 |
IGNORE_PATTERNS |
要忽略的文件模式 | [] |
然后点击确认 ,mcp界面出现绿色的勾说明配置成功了。
四、sftp MCP使用场景
SFTP MCP服务器的强大功能使其适用于多种开发和运维场景。
场景一:Web开发与持续部署
问题:您正在本地开发一个Web应用,并需要频繁地将代码同步到开发或预演服务器上进行测试。
解决方案:
- 配置服务器 :在
.env
文件中配置好您的开发服务器SFTP信息和本地/远程代码路径。 - 一键同步 :在MCP客户端中,直接调用
sync_directory
工具。服务器会自动同步所有变更的文件,并根据IGNORE_PATTERNS
忽略掉node_modules
等无需上传的目录。 - 远程重启服务 :代码同步完成后,调用
execute_remote_command
工具在服务器上执行重启命令(如systemctl restart nginx
或pm2 reload my-app
),使变更生效。
场景二:远程服务器运维与管理
问题:您需要管理一台远程服务器,包括上传配置文件、查看日志、执行维护脚本等。
解决方案:
- 上传配置文件 :使用
upload_file
工具,将本地修改好的配置文件(如nginx.conf
)精确地上传到服务器的指定位置。 - 查看日志 :使用
read_remote_file
工具,直接在您的IDE中查看远程服务器上的日志文件内容,无需通过SSH客户端登录服务器。 - 执行维护脚本 :通过
execute_remote_command
工具运行服务器上的备份脚本、清理脚本或任何其他维护任务,并立即获取执行结果。
场景三:数据分析与文件处理
问题:您需要将本地生成的数据集上传到远程计算服务器进行处理,并在处理完成后下载结果。
解决方案:
- 上传数据集 :使用
upload_file
将大型数据文件(如CSV或JSON文件)上传到服务器。 - 启动处理任务 :调用
execute_remote_command
在服务器上运行数据处理脚本(如一个Python或R脚本)。 - 监控与获取结果 :您可以编写一个轮询逻辑,定期使用
list_remote_directory
检查输出目录,或使用read_remote_file
查看一个状态文件。当任务完成后,再使用read_remote_file
获取最终的结果文件内容。
以上这些都是可能的场景,在Trae中使用,最好是自定义一个智能体,明确告知智能体你的处理流程,比如我的提示词是这样:
bash
注意:严格执行项目规则中的约束。
注意:不要写开发文档,现在项目中文档太多了。
你是一个资深的测试开发工程师,你擅长开发代码以后,自己进行测试,然后我们现在有一个项目,需要先使用测试程序跑通api,代码在本地生成,但是运行是在服务器,一个正常的工作流是这样:
1.你写测试程序测试后端api是否可以正常调用
2.如果返回报错,需要你通过sftp-server工具从服务器取日志文件下来读取错误,日志文件路径:/xxx/xxx/xxxx
3.根据错误你修改后端代码,然后调用sftp-server自动上传代码,代码本地路径:E:\GIT_CODE\xxxxx,上传服务器路径:/opt/xxxxx,上传后不需要你重启程序,后台程序会保持热更新
4.然后你继续调用测试api的程序进行测试
5.循环以上过程,直到项目所有api接口都可以调通
然后就出现了本文最开始的场景,每一次的请求都能压榨的干干净净,比较烦的一点是还需要点击继续,要是不用我点继续就好了。
当然啦,以上场景可能更适合从0到1的项目,如果是公司项目,那还是要谨慎一点,还是要自己确认一下每次的改动。
话说以前我还想学习一下怎么写mcp来着,这次写突然发现,用Trae写一个mcp也太简单了,我只是描述了一下我的需求,它自己找到mcp的最新文档,根据文档就写出了这么一个mcp,搞得我完全没有欲望去学了。
好了,今天就说到这里了,如果对你有所启发,麻烦动动你宝贵的小手点个赞,谢谢!