项目简介

'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。

  1. 克隆仓库或下载代码。

  2. 在项目根目录执行 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 服务器,你需要:

  1. 创建服务器启动脚本: 编写一个 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();
  2. 创建自定义资源 (Custom Resources): 继承 '\MCP\Server\Resource\Resource' 抽象类,并使用 PHP Attributes 定义资源 URI 和其他元数据。实现 'read(array $parameters)' 方法来返回资源内容(使用 '$this->text()' 或 '$this->blob()' 助手方法)。

  3. 创建自定义工具 (Custom Tools): 继承 '\MCP\Server\Tool\Tool' 抽象类,并使用 PHP Attributes 定义工具名称、描述以及输入参数 ('#[Tool]', '#[Parameter]', '#[ToolAnnotations]')。实现 'doExecute(array $arguments)' 方法来执行工具逻辑并返回内容(使用 '$this->createTextContent()', '$this->createImageContent()' 等助手方法)。

  4. 注册资源和工具: 在服务器启动脚本中,将你的自定义资源和工具实例添加到相应的 Capability 实例中,然后将 Capability 实例添加到 Server 实例中。

信息

分类

AI与计算