项目简介
'mcp-php-server' 是一个使用 PHP 语言实现的 Model Context Protocol (MCP) 服务器库。它提供了一个框架,帮助开发者构建符合 MCP 协议的应用后端,以便向支持 MCP 的大型语言模型 (LLM) 客户端提供结构化的上下文信息(资源)和可调用的外部功能(工具)。
主要功能点
本项目实现了 MCP 协议中的核心能力:
- 资源 (Resources): 允许服务器暴露文件、数据库记录、动态生成的内容等数据,并以标准化的方式供 LLM 读取。支持文本和二进制(Blob)内容。
- 工具 (Tools): 允许开发者将外部 API 调用、数据库操作、脚本执行等封装成工具,供 LLM 通过 JSON-RPC 请求调用,从而扩展 LLM 的能力。
- 日志 (Logging): 支持服务器向客户端发送日志通知,便于客户端监控服务器状态和调试。
- 补全 (Completions): 支持为工具的输入参数提供动态补全建议,改善 LLM 调用工具的体验。
- 认证 (Authorization): 支持基于共享密钥的环境变量认证,增加服务器安全性。
- 传输 (Transport): 内置支持标准输入输出 (Stdio) 传输协议,易于与命令行启动的 MCP 客户端集成。
安装步骤
项目依赖 Composer 进行管理。请确保你已安装 Composer。
-
克隆仓库或下载代码。
-
在项目根目录执行 Composer 安装命令:
composer install
这将安装所有必要的依赖库。
服务器配置 (供 MCP 客户端使用)
MCP 客户端需要知道如何启动 MCP 服务器进程并与之通信。通常,客户端的配置会包含服务器的名称、启动命令及其参数。对于使用 'mcp-php-server' 构建的服务器,你需要编写一个 PHP 脚本(例如 'your_server_script.php')来实例化 'MCP\Server\Server' 类、添加能力并运行。
MCP 客户端的配置示例如下(请注意,这是一个概念性的 JSON 结构示例,具体配置方式取决于你使用的 MCP 客户端):
{ "servers": [ { "name": "你为服务器定义的名称", "description": "服务器的简要描述(可选)", "command": ["php", "/path/to/你的服务器启动脚本.php"], "auth": { // 如果你的服务器配置了授权 token "type": "env", "variable": "MCP_AUTHORIZATION_TOKEN" } } ] }
- 'name': 这是你在编写服务器启动脚本时,实例化 '\MCP\Server\Server' 时传入的第一个参数(例如 'new \MCP\Server\Server('My Awesome Server', '1.0.0')' 中的 ''My Awesome Server'')。LLM 客户端会使用此名称识别服务器。
- 'command': 这是一个数组,第一个元素是可执行文件的路径(例如 'php'),后面的元素是传递给该可执行文件的参数(例如 '/path/to/你的服务器启动脚本.php')。MCP 客户端会执行此命令来启动服务器进程,并通过 Stdio 与之通信。
- 'auth': 如果你在服务器代码中调用了 '$server->requireAuthorization('your_secret_token')',客户端需要在启动服务器进程的环境变量中设置 'MCP_AUTHORIZATION_TOKEN' 为相应的秘密令牌。
基本使用方法 (服务器开发者)
要使用 'mcp-php-server' 创建自己的 MCP 服务器,你需要:
-
创建服务器启动脚本: 编写一个 PHP 文件(例如 'server.php'),在该文件中:
- 实例化 '\MCP\Server\Server' 类,提供一个名称和版本。
- 实例化所需的 MCP 能力类,例如 '\MCP\Server\Capability\ResourcesCapability' 和 '\MCP\Server\Capability\ToolsCapability'。
- 将这些能力添加到服务器实例 ('$server->addCapability(...)')。
- 实例化一个传输层,例如 '\MCP\Server\Transport\StdioTransport'。
- 将传输层连接到服务器 ('$server->connect(...)')。
- 调用 '$server->run()' 启动服务器主循环。
一个基本的骨架如下(这只是结构示例,需根据实际需求填充):
<?php // server.php require_once __DIR__ . '/vendor/autoload.php'; // 根据你的项目结构调整路径 use MCP\Server\Server; use MCP\Server\Capability\ResourcesCapability; use MCP\Server\Capability\ToolsCapability; use MCP\Server\Transport\StdioTransport; $server = new Server('My PHP MCPServer', '1.0.0'); // 添加 Resources Capability $resourcesCapability = new ResourcesCapability(); // 注册你的自定义资源实例到 $resourcesCapability // $resourcesCapability->addResource(new MyCustomResource('My Data', 'text/plain')); $server->addCapability($resourcesCapability); // 添加 Tools Capability $toolsCapability = new ToolsCapability(); // 注册你的自定义工具实例到 $toolsCapability // $toolsCapability->addTool(new MyCustomTool()); $server->addCapability($toolsCapability); // 连接传输层 $transport = new StdioTransport(); $server->connect($transport); // 可选:配置授权 // $server->requireAuthorization('your_secret_token'); // 运行服务器 $server->run(); -
创建自定义资源 (Custom Resources): 继承 '\MCP\Server\Resource\Resource' 抽象类,并使用 PHP Attributes 定义资源 URI 和其他元数据。实现 'read(array $parameters)' 方法来返回资源内容(使用 '$this->text()' 或 '$this->blob()' 助手方法)。
-
创建自定义工具 (Custom Tools): 继承 '\MCP\Server\Tool\Tool' 抽象类,并使用 PHP Attributes 定义工具名称、描述以及输入参数 ('#[Tool]', '#[Parameter]', '#[ToolAnnotations]')。实现 'doExecute(array $arguments)' 方法来执行工具逻辑并返回内容(使用 '$this->createTextContent()', '$this->createImageContent()' 等助手方法)。
-
注册资源和工具: 在服务器启动脚本中,将你的自定义资源和工具实例添加到相应的 Capability 实例中,然后将 Capability 实例添加到 Server 实例中。
信息
分类
AI与计算