项目简介

这个仓库是一个基于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)。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/redhat-data-and-ai/template-mcp-server
    cd template-mcp-server
  2. 安装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'
  3. 创建并激活虚拟环境:
    uv venv
    # macOS/Linux:
    source .venv/bin/activate
    # Windows:
    .venv\Scripts\activate
  4. 安装依赖:
    uv pip install -e .
  5. 配置环境变量: 复制 '.env.example' 文件到 '.env',并根据需要编辑 '.env' 文件。
    cp .env.example .env
    请至少配置PostgreSQL数据库连接信息(如果启用OAuth认证):'POSTGRES_HOST', 'POSTGRES_PORT', 'POSTGRES_DB', 'POSTGRES_USER', 'POSTGRES_PASSWORD'。
  6. 运行服务器:
    template-mcp-server
    # 或者直接通过Python模块运行:
    python -m template_mcp_server.src.main
  7. 通过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)来调用服务器提供的工具和访问资源。

  1. 健康检查:
    curl http://localhost:3000/health
    服务器应返回 '{ "status": "healthy", ... }'。
  2. 调用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}}}'
    服务器将返回乘法结果。
  3. 使用示例客户端: 参考 'examples/fastmcp_client.py' 或 'examples/langgraph_client.py' 来编写或运行MCP客户端代码,以更高级的方式与服务器交互,例如列出所有工具、读取资源、获取Prompt等。

信息

分类

AI与计算