PHP MCP SDK

一个轻量级、生产就绪的PHP SDK,用于通过JSON-RPC 2.0与模型上下文协议(MCP)服务器通信,支持多种传输后端和内置重试逻辑。

  • by victorstack-ai
  • PHP
  • 本地部署
  • 更新于
在 GitHub 查看 victorstack-ai/php-mcp-sdk-foundation-launch

使用说明

PHP-MCP-SDK

一个轻量级的、可用于生产的PHP SDK,用于与 模型上下文协议(MCP) 服务器使用 JSON-RPC 2.0。该包裹附带多个运输后端和内置 具有指数回退的重试逻辑,因此您可以将MCP工具调用集成到 任何PHP应用程序,只需付出最小的努力。


特性

  • JSON-RPC 2.0客户端 -- listTools() 和 callTool() 直接映射到MCP 协议方法。
  • 运输抽象 --交换HTTP、stdio或内存传输,无需 更改客户端代码。
  • HTTP传输 --使用cURL通过HTTP/HTTPS连接到远程MCP服务器。
  • 标准运输 --启动本地MCP服务器进程并与之通信 通过stdin/stdout。
  • 内存传输 --用于单元测试的确定性、基于队列的传输。
  • 使用指数回退重试 --可配置的最大重试次数、基本延迟和 瞬态故障的退避倍数。
  • 严格打字 -- declare(strict_types=1) 在任何地方,全面覆盖PHPDoc。

安装

composer require victorstack-ai/php-mcp-sdk-foundation-launch

要求: PHP 8.1或更高版本,ext curl(用于 HttpTransport).


用法

HTTP传输(远程MCP服务器)

use VictorStackAi\McpSdk\McpClient;
use VictorStackAi\McpSdk\Transport\HttpTransport;

$transport = new HttpTransport('https://mcp.example.com/rpc');
$client    = new McpClient($transport);

// List available tools
$tools = $client->listTools();
foreach ($tools as $tool) {
    echo $tool['name'] . ': ' . $tool['description'] . PHP_EOL;
}

// Call a tool
$result = $client->callTool('search_docs', ['query' => 'installation']);
print_r($result);

标准传输(本地MCP服务器进程)

use VictorStackAi\McpSdk\McpClient;
use VictorStackAi\McpSdk\Transport\StdioTransport;

// Launch a local MCP server and communicate over stdin/stdout
$transport = new StdioTransport('node', ['./mcp-server.js']);
$client    = new McpClient($transport);

$tools  = $client->listTools();
$result = $client->callTool($tools[0]['name'], ['key' => 'value']);

// Close the process when done
$transport->close();

内存传输(测试)

use VictorStackAi\McpSdk\McpClient;
use VictorStackAi\McpSdk\Transport\InMemoryTransport;

$transport = new InMemoryTransport([
    [
        'jsonrpc' => '2.0',
        'id'      => 1,
        'result'  => [
            'tools' => [
                ['name' => 'ping', 'description' => 'Pings the server.'],
            ],
        ],
    ],
]);

$client = new McpClient($transport);
$tools  = $client->listTools();
assert($tools[0]['name'] === 'ping');

重试逻辑

默认情况下 McpClient 重试失败的请求最多 3次 随着 指数退避(基延迟500ms,乘数2x)。您可以对此进行自定义:

$client = new McpClient(
    transport:  $transport,
    maxRetries: 5,      // retry up to 5 times
    retryDelay: 1000,   // start with 1 000 ms delay
    retryMultiplier: 1.5,
);

集 maxRetries 到 0 完全禁用重试逻辑。


建筑

+---------------------+
|     McpClient       |  JSON-RPC 2.0 client with retry logic
+----------+----------+
           |
           | send(payload): array
           v
+---------------------+
| TransportInterface  |  Contract for all transports
+---------------------+
     ^    ^    ^
     |    |    |
+----+  +-+-+  +----+
| Http| |Stdio| |InMem|
| Trnsp| |Trnsp| |Trnsp|
+------+ +-----+ +-----+
  cURL   proc_open  queue

通过定制运输进行扩展

实施 TransportInterface 并将您的运输工具注入 McpClient:

use VictorStackAi\McpSdk\Transport\TransportInterface;

final class RedisTransport implements TransportInterface
{
    public function send(array $payload): array
    {
        // Publish the JSON-RPC payload to a Redis channel,
        // wait for the response, and return it as an array.
    }
}

$client = new McpClient(new RedisTransport());

发展

# Install dependencies
composer install

# Run linter (PSR-12)
composer lint

# Run tests
composer test

许可证

该项目根据 MIT许可证.

版权所有(c)2025维克托·希门尼斯。