在AI技术飞速发展的今天,如何让AI助手与外部系统无缝连接,成为了开发者们面临的一大挑战。今天,我们要介绍的是一个能够解决这一问题的神器——PHP MCP Server。它不仅是一个PHP库,更是AI领域的“USB-C”接口,帮助开发者轻松构建符合MCP标准的服务器。
什么是MCP?
Model Context Protocol(MCP),最初由Anthropic开发,是一种开放标准,旨在规范AI助手与外部数据源、API及其他系统的连接方式。你可以把它想象成AI领域的“USB-C”接口,提供了一种统一、一致的上下文提供方式。
PHP MCP Server的核心优势
1. 基于属性的定义
使用简单的PHP 8属性(如#[McpTool]、#[McpResource]、#[McpPrompt]等),你可以轻松定义MCP元素(工具、资源、提示、模板)。无需复杂的配置,只需几行代码,就能将现有PHP应用程序的特定方法作为MCP工具、资源或提示公开。
2. 自动元数据推断
通过方法名称、参数名称、PHP类型提示和文档块,PHP MCP Server能够自动生成MCP定义,最大限度地减少样板代码。这意味着你可以专注于业务逻辑,而不必担心繁琐的配置。
3. 符合PSR标准
PHP MCP Server与标准PHP接口无缝集成,支持PSR-3(日志记录)、PSR-11(依赖注入)和PSR-16(缓存)。你可以使用自己喜欢的日志记录器、依赖注入容器和缓存实现,灵活配置,满足不同需求。
4. 多种传输方式
支持stdio(用于命令行客户端)和http+sse(HTTP + Server-Sent Events)传输方式。无论你是开发命令行工具还是Web应用,PHP MCP Server都能轻松应对。
5. 框架无关
PHP MCP Server设计为在普通PHP项目中或集成到任何PHP框架中都能同样良好地工作。无论你使用的是Laravel、Symfony还是其他框架,都能轻松上手。
快速上手:构建一个简单的MCP服务器
1. 安装
通过Composer安装PHP MCP Server:
BASH
composer require php-mcp/server
2. 创建MCP元素类
创建一个文件,例如src/MyMcpStuff.php:
<?php
namespace App;
use PhpMcp\Server\Attributes\McpTool;
class MyMcpStuff
{
/**
* 一个用于将两个数字相加的简单工具。
*
* @param int $a 第一个数字。
* @param int $b 第二个数字。
* @return int 两个数字的和。
*/
#[McpTool(name: 'adder')]
public function addNumbers(int $a, int $b): int
{
return $a + $b;
}
}
3. 创建服务器脚本
在项目根目录中创建一个脚本,例如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(); // 查找所有#[Mcp*]属性
// 使用stdio传输运行服务器
$exitCode = $server->run('stdio');
exit($exitCode);
4. 配置MCP客户端
配置MCP客户端(如Cursor、Claude Desktop等)以使用stdio传输进行连接。例如,在Cursor的.cursor/mcp.json中:
JSON
{
"mcpServers": {
"my-php-server": {
"command": "php",
"args": [
"/path/to/your/project/mcp-server.php"
]
}
}
}
现在,当连接客户端时,它应该能够发现adder工具。
核心概念
1. #[McpTool]
将一个方法标记为MCP工具。工具代表客户端可以调用的操作或函数,通常带有参数。
2. #[McpResource]
将一个方法标记为代表特定的、静态的MCP资源实例。资源代表由URI标识的内容或数据片段。
3. #[McpResourceTemplate]
将一个方法标记为可以基于模板URI生成资源实例的方法。这对于URI包含可变部分(如用户ID或文档ID)的资源很有用。
4. #[McpPrompt]
将一个方法标记为MCP提示生成器。提示是预定义的模板或函数,可根据输入参数生成对话消息。
详细配置
1. 日志记录
你可以使用自己的PSR-3日志记录器(例如Monolog)来记录服务器日志:
$logger = new MyPsrLoggerImplementation(...);
$server = Server::make()->withLogger($logger);
2. 缓存
你可以使用自己的PSR-16缓存实现(例如Symfony Cache、Laravel Cache)来缓存发现的元素和传输状态:
$cache = new MyPsrCacheImplementation(...);
$server = Server::make()->withCache($cache);
3. 依赖注入
你可以使用自己的PSR-11依赖注入容器(例如Laravel、Symfony、PHP-DI)来解析应用程序类及其依赖项:
$container = new MyPsrContainerImplementation(...);
$server = Server::make()->withContainer($container);
4. 配置存储库
你可以实现PhpMcp\Server\Contracts\ConfigurationRepositoryInterface接口,提供自定义配置存储库:
$config = new MyConfigurationRepositoryImplementation(...);
$server = Server::make()->withConfig($config);
结语
PHP MCP Server为开发者提供了一个强大而灵活的工具,帮助他们在AI时代轻松构建符合MCP标准的服务器。无论你是新手还是经验丰富的开发者,PHP MCP Server都能让你快速上手,专注于创新和业务逻辑。

