项目简介
PHP MCP Server 是 Model Context Protocol (MCP) 的一个核心 PHP 实现。它提供了一个强大且灵活的框架,让开发者能够利用 PHP 8 的 Attributes 轻松地将现有的 PHP 应用功能(如特定的方法)以 MCP 标准的工具 (Tools)、资源 (Resources) 或 Prompt 模板 (Prompts) 的形式暴露给兼容的 LLM 客户端(如 Claude Desktop, Cursor, Windsurf 等)。
主要功能点
- 属性定义: 使用简单的 PHP 8 Attributes ('#[McpTool]', '#[McpResource]', '#[McpPrompt]', '#[McpResourceTemplate]') 直接在 PHP 方法上定义 MCP 元素。
- 自动发现: 自动扫描指定目录下的 PHP 类,识别带有 MCP 属性的方法,并生成对应的 MCP 定义。
- PSR 标准支持: 无缝集成 PSR-3 Logger (日志)、PSR-11 Container (依赖注入) 和 PSR-16 Cache (缓存)。
- 灵活配置: 提供默认配置,但也允许通过自定义配置仓库覆盖各项设置,包括启用的能力、协议版本等。
- 多种传输方式: 内建支持 'stdio' (标准输入/输出,适合命令行客户端) 和用于构建 'http+sse' (HTTP + Server-Sent Events,适合 Web 或桌面客户端) 服务器的组件。
- 依赖注入: 当客户端调用工具或读取资源/Prompt 时,服务器会自动通过配置的 PSR-11 容器获取类实例,方便注入应用依赖。
安装步骤
项目使用 Composer 进行依赖管理。在你的 PHP 项目根目录下运行:
composer require php-mcp/server
服务器配置 (客户端视角)
MCP 服务器是通过标准协议与客户端通信的独立进程或服务。MCP 客户端(如 Cursor, Claude Desktop)需要知道如何启动或连接到你的 PHP MCP 服务器。配置信息通常在客户端的设置中完成,例如一个 JSON 文件。
对于使用 'stdio' 传输方式的服务器(最常见),你需要配置客户端运行一个 PHP 脚本。配置信息通常包含:
- 一个唯一的服务器名称(例如 '"my-php-server"')。
- 指定服务器的类型为 '"command"'。
- 提供启动 PHP 解释器的命令(例如 '"php"')。
- 提供传递给 PHP 解释器的参数数组,其中第一个参数是你的服务器脚本的绝对路径(例如 '"/path/to/your/project/mcp-server.php"')。
示例如下 (并非真实代码,仅为说明概念):
{ "mcpServers": { "my-php-server": { // 服务器名称,客户端用于标识 "type": "command", // 启动服务器进程的命令 "command": "php", // 传递给 command 的参数列表 "args": [ // 这是你的服务器脚本的绝对路径!非常重要! "/path/to/your/project/mcp-server.php" ], // 其他客户端可能支持的选项,如环境变量等 } } }
对于 'http' 传输方式,客户端通常配置服务器的 SSE 端点 URL(例如 '"http://localhost:8080/mcp/sse"')。
基本使用方法
-
安装: 按照上述步骤安装 Composer 包。
-
创建 MCP 元素类: 在你的项目源代码中创建一个 PHP 类,并在方法上添加 '#[McpTool]', '#[McpResource]', '#[McpPrompt]' 或 '#[McpResourceTemplate]' 属性。
<?php // src/MyMcpElements.php namespace App; use PhpMcp\Server\Attributes\McpTool; class MyMcpElements { #[McpTool(name: 'simple_add')] public function add(int $a, int $b): int { return $a + $b; } } -
创建服务器脚本: 在项目根目录创建一个 PHP 脚本(例如 'mcp-server.php')。
<?php // mcp-server.php require __DIR__ . '/vendor/autoload.php'; // 包含 Composer 自动加载 use PhpMcp\Server\Server; // 实例化 Server,配置扫描路径,并发现 MCP 元素 $server = Server::make() ->withBasePath(__DIR__) // 设置项目根目录作为扫描基准 ->withScanDirectories(['src']) // 扫描 src 目录 ->discover(); // 运行发现过程 // 运行服务器,使用 stdio 传输 $exitCode = $server->run('stdio'); exit($exitCode); -
配置客户端: 按照上面“服务器配置”的说明,在你的 MCP 客户端中配置启动 'mcp-server.php' 脚本的命令。
-
连接客户端: 启动客户端,它将连接到你的 MCP 服务器,发现你定义的 'simple_add' 工具等,然后在 LLM 界面中即可使用这些功能。
信息
分类
AI与计算