PHP MCP Server

PHP MCP Server

site icon
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 服务器示例:

  1. 创建 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;
    }
}
  1. 创建服务器脚本(如 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);
  1. 配置 MCP 客户端(如 Cursor 的 .cursor/mcp.json):
{
    "mcpServers": {
        "my-php-server": {
            "command": "php",
            "args": [
                "/path/to/your/project/mcp-server.php"
            ]
        }
    }
}

常见问题解答

  1. 如何定义 MCP 工具?
  2. 使用 #[McpTool] 属性标记方法,方法参数和返回值将自动映射到 MCP 工具的定义。

  3. 如何支持 HTTP+SSE 传输?

  4. 需要集成到支持并发请求的 HTTP 服务器(如 ReactPHP、Symfony、Laravel Octane)。

  5. 如何自定义日志和缓存?

  6. 通过 withLoggerwithCache 方法提供 PSR-3 和 PSR-16 兼容的实现。

  7. 如何动态通知客户端资源变化?

  8. 调用 $registry->notifyResourceChanged 或类似方法通知客户端资源或工具列表的变化。

许可证

该项目遵循 MIT 开源许可条款,请参阅 MIT 了解完整条款。