Python小白也能玩转!手把手教你开发并部署自己的MCP Server(附完整代码+避坑指南)

Python小白也能玩转!手把手教你开发并部署自己的MCP Server(附完整代码+避坑指南)

还在为找不到合适的协议服务器而烦恼?想自己动手开发却怕代码复杂到头秃?今天用Python+Flask实现一个MCP(Minimal Communication Protocol)Server,从零搭建到部署全流程拆解,代码仅50行,连注释都给你标得明明白白!

一、MCP Server是什么?能干啥?

MCP(自定义通信协议)是一种轻量级、可扩展的通信框架,适合物联网设备、游戏后端、嵌入式系统等场景。
举个栗子

  • 智能家居设备通过MCP协议上报温度数据到服务器
  • 小游戏客户端向服务器发送玩家移动指令
  • 工业传感器实时传输压力值到监控平台

咱们今天的目标
✅ 开发一个支持JSON数据传输的MCP Server
✅ 实现GET/POST请求处理
✅ 部署到本地和云服务器(含公网访问教程)

二、开发环境准备(3分钟搞定)

  1. 安装Python 3.8+
    访问Python官网下载安装包,勾选Add Python to PATH
    验证安装:

    python --version  # 应显示Python 3.x.x
    
  2. 创建虚拟环境(推荐)

    mkdir mcp_server && cd mcp_server
    python -m venv venv  # 创建虚拟环境
    source venv/bin/activate  # Linux/Mac  
    venv\Scripts\activate  # Windows
    
  3. 安装依赖库

    pip install flask==3.0.0  # 指定版本避免兼容性问题
    

三、50行代码开发MCP Server

完整代码(带注释)

from flask import Flask, request, jsonify

app = Flask(__name__)

# 全局变量存储数据(生产环境建议用Redis/数据库)
data_store = {"temperature": 25.5, "status": "normal"}

@app.route('/')
def home():
    """根路径测试接口"""
    return jsonify({"message": "MCP Server Running!", "status": "online"})

@app.route('/api/data', methods=['GET', 'POST'])
def handle_data():
    """
    GET请求:获取当前数据
    POST请求:更新数据(需带JSON体)
    """
    if request.method == 'GET':
        return jsonify(data_store)
    
    elif request.method == 'POST':
        if not request.is_json:
            return jsonify({"error": "Content-Type must be application/json"}), 400
        
        new_data = request.get_json()
        # 简单数据校验(生产环境需更严格)
        if 'temperature' in new_data:
            data_store['temperature'] = float(new_data['temperature'])
        if 'status' in new_data:
            data_store['status'] = str(new_data['status'])
        
        return jsonify({"message": "Data updated", "new_data": data_store})

if __name__ == '__main__':
    # 开发环境:127.0.0.1:5000
    # 生产环境:修改host='0.0.0.0'允许公网访问
    app.run(host='127.0.0.1', port=5000, debug=True)

代码拆解

  1. 路由定义

    • /:测试接口,返回服务器状态
    • /api/data:核心数据接口,支持GET/POST
  2. GET请求处理
    直接返回data_store中的数据

  3. POST请求处理

    • 校验请求头是否为application/json
    • 解析JSON体并更新data_store
    • 返回更新后的数据

四、本地测试(30秒出结果)

  1. 启动服务

    python server.py  # 假设代码保存为server.py
    

    看到输出:

    * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    
  2. 测试GET请求
    浏览器访问:http://127.0.0.1:5000/api/data
    或用curl命令:

    curl http://127.0.0.1:5000/api/data
    

    预期输出

    {"temperature": 25.5, "status": "normal"}
    
  3. 测试POST请求

    curl -X POST -H "Content-Type: application/json" \
    -d '{"temperature": 30.2, "status": "warning"}' \
    http://127.0.0.1:5000/api/data
    

    预期输出

    {"message": "Data updated", "new_data": {"temperature": 30.2, "status": "warning"}}
    

五、部署到云服务器(阿里云/腾讯云)

步骤1:购买云服务器

步骤2:远程连接服务器

  • Windows:用Xshell/MobaXterm
  • Mac/Linux:终端输入
    ssh root@你的服务器IP  # 初始密码在云平台控制台查看
    

步骤3:安装Python和依赖

# 更新系统
apt update && apt upgrade -y

# 安装Python3和pip
apt install python3 python3-pip -y

# 创建项目目录
mkdir /home/mcp_server && cd /home/mcp_server

# 上传代码(用scp或SFTP工具)
# 或者直接在服务器创建文件
cat > server.py <<EOF
# 粘贴上面的完整代码
EOF

# 安装依赖
pip3 install flask==3.0.0

步骤4:修改为公网访问

修改代码中的app.run()为:

app.run(host='0.0.0.0', port=5000)  # 允许所有IP访问

步骤5:启动服务(后台运行)

# 使用nohup保持后台运行
nohup python3 server.py > server.log 2>&1 &

# 查看日志
tail -f server.log

步骤6:配置安全组(关键!)

  1. 登录云平台控制台
  2. 找到安全组规则
  3. 添加规则:
    • 类型:自定义TCP
    • 端口范围:5000/5000
    • 授权对象:0.0.0.0/0

步骤7:公网访问测试

curl http://你的服务器IP:5000/api/data

六、避坑指南(血泪教训总结)

  1. 端口冲突

    • 错误:OSError: [Errno 98] Address already in use
    • 解决:netstat -tulnp | grep 5000查看占用进程,kill -9 PID终止
  2. 防火墙拦截

    • Ubuntu默认启用ufw,需运行:
      ufw allow 5000/tcp
      
  3. 跨域问题(前端调用时)

    • 错误:Access-Control-Allow-Origin报错
    • 解决:安装flask-cors并添加装饰器
      from flask_cors import CORS
      app = Flask(__name__)
      CORS(app)  # 允许所有跨域请求
      
  4. 生产环境优化

    • gunicorn替代Flask内置服务器:
      pip install gunicorn
      gunicorn -w 4 -b 0.0.0.0:5000 server:app
      
    • 配置Nginx反向代理(参考官方文档

七、扩展玩法(进阶方向)

  1. 添加认证机制

    from functools import wraps
    def auth_required(f):
        @wraps(f)
        def decorated(*args, **kwargs):
            auth = request.headers.get('Authorization')
            if auth != 'Bearer YOUR_SECRET_TOKEN':
                return jsonify({"error": "Unauthorized"}), 401
            return f(*args, **kwargs)
        return decorated
    
    @app.route('/api/secret', methods=['GET'])
    @auth_required
    def secret_data():
        return jsonify({"data": "This is confidential!"})
    
  2. 连接数据库

    from flask_sqlalchemy import SQLAlchemy
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
    db = SQLAlchemy(app)
    
    class SensorData(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        value = db.Column(db.Float)
        timestamp = db.Column(db.DateTime, default=db.func.current_timestamp())
    
  3. WebSocket实时通信

    from flask_socketio import SocketIO
    socketio = SocketIO(app)
    
    @socketio.on('sensor_update')
    def handle_sensor_update(json):
        print('received: ' + str(json))
        socketio.emit('response', {'data': 'server received'})
    

八、总结:从开发到部署全流程

  1. 开发阶段

    • 50行代码实现核心功能
    • 本地测试验证逻辑
  2. 部署阶段

    • 云服务器配置安全组
    • 后台运行+日志监控
  3. 优化阶段

    • 添加认证/数据库
    • 切换到生产级服务器

立即行动

  1. 复制代码到本地运行测试
  2. 申请免费云服务器部署
  3. 在评论区晒出你的公网访问截图!

点赞过百:下期分享《用Python+MCP Server开发物联网监控系统:从硬件接入到数据可视化》!


本人微信公众号:AI学习新视界,大家一起共同学习,探讨AI领域的最新发展和AI工具产品等使用心得体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI新视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值