项目简介

Pyramid MCP是一个Python库,旨在将基于Pyramid Web框架开发的应用程序端点(APIs)转换为符合Model Context Protocol (MCP) 标准的工具。它允许大型语言模型(LLM)客户端通过JSON-RPC协议与您的Pyramid应用进行交互,调用API作为工具、访问资源和获取提示信息,从而扩展LLM的功能和上下文感知能力。

主要功能点

  • 工具注册: 使用简单的 '@tool' 装饰器即可将Python函数注册为MCP工具。
  • 自动端点发现: 能够自动发现Pyramid应用的路由,并将其转换为可供LLM调用的工具。
  • 多协议支持: 支持通过HTTP (POST) 和Server-Sent Events (SSE) 协议与MCP客户端进行通信,也支持Stdio传输协议,方便与Claude Desktop等客户端集成。
  • 认证与授权: 支持Bearer Token和Basic Auth等认证方式作为工具参数,并可根据用户权限和ACL上下文自动过滤可访问的工具,确保安全性。
  • 灵活配置: 通过Pyramid的配置文件或代码设置,可以轻松配置服务器名称、版本、挂载路径、启用/禁用MCP端点等。
  • Marshmallow集成: 利用Marshmallow库进行请求参数的严格模式验证和清晰的JSON Schema生成。

安装步骤

  1. 推荐方式 (PyPI):
    pip install pyramid-mcp
  2. 从源代码安装:
    git clone https://github.com/cartaorobbin/pyramid-mcp.git
    cd pyramid-mcp
    pip install -e .
  3. Python版本要求: 确保您的Python版本为3.9或更高。

服务器配置

MCP客户端连接Pyramid MCP服务器时,需要提供服务器的启动命令和相关参数。以下是推荐的JSON格式配置示例:

{
  "serverName": "MyPyramidMCP",
  "command": "python",
  "args": [
    "/path/to/your_app.py" 
    // 或者如果您使用INI文件启动Pyramid应用:
    // "-m", "pyramid_mcp.cli", "pstdio", "--ini", "/path/to/development.ini"
    //
    // 如果您的应用是Python模块函数形式:
    // "-m", "pyramid_mcp.cli", "pstdio", "--app", "your_module:create_app"
  ],
  "env": {
    // 环境变量,例如设置Pyramid的调试模式
    "PYRAMID_DEBUG": "1"
  },
  "transport": {
    "type": "stdio", // 或 "http", "sse"
    "url": "http://localhost:8080/mcp" // 如果是HTTP/SSE传输,请提供URL
  },
  "capabilities": {
    // 根据需要声明服务器能力
    "tools": {}
  },
  "version": "1.0.0",
  "description": "基于Pyramid Web框架的MCP服务器,提供API工具给LLM客户端。",
  "startupTimeout": 10000 // 启动超时时间(毫秒)
}

参数注释:

  • 'serverName': 您MCP服务器的唯一名称。
  • 'command': 启动服务器的可执行文件,通常是 'python'。
  • 'args': 传递给 'command' 的参数列表。这通常包括您的应用程序入口脚本或用于启动MCP 'pstdio' 服务的参数。
    • 如果您直接运行包含 'create_app()' 函数的Python文件(如 'simple_app.py'),则为 '["/path/to/your_app.py"]'。
    • 如果您使用 'pstdio' 命令行工具(支持INI文件或Python模块):
      • 通过INI文件: '["-m", "pyramid_mcp.cli", "pstdio", "--ini", "/path/to/development.ini"]'
      • 通过Python模块函数: '["-m", "pyramid_mcp.cli", "pstdio", "--app", "your_module:create_app"]'
  • 'env': 启动服务器时要设置的环境变量(可选)。
  • 'transport': 传输协议配置。
    • 'type': 传输类型,可以是 'stdio' (标准输入/输出), 'http' 或 'sse' (Server-Sent Events)。
    • 'url': 如果 'type' 是 'http' 或 'sse',则为服务器的监听URL(如 'http://localhost:8080/mcp')。
  • 'capabilities': 服务器支持的MCP能力声明(例如 'tools', 'resources', 'prompts')。
  • 'version': MCP服务器的版本号。
  • 'description': MCP服务器的简要描述。
  • 'startupTimeout': 服务器启动的最大等待时间(毫秒)。

基本使用方法

  1. 创建Pyramid应用:
    # my_pyramid_app.py
    from pyramid.config import Configurator
    from pyramid.view import view_config
    from pyramid_mcp import tool
    
    @tool(name="calculate", description="执行基本数学运算")
    def calculate(operation: str, a: float, b: float) -> float:
        """执行基本数学运算。"""
        if operation == "add":
            return a + b
        elif operation == "subtract":
            return a - b
        elif operation == "multiply":
            return a * b
        elif operation == "divide":
            if b == 0:
                raise ValueError("除数不能为零")
            return a / b
        else:
            raise ValueError(f"未知操作: {operation}")
    
    @view_config(route_name='home', renderer='json')
    def home_view(request):
        """欢迎页。"""
        return {"message": "欢迎使用MCP Pyramid应用"}
    
    def create_app():
        config = Configurator(settings={
            'mcp.server_name': 'MyPyramidApp',
            'mcp.mount_path': '/mcp',
            'mcp.route_discovery.enabled': 'true' # 启用路由发现
        })
        config.include('pyramid_mcp') # 引入Pyramid MCP
        config.add_route('home', '/')
        config.scan() # 扫描 @tool 装饰器和 @view_config
        return config.make_wsgi_app()
    
    if __name__ == '__main__':
        from wsgiref.simple_server import make_server
        app = create_app()
        server = make_server('0.0.0.0', 8080, app)
        print("服务器运行在 http://localhost:8080")
        server.serve_forever()
  2. 运行Pyramid应用:
    python my_pyramid_app.py
  3. 使用cURL测试MCP端点:
    • 初始化连接:
      curl -X POST http://localhost:8080/mcp \
        -H "Content-Type: application/json" \
        -d '{"jsonrpc": "2.0", "method": "initialize", "id": 1}'
    • 列出可用工具:
      curl -X POST http://localhost:8080/mcp \
        -H "Content-Type: application/json" \
        -d '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}'
    • 调用 'calculate' 工具:
      curl -X POST http://localhost:8080/mcp \
        -H "Content-Type: application/json" \
        -d '{
          "jsonrpc": "2.0",
          "method": "tools/call",
          "id": 3,
          "params": {
            "name": "calculate",
            "arguments": {"operation": "add", "a": 5, "b": 3}
          }
        }'

信息

分类

AI与计算