项目简介

'Hyperf MCP Server' 是一个基于 PHP 框架 Hyperf 构建的 Model Context Protocol (MCP) 服务器实现。它旨在帮助开发者快速搭建和管理 MCP 服务,为 AI 应用和大型语言模型 (LLM) 提供结构化的上下文信息和功能调用能力。该项目提供了一套完整的框架,支持资源管理、工具注册、Prompt 模板定义,并通过标准化的 MCP 协议与客户端进行通信,是构建智能 AI 助手和 LLM 应用后端的理想选择。

主要功能点

  • 资源管理 (Resources):允许服务器托管和管理各种数据资源,并提供标准化的访问接口,使 LLM 可以安全、高效地获取上下文数据。
  • 工具注册与调用 (Tools):支持注册外部功能为工具,并暴露给 LLM 客户端调用,扩展 LLM 的能力边界,使其能够执行更复杂的操作,如文件读写、API 调用等。
  • Prompt 模板 (Prompts):支持定义和管理 Prompt 模板,实现可定制的 LLM 交互模式,优化 LLM 的输出结果。
  • 多种传输协议支持:默认支持 SSE (Server-Sent Events) 和命令行 (STDIO) 两种传输协议,方便在不同场景下使用。
  • 易于扩展和配置:基于 Hyperf 框架,具有良好的可扩展性和灵活性,可以通过配置文件轻松管理 MCP 服务。
  • 注解驱动开发:采用注解方式定义工具、资源和 Prompt,简化开发流程,提高开发效率。

安装步骤

  1. 环境准备:确保已安装 PHP 环境(推荐 PHP 8.1 或更高版本)和 Composer。
  2. 创建 Hyperf 项目 (如果还没有 Hyperf 项目):
    composer create-project hyperf/skeleton mcp-server
    cd mcp-server
  3. 安装 MCP 组件
    composer require friendsofhyperf/mcp
  4. 发布配置文件
    php bin/hyperf.php vendor:publish friendsofhyperf/mcp
    配置文件 'mcp.php' 将被复制到 'config/autoload/' 目录下。

服务器配置

MCP 客户端需要配置连接 MCP 服务器的信息。以下是基于 'Hyperf MCP Server' 生成的示例配置(JSON 格式),请根据实际情况进行调整:

{
  "serverName": "demo",  // MCP 服务器名称,与配置文件 config/autoload/mcp.php 中的 servers.name 一致
  "command": "php",      // 启动 MCP 服务器的命令,这里使用 php
  "args": [               // 命令参数
    "bin/hyperf.php",   // Hyperf 框架的启动脚本
    "mcp:run",          // 运行 mcp:run 命令启动 MCP 服务器
    "--name=demo"       // 指定要运行的 MCP 服务器实例名称,与 serverName 保持一致
  ],
  "transport": "stdio"  // (可选) 传输协议,默认为 stdio。如果使用 SSE,则不需要此配置,客户端应配置 SSE 连接地址。
}

参数注释:

  • 'serverName': 指定要连接的 MCP 服务器实例名称,必须与 'config/autoload/mcp.php' 配置文件中 'servers' 数组下的 'name' 字段值一致。例如,配置文件中使用 'name: 'demo'',则 'serverName' 应设置为 '"demo"'。
  • 'command': 启动 MCP 服务器进程的命令。通常为 PHP 解释器路径 ('php')。
  • 'args': 传递给启动命令的参数数组。
    • '"bin/hyperf.php"': Hyperf 框架的入口脚本。
    • '"mcp:run"': Hyperf MCP 组件提供的命令行,用于启动 MCP 服务器。
    • '"--name=demo"': 指定 'mcp:run' 命令运行的 MCP 服务器实例名称,必须与 'serverName' 的值一致。
  • 'transport': (可选) 指定客户端与服务器通信的传输协议。
    • '"stdio"': 使用标准输入输出流进行通信(命令行模式)。这是默认值,适用于通过命令行启动的 MCP 服务器。
    • 如果使用 SSE 传输协议,则不需要配置此项。客户端应配置 SSE 连接地址,即 'config/autoload/mcp.php' 中 'servers.sse.endpoint' 对应的 HTTP 地址。

config/autoload/mcp.php 示例配置 (供参考):

<?php

declare(strict_types=1);

return [
    'servers' => [
        [
            'name' => 'demo',
            'version' => '1.0.0',
            'description' => 'This is a demo mcp server.',
            // SSE 服务器配置选项
            'sse' => [
                'server' => 'http', // 使用 Hyperf 的 http server
                'endpoint' => '/sse', // SSE 端点地址,客户端通过此地址建立 SSE 连接
            ],
        ],
    ],
];

基本使用方法

  1. 定义工具、资源和 Prompt: 使用 '#[Tool]', '#[Resource]', '#[Prompt]' 注解在控制器 (Controller) 类的方法上定义工具、资源和 Prompt。参考 'README.md' 中的 快速开始 部分的示例代码。
  2. 运行 MCP 服务
    • 通过 HTTP 服务器 (SSE):启动 Hyperf HTTP 服务器,MCP 服务将自动注册并可通过配置的 SSE 端点访问。
      php bin/hyperf.php start
      客户端需要连接到配置文件中 'sse.endpoint' 对应的地址,例如 'http://127.0.0.1:9501/sse' (假设 Hyperf HTTP 服务器运行在 9501 端口)。
    • 通过命令行 (STDIO):使用 'mcp:run' 命令在命令行模式下运行 MCP 服务。
      php bin/hyperf.php mcp:run --name=demo
      客户端需要配置 'transport: "stdio"' 并使用上面 服务器配置 部分生成的 JSON 配置连接到该命令行进程。
  3. 客户端交互: 使用 MCP 客户端 SDK (如 'ModelContextProtocol\SDK'),根据 MCP 协议与运行中的 'Hyperf MCP Server' 进行通信,调用注册的工具、访问资源或使用 Prompt 模板。

总结

'Hyperf MCP Server' 提供了一个快速、便捷的方式来构建和部署 MCP 服务器。通过简单的配置和注解,即可定义和管理资源、工具和 Prompt,为 LLM 应用提供强大的上下文服务能力。无论是使用 SSE 还是命令行模式,都能方便地集成到现有的 AI 应用架构中。

信息

分类

AI与计算