
PHP MCP Server

2025.04.28
4
PHPAI 助手集成开发工具扩展开发效率
PHP MCP Server 是一个基于 PHP 的 Model Context Protocol (MCP) 服务器实现,旨在标准化 AI 助手与外部数据源、API 和其他系统的连接方式。它通过简单的 PHP 8 属性定义,允许开发者将现有 PHP 应用的方法暴露为 MCP 工具、资源或提示,从而为 AI 助手提供上下文。
View on GitHub
Overview
PHP MCP Server
产品定位
PHP MCP Server 是一个基于 PHP 的 Model Context Protocol (MCP) 服务器实现,旨在标准化 AI 助手与外部数据源、API 和其他系统的连接方式。它通过简单的 PHP 8 属性定义,允许开发者将现有 PHP 应用的方法暴露为 MCP 工具、资源或提示,从而为 AI 助手提供上下文。
核心功能
- 基于属性的定义:使用简单的 PHP 8 属性(如
#[McpTool]
、#[McpResource]
)定义 MCP 元素。 - 自动元数据推断:利用方法名、参数名、PHP 类型提示和 DocBlocks 自动生成 MCP 定义,减少样板代码。
- PSR 兼容:与标准 PHP 接口(如 PSR-3、PSR-11、PSR-16)无缝集成。
- 灵活配置:提供默认配置,同时支持自定义日志、缓存、DI 容器等。
- 多传输支持:支持
stdio
(命令行客户端)和http+sse
(HTTP + Server-Sent Events)传输。 - 自动发现:扫描项目目录以查找带有 MCP 属性的类和方法。
- 框架无关:适用于纯 PHP 项目或任何 PHP 框架。
适用场景
- AI 助手集成:为 AI 助手(如 Claude Desktop、Cursor)提供外部数据源和 API 访问能力。
- 开发工具扩展:通过 MCP 协议扩展开发工具的功能,如代码生成、调试工具等。
- 动态资源管理:管理动态资源(如配置文件、状态文件)并通过 MCP 协议暴露给客户端。
使用教程
使用依赖
- PHP >= 8.1
- Composer
安装教程
通过 Composer 安装:
composer require php-mcp/server
调试方式
以下是一个简单的 stdio
服务器示例:
- 创建 MCP 元素类(如
src/MyMcpStuff.php
):
<?php
namespace App;
use PhpMcp\Server\Attributes\McpTool;
class MyMcpStuff
{
/**
* A simple tool to add two numbers.
*
* @param int $a The first number.
* @param int $b The second number.
* @return int The sum of the two numbers.
*/
#[McpTool(name: 'adder')]
public function addNumbers(int $a, int $b): int
{
return $a + $b;
}
}
- 创建服务器脚本(如
mcp-server.php
):
<?php
declare(strict_types=1);
use PhpMcp\Server\Server;
require_once __DIR__ . '/vendor/autoload.php';
$server = Server::make()
->withBasePath(__DIR__)
->withScanDirectories(['src'])
->discover();
$exitCode = $server->run('stdio');
exit($exitCode);
- 配置 MCP 客户端(如 Cursor 的
.cursor/mcp.json
):
{
"mcpServers": {
"my-php-server": {
"command": "php",
"args": [
"/path/to/your/project/mcp-server.php"
]
}
}
}
常见问题解答
- 如何定义 MCP 工具?
-
使用
#[McpTool]
属性标记方法,方法参数和返回值将自动映射到 MCP 工具的定义。 -
如何支持 HTTP+SSE 传输?
-
需要集成到支持并发请求的 HTTP 服务器(如 ReactPHP、Symfony、Laravel Octane)。
-
如何自定义日志和缓存?
-
通过
withLogger
和withCache
方法提供 PSR-3 和 PSR-16 兼容的实现。 -
如何动态通知客户端资源变化?
- 调用
$registry->notifyResourceChanged
或类似方法通知客户端资源或工具列表的变化。