模型上下文协议(MCP) 的完整 PHP 实现,提供服务器和客户端功能,支持多种传输协议。
- 🚀 最新 MCP 协议 - 支持 2025-03-26 版本的 MCP 协议
- 🔧 完整实现 - 支持工具、资源和提示
- 🔌 多种传输协议 - STDIO ✅、HTTP ✅、流式 HTTP 🚧
- 🌐 框架兼容 - 兼容任何符合 PSR 标准的框架,内置 Hyperf 集成
- 📚 文档完善 - 提供中英文完整指南
composer require dtyq/php-mcp如果您使用 Hyperf 框架,集成极其简单:
// 只需一行代码!
Router::addRoute(['POST', 'GET', 'DELETE'], '/mcp', function () {
return \Hyperf\Context\ApplicationContext::getContainer()->get(HyperfMcpServer::class)->handle('default');
});基于注解的注册:
class CalculatorService
{
#[McpTool(description: '数学计算')]
public function calculate(string $operation, int $a, int $b): array
{
return ['result' => match($operation) {
'add' => $a + $b,
'multiply' => $a * $b,
default => 0
}];
}
#[McpResource(description: '系统信息')]
public function systemInfo(): TextResourceContents
{
return new TextResourceContents('mcp://system/info',
json_encode(['php' => PHP_VERSION]), 'application/json');
}
}高级选项:
- 🔐 AuthenticatorInterface - 自定义认证
- 📊 HttpTransportAuthenticatedEvent - 动态工具/资源注册
- 📝 注解系统 - 自动注册工具、资源和提示
<?php
require_once 'vendor/autoload.php';
use Dtyq\PhpMcp\Server\McpServer;
use Dtyq\PhpMcp\Shared\Kernel\Application;
// 使用简单容器创建服务器
$container = /* 您的 PSR-11 容器 */;
$app = new Application($container, ['sdk_name' => 'my-server']);
$server = new McpServer('my-server', '1.0.0', $app);
// 添加工具
$server->registerTool(
new \Dtyq\PhpMcp\Types\Tools\Tool('echo', [
'type' => 'object',
'properties' => ['message' => ['type' => 'string']],
'required' => ['message']
], '回显消息'),
function(array $args): array {
return ['response' => $args['message']];
}
);
// 启动服务器
$server->stdio(); // 或 $server->http($request)<?php
use Dtyq\PhpMcp\Client\McpClient;
use Dtyq\PhpMcp\Client\Configuration\StdioConfig;
$client = new McpClient('my-client', '1.0.0', $app);
// ✅ 推荐:使用类型化配置的快捷方法
$config = new StdioConfig('php server.php');
$session = $client->stdio($config);
$session->initialize();
// 调用工具
$result = $session->callTool('echo', ['message' => 'Hello, MCP!']);
echo $result->getContent()[0]->getText();其他方法:
// HTTP 快捷方法
use Dtyq\PhpMcp\Client\Configuration\HttpConfig;
$httpConfig = new HttpConfig('http://localhost:8080/mcp');
$session = $client->http($httpConfig);
// ⚠️ 传统方法(已弃用)
$session = $client->connect('stdio', ['command' => 'php server.php']);查看 /examples 目录:
stdio-server-test.php- 完整的 STDIO 服务器http-server-test.php- 带工具的 HTTP 服务器stdio-client-test.php- STDIO 客户端示例http-client-test.php- HTTP 客户端示例
| 协议 | 状态 | 描述 |
|---|---|---|
| STDIO | ✅ | 进程通信 |
| HTTP | ✅ | HTTP 上的 JSON-RPC |
| 流式 HTTP | 🚧 | HTTP + 服务器发送事件 |
- PHP: 7.4+(推荐 8.0+)
- 扩展: json, mbstring, openssl, pcntl, curl
- Composer: 用于依赖管理
我们欢迎贡献!请查看我们的问题页面了解可以帮助的领域。
git clone https://github.com/dtyq/php-mcp.git
cd php-mcp
composer install
composer testMIT 许可证 - 详情请参阅 LICENSE 文件。
- Model Context Protocol 提供规范
- Anthropic 创建 MCP
- PHP 社区提供出色的工具和支持
如果您觉得有用,请给这个仓库点个星 ⭐!