MCP:运维自动化大模型工具,实现自动生成网页并自动部署

79 阅读2分钟

背景:

前期买了阿里云服务器,同步配置了域名,做了备案,计划用于大模型相关研究时的后台服务器。

转念一想,服务器闲着也是闲着,搞个简单的知识分享网站也挺美的。于是乎一个由纯静态页面组成的网站就诞生了(只有一个页面)。

又转念一想,干脆用大模型来生成网页,每天定时更新首页,实现页面的动态更新(狗头捂脸)。

再一想,干脆写个MCP,实现自动生成网页自动部署,一句话实现网站更新,岂不是更美。

步骤:

1、先选择一个本地的MCP Client,因为我一直在用Trae,所以自然用的是Trae。

2、因为对python比较熟悉,所以选择基于python实现MCP server,核心代码如下:

class SSHConnector:
    """SSH连接工具类,用于连接服务器并上传文件"""
    def __init__(self, host, port, username, password=None, key_file=None, logger=None):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.key_file = key_file
        self.logger = logger or logging.getLogger('mcp_server')
        self.client = None
    
    def connect(self):
        """建立SSH连接"""
        try:
            self.client = paramiko.SSHClient()
            self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            
            if self.key_file:
                self.client.connect(
                    hostname=self.host,
                    port=self.port,
                    username=self.username,
                    key_filename=self.key_file
                )
            else:
                self.client.connect(
                    hostname=self.host,
                    port=self.port,
                    username=self.username,
                    password=self.password
                )
            
            self.logger.info(f"成功连接到服务器: {self.host}:{self.port}")
            return True
        except Exception as e:
            self.logger.error(f"连接服务器失败: {str(e)}")
            return False
    
    def upload_file(self, local_path, remote_path):
        """上传文件到服务器"""
        if not self.client:
            self.logger.error("未建立SSH连接")
            return False
        
        try:
            sftp = self.client.open_sftp()
            
            # 确保远程目录存在
            remote_dir = os.path.dirname(remote_path)
            if remote_dir:
                # 检查目录是否存在,不存在则创建
                try:
                    sftp.stat(remote_dir)
                except FileNotFoundError:
                    self.logger.info(f"创建远程目录: {remote_dir}")
                    # 创建目录(注意:paramiko不直接支持递归创建目录)
                    self._create_remote_dir(remote_dir)
            
            # 上传文件
            sftp.put(local_path, remote_path)
            sftp.close()
            
            self.logger.info(f"文件上传成功: {local_path} -> {self.host}:{remote_path}")
            return True
        except Exception as e:
            self.logger.error(f"文件上传失败: {str(e)}")
            return False
    
    def _create_remote_dir(self, remote_dir):
        """递归创建远程目录"""
        dirs = remote_dir.split('/')
        path = ''
        for dir in dirs:
            if dir:
                path += '/' + dir
                try:
                    self.client.exec_command(f'mkdir -p {path}')
                except Exception:
                    pass
    
    def disconnect(self):
        """关闭SSH连接"""
        if self.client:
            self.client.close()
            self.logger.info(f"已断开与服务器的连接: {self.host}:{self.port}")

3、python使用方法:

python mcp_server.py --upload test.html

4、在Trea设置中,添加MCP server:右上角齿轮 -- MCP -- 输入MCP server

{ "mcpServers": { "upload": { "command": "python mcp_server.py", "args": [ "--upload", "file" ] } } }

5、这样就可以在Trea里实现对话生成网页,并自动上传到服务器啦

image.png

TODO:后续计划加入自动生成自动上传功能,一个能够自己生成网页并更新的简单网站就完成啦。

最后:想要完整代码的可以私信哦。