项目简介
这个仓库是一个基于Python和FastMCP框架开发的Model Context Protocol (MCP) 服务器的生产级模板。它旨在为LLM应用提供标准化的后端上下文服务,支持工具执行、资源托管以及Prompt模板渲染。该服务器模板功能丰富,包括结构化日志、配置管理、容器化部署,并集成了OAuth2认证机制。
主要功能点
- MCP核心功能: 通过JSON-RPC协议提供标准的工具调用、资源访问和Prompt模板获取能力。
- 多协议传输: 支持HTTP、SSE (Server-Sent Events) 和 Streamable HTTP 等多种传输协议,灵活适应不同的客户端需求。
- 示例工具与资源: 内置乘法计算器工具、代码审查Prompt生成工具,以及Red Hat标志图片资源处理器,展示MCP能力。
- 可扩展架构: 采用“工具优先”架构,方便开发者快速添加自定义工具、资源和Prompt。
- OAuth2认证: 集成完整的OAuth2授权服务器功能,包括客户端注册、授权码流程、刷新令牌、客户端凭据和令牌自省,确保安全访问。
- 持久化存储: 使用PostgreSQL作为OAuth2相关数据的持久化存储,支持连接池。
- 生产级特性: 提供健康检查、SSL支持、结构化日志、Pydantic配置验证、CORS支持和容器化部署 (Docker/Podman)。
安装步骤
- 克隆仓库:
git clone https://github.com/redhat-data-and-ai/template-mcp-server cd template-mcp-server - 安装uv (如果尚未安装):
'uv' 是一个快速的Python包安装器和解析器。
- macOS/Linux: 'curl -LsSf https://astral.sh/uv/install.sh | sh'
- Windows: 'powershell -c "irm https://astral.sh/uv/install.ps1 | iex"'
- 或者使用pip: 'pip install uv'
- 创建并激活虚拟环境:
uv venv # macOS/Linux: source .venv/bin/activate # Windows: .venv\Scripts\activate - 安装依赖:
uv pip install -e . - 配置环境变量:
复制 '.env.example' 文件到 '.env',并根据需要编辑 '.env' 文件。
请至少配置PostgreSQL数据库连接信息(如果启用OAuth认证):'POSTGRES_HOST', 'POSTGRES_PORT', 'POSTGRES_DB', 'POSTGRES_USER', 'POSTGRES_PASSWORD'。cp .env.example .env - 运行服务器:
template-mcp-server # 或者直接通过Python模块运行: python -m template_mcp_server.src.main - 通过Podman运行 (可选):
podman-compose up --build # 或者手动构建和运行: podman build -t template-mcp-server . podman run -p 3000:3000 --env-file .env template-mcp-server
服务器配置
MCP客户端通常通过配置服务器的启动命令来与MCP服务器建立连接。以下是MCP客户端可以使用的服务器配置示例(JSON格式),并附带关键参数的注释:
{ "servers": [ { "name": "redhat-mcp-template-server", "description": "一个提供算术、代码审查和资源访问的MCP服务器模板。", "command": "python", "args": [ "-m", "template_mcp_server.src.main" ], "env": { "MCP_HOST": "0.0.0.0", // 服务器监听的IP地址。 "MCP_PORT": "3000", // 服务器监听的端口号,默认8080,这里使用3000作为示例。 "MCP_TRANSPORT_PROTOCOL": "streamable-http", // 通信协议,可选 "http", "sse", "streamable-http"。 "PYTHON_LOG_LEVEL": "INFO", // 服务器日志级别,可选 "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"。 "ENABLE_AUTH": "False", // 是否启用OAuth2认证,"True" 或 "False"。 // "MCP_SSL_KEYFILE": "/path/to/server.key", // 如果需要HTTPS,指定SSL私钥文件路径。 // "MCP_SSL_CERTFILE": "/path/to/server.crt", // 如果需要HTTPS,指定SSL证书文件路径。 // 如果 ENABLE_AUTH 为 "True",则需要配置OAuth2存储服务的PostgreSQL数据库连接信息: // "POSTGRES_HOST": "your_db_host", // "POSTGRES_PORT": "5432", // "POSTGRES_DB": "your_db_name", // "POSTGRES_USER": "your_db_user", // "POSTGRES_PASSWORD": "your_db_password", // "SESSION_SECRET": "a_strong_secret_key_for_sessions", // 在生产环境且 ENABLE_AUTH 为 "True" 时必须设置一个安全的会话密钥。 // "MCP_HOST_ENDPOINT": "http://localhost:3000", // 服务器对外的可访问地址,用于OAuth2元数据发现。 // 其他OAuth SSO相关的环境变量根据实际SSO服务配置。 "CORS_ENABLED": "False" // 是否启用CORS,"True" 或 "False"。 }, "endpoint": "http://127.0.0.1:3000", // MCP客户端连接到服务器的URL。 "transport": "streamable_http" // MCP客户端使用的传输方式,与 MCP_TRANSPORT_PROTOCOL 对应。 } ] }
基本使用方法
一旦服务器运行,您可以执行健康检查,并使用支持MCP协议的客户端(如示例中的FastMCP Client或LangGraph Client)来调用服务器提供的工具和访问资源。
- 健康检查:
服务器应返回 '{ "status": "healthy", ... }'。curl http://localhost:3000/health - 调用MCP工具 (例如乘法计算):
使用 'curl' 模拟MCP客户端调用 'multiply_numbers' 工具:
服务器将返回乘法结果。curl -X POST "http://localhost:3000/mcp" \ -H "Content-Type: application/json" \ -d '{"method": "tools/call", "params": {"name": "multiply_numbers", "arguments": {"a": 5, "b": 3}}}' - 使用示例客户端: 参考 'examples/fastmcp_client.py' 或 'examples/langgraph_client.py' 来编写或运行MCP客户端代码,以更高级的方式与服务器交互,例如列出所有工具、读取资源、获取Prompt等。
信息
分类
AI与计算