Python实现一个简单的MCP

文章目录

      • 一、环境准备
      • 二、基础实现(9行代码示例)
        • 关键要点:
      • 三、进阶功能实现
        • 1. 多工具集成
        • 2. 资源访问
        • 3. 安全控制
      • 四、客户端配置(以Cursor为例)
      • 五、最佳实践
      • 六、部署方式选择


Python实现一个简单的MCP_第1张图片

一、环境准备

  1. Python版本要求
    • 推荐Python 3.10+(最低3.8)
    • 验证环境:python --version

  2. 安装依赖

    # 创建虚拟环境
    python -m venv mcp-env
    source mcp-env/bin/activate  # Linux/Mac
    .\mcp-env\Scripts\activate  # Windows
    
    # 安装核心库
    pip install mcp mcp[cli]
    

    验证安装:mcp version 应返回1.5.0+版本


二、基础实现(9行代码示例)

场景:创建可查询桌面文件列表的MCP服务

import os
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("FileSystem")  # 服务名称

@mcp.tool()
def get_desktop_files() -> list:
    """获取当前用户的桌面文件列表(支持Windows/macOS/Linux)"""
    return os.listdir(os.path.expanduser("~/Desktop"))

if __name__ == "__main__":
    mcp.run(transport='stdio')  # 使用标准输入输出通信
关键要点:
  1. 工具注册@mcp.tool()装饰器将函数注册为MCP工具
  2. 注释规范:函数文档字符串需清晰描述功能,大模型通过此理解工具用途
  3. 类型注解:强制要求参数和返回值的类型声明(如-> list

三、进阶功能实现

1. 多工具集成
@mcp.tool()
def calculator(a: float, b: float, operator: str) -> float:
    """执行基础数学运算(支持+-*/)
    
    Args:
        operator: 运算符,必须是'+','-','*','/'之一
    """
    if operator == '+': return a + b
    elif operator == '-': return a - b
    elif operator == '*': return a * b
    elif operator == '/': return a / b
    else: raise ValueError("无效运算符")
2. 资源访问
@mcp.resource("config://app_settings")
def get_app_config() -> dict:
    """获取应用程序配置"""
    return {"theme": "dark", "language": "zh-CN"}
3. 安全控制
@mcp.tool(permissions=["read:/Desktop"])
def safe_file_reader(filename: str) -> str:
    """带权限检查的文件读取工具"""
    desktop_path = os.path.expanduser("~/Desktop")
    target = os.path.join(desktop_path, filename)
    if not os.path.exists(target):
        raise FileNotFoundError("文件不存在")
    return open(target).read()

四、客户端配置(以Cursor为例)

  1. 配置mcp.json

    {
      "mcpServers": {
        "filesystem": {
          "command": "python /path/to/your_script.py",
          "transport": "stdio"
        }
      }
    }
    
  2. 测试交互
    • 在Cursor聊天框输入:“我的桌面上有哪些文件?”
    • 观察MCP工具调用过程,需手动授权首次访问


五、最佳实践

  1. 错误处理

    @mcp.tool()
    def safe_operation():
        try:
            # 业务代码
        except Exception as e:
            return {"status": "error", "message": str(e)}
    
  2. 日志管理

    import logging
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    )
    
  3. 性能优化
    • 使用async def定义异步工具
    • 限制资源密集型操作的执行时间


六、部署方式选择

传输协议 适用场景 示例代码
stdio IDE/本地集成 mcp.run(transport='stdio')
sse 远程服务 mcp.run(host='0.0.0.0', port=8000)
websocket 实时交互 需配置Nginx反向代理

你可能感兴趣的:(程序院,python,开发语言)