项目简介
'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,简化开发流程,提高开发效率。
安装步骤
- 环境准备:确保已安装 PHP 环境(推荐 PHP 8.1 或更高版本)和 Composer。
- 创建 Hyperf 项目 (如果还没有 Hyperf 项目):
composer create-project hyperf/skeleton mcp-server cd mcp-server - 安装 MCP 组件:
composer require friendsofhyperf/mcp - 发布配置文件:
配置文件 'mcp.php' 将被复制到 'config/autoload/' 目录下。php bin/hyperf.php vendor:publish friendsofhyperf/mcp
服务器配置
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 连接 ], ], ], ];
基本使用方法
- 定义工具、资源和 Prompt: 使用 '#[Tool]', '#[Resource]', '#[Prompt]' 注解在控制器 (Controller) 类的方法上定义工具、资源和 Prompt。参考 'README.md' 中的 快速开始 部分的示例代码。
- 运行 MCP 服务:
- 通过 HTTP 服务器 (SSE):启动 Hyperf HTTP 服务器,MCP 服务将自动注册并可通过配置的 SSE 端点访问。
客户端需要连接到配置文件中 'sse.endpoint' 对应的地址,例如 'http://127.0.0.1:9501/sse' (假设 Hyperf HTTP 服务器运行在 9501 端口)。php bin/hyperf.php start - 通过命令行 (STDIO):使用 'mcp:run' 命令在命令行模式下运行 MCP 服务。
客户端需要配置 'transport: "stdio"' 并使用上面 服务器配置 部分生成的 JSON 配置连接到该命令行进程。php bin/hyperf.php mcp:run --name=demo
- 通过 HTTP 服务器 (SSE):启动 Hyperf HTTP 服务器,MCP 服务将自动注册并可通过配置的 SSE 端点访问。
- 客户端交互: 使用 MCP 客户端 SDK (如 'ModelContextProtocol\SDK'),根据 MCP 协议与运行中的 'Hyperf MCP Server' 进行通信,调用注册的工具、访问资源或使用 Prompt 模板。
总结
'Hyperf MCP Server' 提供了一个快速、便捷的方式来构建和部署 MCP 服务器。通过简单的配置和注解,即可定义和管理资源、工具和 Prompt,为 LLM 应用提供强大的上下文服务能力。无论是使用 SSE 还是命令行模式,都能方便地集成到现有的 AI 应用架构中。
信息
分类
AI与计算