MCP架构PHP
](https://packagist.org/packages/automattic/mcp-schema) ](https://packagist.org/packages/automattic/mcp-schema) 
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或更高版本。看 许可证 了解详情。
链接
-
