项目简介
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生成。
安装步骤
- 推荐方式 (PyPI):
pip install pyramid-mcp - 从源代码安装:
git clone https://github.com/cartaorobbin/pyramid-mcp.git cd pyramid-mcp pip install -e . - 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': 服务器启动的最大等待时间(毫秒)。
基本使用方法
- 创建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() - 运行Pyramid应用:
python my_pyramid_app.py - 使用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与计算