PHP-MCP-SDK
 ](https://www.php.net/)  
一个轻量级的、可用于生产的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维克托·希门尼斯。
