运维人开发自己的第一个MCP(实现ssh连接服务器运维)
第一个MCP是初次尝试MCP开发时写的简单工具,文章见:怎么开发第一个MCP?AI的事交给AI好了 。今天趁着有空决定做个服务器运维的MCP,核心就是把通过ssh进行的服务器管理和连接都做到我的这个mcp服务中,其他AI智能连接这个MCP可以实现命令执行等服务器操作。这样如果要维护一个服务器就不用我自己敲命令,我只要把目的告诉AI智能体,它自己就会输出合适的linux命令并调用mcp工具来操作服务器!整个MCP开发过程我全程只负责提问和测试,不涉及任何代码编写或修改。
最终这个MCP实现效果:
1、可视化配置多个ssh服务器连接信息,支持配置提权账号密码(也可直接修改json配置文件来管理ssh服务器)
2、可以配置禁止执行的命令列表,可以配置需要授权提示的命令列表,检测到授权命令mcp服务会打开确认弹窗。
3、支持文件上传下载功能,内置10个可供AI调用的工具方法。
4、记录命令日志,没有做审计功能。
一、开始开发MCP
手动开发MCP那是不可能的,直接发送以下提示词给AI智能体开发就行,我这里用的是OpenCode桌面版(AI编程工具都差不多,我这里后面测试MCP用的是WorkBuddy)。
开工提示词如下:
我想开发一个windows下的mcp服务,这个mcp服务可以配置很多ssh连接用来管理服务器,也可以配置敏感命令列表、禁止命令列表,当AI通过mcp调用这个服务时如果包含敏感命令会 mcp服务会在桌面弹窗提示是否允许执行词命令,如果出现禁止命令则直接禁止命令并在桌面消息展示已禁止执行命令。 这个mcp服务既对AI提供mcp服务,本身又有一个管理界面及mcp交互中的行为界面。 支持的部分mcp功能:查看有哪些ssh服务器已配置、在特定ssh服务器执行命令,这样在AI智能体中链接这个mcp服务后就可以实现 服务器运维等功能。 还有其他安全、风险、架构、扩展性等方面需要考虑的请你帮我构思, 有任何问题或选项及时与我沟通

一般最开始的提示词后面我都会习惯跟“有任何问题及时与我沟通”这种指令,方便AI把有些决定选择抛出来跟我确认,虽然大部分情况下AI给的推荐方案就符合预期。开发语言我选的C# 没有选择python,是因为我本身有这个环境还有就是想要最终打包成exe的话体积也不会太大。
中间架构方案设计完毕后,我又让OpenCode去调研下有没有类似的产品来借鉴下。

调研后我让它又加了个文件上传下载功能。如果没有问题就可以正式开工了,整个开发过程接近19分钟,最终它自动给我编译出了exe程序(一个LitSSHmcp.App.exe是可视化的程序配置界面,一个LitSSHmcp.McpServer.exe是这个MCP服务的核心本体)。
(下图为配置程序不用也行,也可直接修改json配置文件)

二、在WorkBuddy中配置MCP服务
开发完毕后就是测试了,可以直接问OpenCode别的程序怎么配置,我是最终选择腾讯的WorkBuddy来配置这个mcp的(非常奇怪的是同样的mcp配置我在腾讯的CodeBuddy上配置就会报错)!

最终我在WorkBuddy的自定义连接器里面配置如下:
{
"mcpServers": {
"litssh": {
"command": "C:\\Users\\Administrator\\Desktop\\LitSSHmcp\\publish\\LitSSHmcp.McpServer.exe",
"disabled": false
}
}
}

在MCP列表 可以看到配置文件中列出的MCP服务,如果短期内用不到建议关闭,能节省一点点token。

三、开始测试MCP
在WorkBuddy上自定义的MCP好像只能通过指令来触发,也就是由WorkBuddy自己判断是否调用相关工具。在连接MCP服务时其实这个MCP本身支持的工具及相关调用指南都会返给AI智能体,如果没有触发调用可以把提示词写详细写。

直接在WorkBuddy上新开任务测试各个MCP功能是否正常即可,测试如果有问题可以让OpenCode修改(修改时可以在WorkBuddy里提前关闭mcp连接避免修复完成后编译程序发现文件被WorkBuddy启的MCP进程占用)。
1、罗列mcp服务上已配置的ssh服务器

2、选择某个服务器简单测试下

3、测试遇到的问题
在WorkBuddy上测试时主要遇到2个问题,一个是文件上传下载有问题调试了好几次才成功,还有一个就是调用提权工具时mcp服务把用户密码echo 方式注入到终端导致被WorkBuddy发现。

WorkBuddy执行任务时可以点击展开过程,查看工具调用参数及返回发给OpenCode进行问题修改,或者让它吗MCP服务的日志打印出来。另外也要注意有时候AI可能会偷懒不编译程序(比如它编译时发现WorkBuddy里mcp没关 服务进程还在后台执行导致编译失败),就是代码改写了但是让你自己编译程序,如果没注意可能最新的修复也不会生效。

另外一个密码泄漏的问题也是把WorkBuddy发现的问题发给OpenCode让它给解决方案。

修改了3轮最后看起来是没问题了。


4、一句话综合测试
我用来测试的Debian服务器安装了宝塔,但是没有安装nginx,这次就直接测试部署nginx和网页。
在这个服务器上安装nginx,然后部署一个静态网页,网页内容是workbuddy介绍页面

部署上传后的效果如下图,ip是10.0.2.15是因为ssh端口做了映射,实际192.168.1.5的ssh端口是转发到虚拟机ip 10.0.2.15。

等我回到宝塔发现,现在宝塔居然还支持接管自行安装的nginx服务,这个接管功能不知道正式环境有人用不?

提权操作、删除操作、上传下载文件操作mcp服务程序都会弹窗提示,如果怕有问题可以吧mcp服务改成让所有操作都人工进行操作确认,相当于AI负责输出linux命令和获取结果,所有的行为都让人来判断决定。

四、源码分享
免责申明:ssh操作服务器有风险,本源码仅用于学习,本人不对任何使用本源码、程序产生的任何后果负责。下载源码即代表你同意并知晓相关免责申明及风险。源码是整个项目打包,包含已编译文件,不会用的可以解压后丢给AI去理解使用方法以及进行二次开发。
通过网盘分享的文件:SSH-MCP
链接: https://pan.baidu.com/s/1MjblnzhG7FXwxRs3xETBFA?pwd=ij8t 提取码: ij8t
发表评论