MCP协议PHP数据对象

提供用于Model Context Protocol (MCP)的PHP数据转换对象(DTOs)、构建器和工厂,用于构建MCP服务器或客户端的基础。

  • by Automattic
  • PHP
  • 本地部署
  • 更新于
在 GitHub 查看 Automattic/mcp-schema-php

使用说明

MCP架构PHP

PHP数据传输对象(DTO)、构建器和工厂 模型上下文协议 (MCP)。

概述

此套餐提供 类型化PHP类 对于MCP协议模式。将其用作在PHP中构建MCP服务器或客户端的基础。

这是什么:

  • DTO fromArray()/toArray() 用于JSON-RPC消息处理
  • 用于构建复杂对象的Fluent Builder
  • 用于路由多态联合类型的工厂

这不是什么:

  • 不是MCP SDK(没有客户端/服务器实现)
  • 不是传输层(STDIO、HTTP、SSE由您负责)

安装

composer require automattic/mcp-schema

要求: PHP 7.4+

快速开始

use Automattic\MCP\Schema\Server\Tools\Dto\CallToolRequest;
use Automattic\MCP\Schema\Server\Tools\Builder\ToolBuilder;
use Automattic\MCP\Schema\Common\Protocol\Factory\ClientRequestFactory;

// 1. Parse incoming JSON-RPC request
$data = json_decode($jsonRpc, true);
$request = ClientRequestFactory::create($data);

// 2. Handle based on request type
if ($request instanceof CallToolRequest) {
    $toolName = $request->getParams()->getName();
    $arguments = $request->getParams()->getArguments();
    // ... execute tool
}

// 3. Build response using DTOs
$result = (new CallToolResultBuilder())
    ->content([$textContent])
    ->build();

模式结构

类型 计数 目的
DTO 179 具有验证功能的不可变数据对象
建设者 114 复杂DTO的流畅施工
工厂 9 多态联合型路由
接头 15 类型安全接头接口
枚举 3 基于类的枚举(兼容PHP 7.4)

命名空间模式

Automattic\MCP\Schema\{Domain}\{Subdomain}\{Type}\{Class}

Examples:
  Server\Tools\Dto\Tool
  Server\Tools\Builder\ToolBuilder
  Common\Protocol\Factory\ClientRequestFactory

域组织

域 目的 包含
Server/ 处理客户端请求 工具、资源、提示、日志记录
Client/ 处理服务器请求 采样、激励、根
Common/ 共享类型 协议、生命周期、任务、内容

核心模式

1.DTO(从数组/到数组)

所有DTO都支持双向阵列转换:

use Automattic\MCP\Schema\Server\Tools\Dto\Tool;

// Deserialize from JSON-RPC data
$tool = Tool::fromArray($data);

// Access typed properties
$name = $tool->getName();
$description = $tool->getDescription();
$inputSchema = $tool->getInputSchema();

// Serialize back to array
$array = $tool->toArray();

2.建筑商(流畅施工)

构建器提供流畅的API,用于构建具有2+个参数的DTO:

use Automattic\MCP\Schema\Server\Tools\Builder\ToolBuilder;
use Automattic\MCP\Schema\Server\Tools\Builder\ToolInputSchemaBuilder;

$tool = (new ToolBuilder())
    ->name('calculator')
    ->description('Performs arithmetic operations')
    ->inputSchema(
        (new ToolInputSchemaBuilder())
            ->type('object')
            ->properties([
                'operation' => ['type' => 'string', 'enum' => ['add', 'subtract']],
                'a' => ['type' => 'number'],
                'b' => ['type' => 'number'],
            ])
            ->required(['operation', 'a', 'b'])
            ->build()
    )
    ->build();

3.工厂(工会路线)

工厂从多态联合数据中实例化正确的类型:

use Automattic\MCP\Schema\Common\Protocol\Factory\ClientRequestFactory;
use Automattic\MCP\Schema\Server\Tools\Dto\ListToolsRequest;
use Automattic\MCP\Schema\Server\Tools\Dto\CallToolRequest;

$request = ClientRequestFactory::create($jsonRpcData);

// Route by type
match (get_class($request)) {
    ListToolsRequest::class => handleListTools($request),
    CallToolRequest::class => handleCallTool($request),
    default => methodNotFound(),
};

4.响应大楼

use Automattic\MCP\Schema\Common\Protocol\Builder\JSONRPCResultResponseBuilder;
use Automattic\MCP\Schema\Server\Tools\Builder\ListToolsResultBuilder;

$result = (new ListToolsResultBuilder())
    ->tools([$tool1, $tool2])
    ->build();

$response = (new JSONRPCResultResponseBuilder())
    ->id($request->getId())
    ->result($result)
    ->build();

echo json_encode($response->toArray());

按能力划分的关键类别

服务器功能

能力 关键类别
工具 Tool, CallToolRequest, CallToolResult, ToolBuilder
资源 Resource, ResourceTemplate, ReadResourceRequest, ResourceBuilder
提示 Prompt, PromptArgument, GetPromptRequest, PromptBuilder

客户能力

能力 关键类别
采样 CreateMessageRequest, CreateMessageResult, SamplingMessage
引出 ElicitRequest, ElicitResult, ElicitRequestParamsFactory
根 ListRootsRequest, ListRootsResult, Root

常见类型

类别 关键类别
协议 JSONRPCRequest, JSONRPCResultResponse, JSONRPCErrorResponse
工厂 ClientRequestFactory, ServerRequestFactory, ContentBlockFactory
生命周期 InitializeRequest, InitializeResult, PingRequest

重要提示:MCP命名约定

MCP命名违反直觉。名称表明 谁发送 消息:

术语 含义 处理方式
ClientRequest 请求 由...发送 客户 服务器 代码
ServerRequest 请求 由...发送 服务器 客户端 代码

思考:“ClientRequest”=“客户端发送的请求”

Claude代码集成

此套餐包括以下技能 克劳德代码 它在PHP中使用MCP时提供上下文文档。

composer run mcp-schema:install-claude-skill

这会将文档复制到项目的 .claude/ 目录,使Claude能够在构建MCP服务器或客户端时提供准确、上下文感知的帮助。

发展

# Run tests
composer test

# Static analysis (PHPStan level 8)
composer analyse

许可证

GPL-2.0或更高版本。看 许可证 了解详情。

链接