项目简介

CHUK MCP Runtime 是一个用于构建和运行 Model Context Protocol (MCP) 服务器的 Python 框架。它不仅允许您轻松托管基于 Python 的本地工具和上下文资源,还能作为一个代理层连接并统一管理多个远程 MCP 服务器,为 LLM(大型语言模型)客户端提供一个标准化且功能丰富的后端服务。

主要功能点

  • 托管本地 MCP 工具: 使用简单的 Python 装饰器 '@mcp_tool' 即可将 Python 函数注册为可被 LLM 调用的工具,并自动生成工具的描述和参数 schema。
  • 管理上下文信息: 支持定义和提供 LLM 交互所需的资源(Resources)和 Prompt 模板(Prompts)(虽然文档中工具是重点,但结构支持这些功能)。
  • 代理远程 MCP 服务器: 可以通过 Stdio, SSE 等协议连接到其他 MCP 服务器,并将它们的工具、资源等能力统一暴露给本地的 LLM 客户端。
  • 支持多种传输协议: 服务器本身可以配置为通过 Stdio 或 SSE (作为 Web 服务器) 与客户端通信,未来可能支持 WebSocket。
  • OpenAI 兼容模式: 可选择将工具名称转换为 OpenAI 函数调用 API 兼容的下划线格式。

安装步骤

推荐使用 'uv' 包管理器进行安装:

# 基础安装
uv pip install chuk-mcp-runtime

# 安装包含 WebSocket 等可选依赖的版本
uv pip install chuk-mcp-runtime[websocket,dev]

# 确保安装 tzdata 以获得正确的时区支持
uv pip install tzdata

服务器配置(供MCP客户端参考)

当您使用 CHUK MCP Runtime 启动一个 MCP 服务器后,您的 MCP 客户端需要知道如何连接到它。以下是 MCP 客户端配置中用于连接到由 'chuk-mcp-runtime' 启动的服务器的典型 JSON 结构示例,以及各参数的说明。请注意,以下是客户端配置示例,不是 CHUK MCP Runtime 本身的 YAML 配置文件。

{
  "servers": {
    "您为服务器指定的名称": {
      "type": "stdio",
      "command": [
        "uv",
        "run",
        "-m",
        "chuk_mcp_runtime.main"
      ],
      "args": [
        "--config",
        "/path/to/您的服务器配置文件.yaml"
      ]
    }
    // 或者,如果配置为SSE服务器:
    // "您的SSE服务器名称": {
    //   "type": "sse",
    //   "url": "http://localhost:8000/sse",
    //   "message_url": "http://localhost:8000/messages/" // 或其他客户端库需要的消息发送URL/路径
    //   // "api_key": "您的可选API密钥" // 如果配置了Bearer认证
    // }
  }
}

参数说明:

  • '您为服务器指定的名称': 在客户端中标识该服务器的唯一名称。
  • 'type': 服务器的传输协议类型。对于 CHUK MCP Runtime,通常是 '"stdio"' 或 '"sse"'。
  • 'command': (仅用于 '"stdio"') 启动 MCP 服务器进程的命令行及参数列表。客户端会执行此命令来启动服务器并建立 Stdio 连接。
    • '"uv", "run", "-m", "chuk_mcp_runtime.main"': 这是使用 'uv' 运行 'chuk_mcp_runtime' 主入口点的标准方式。
    • '"--config", "/path/to/您的服务器配置文件.yaml"': 指定 CHUK MCP Runtime 服务器实际加载的 YAML 配置文件路径。客户端需要知道这个路径才能正确启动服务器。
  • 'url': (仅用于 '"sse"') MCP SSE 服务器的订阅端点 URL。
  • 'message_url' / 'message_path': (仅用于 '"sse"') MCP SSE 服务器接收客户端消息(如工具调用请求)的 POST 端点 URL 或路径。具体名称取决于使用的 MCP 客户端库。
  • 'api_key': (可选,仅用于 '"sse"') 如果 SSE 服务器配置了 Bearer 认证,客户端需要在此提供 API 密钥。

基本使用方法

  1. 创建工具代码: 编写 Python 函数,使用 '@mcp_tool' 装饰器定义工具名称、描述和参数。

    # my_tools/tools.py
    from chuk_mcp_runtime.common.mcp_tool_decorator import mcp_tool
    
    @mcp_tool(name="get_current_time", description="Get the current time in a timezone")
    async def get_current_time(timezone: str = "UTC") -> str:
        """Get the current time in the specified timezone."""
        from datetime import datetime
        import pytz
        tz = pytz.timezone(timezone)
        now = datetime.now(tz)
        return now.strftime("%Y-%m-%d %H:%M:%S %Z")

    (注意:工具函数必须是异步的 'async def')

  2. 创建服务器配置文件: 创建一个 YAML 文件(例如 'config.yaml'),指定服务器类型(stdio 或 sse)和本地工具模块的位置。

    # config.yaml
    host:
      name: "my-mcp-server"
      log_level: "INFO"
    
    server:
      type: "stdio" # 或 "sse" 并配置端口等
    
    tools:
      registry_module: "chuk_mcp_runtime.common.mcp_tool_decorator"
      registry_attr: "TOOLS_REGISTRY"
    
    mcp_servers:
      local_tools: # 可以给本地工具起个服务器名称
        location: "./my_tools" # 工具模块所在的目录
        tools:
          module: "my_tools.tools" # 工具所在的模块文件 (相对于location的路径,或Python模块名)
  3. 启动服务器: 在终端中使用 'uv run' 命令启动服务器,指定配置文件的路径。

    # 如果 config.yaml 在当前目录
    uv run -m chuk_mcp_runtime.main --config config.yaml
    
    # 或者如果 config.yaml 在其他位置
    uv run -m chuk_mcp_runtime.main --config /path/to/your/config.yaml
  4. 连接客户端: 服务器启动后,使用兼容 MCP 协议的 LLM 客户端(例如 'chuk-tool-processor')连接到该服务器(参考上面的客户端配置示例),即可发现并调用您定义的工具。

关键词

AI工具后端, 语言模型集成, 代理服务, 上下文服务

信息

分类

AI与计算