|
12 | 12 | use KLP\KlpMcpServer\Exceptions\ToolParamsValidatorException; |
13 | 13 | use KLP\KlpMcpServer\Protocol\Handlers\NotificationHandler; |
14 | 14 | use KLP\KlpMcpServer\Protocol\Handlers\RequestHandler; |
| 15 | +use KLP\KlpMcpServer\Server\Notification\PongHandler; |
| 16 | +use KLP\KlpMcpServer\Server\Request\PingHandler; |
| 17 | +use KLP\KlpMcpServer\Transports\SseTransportInterface; |
15 | 18 | use KLP\KlpMcpServer\Transports\TransportInterface; |
16 | 19 | use KLP\KlpMcpServer\Utils\DataUtil; |
17 | 20 |
|
@@ -41,6 +44,10 @@ final class MCPProtocol implements MCPProtocolInterface |
41 | 44 | public function __construct(private readonly TransportInterface $transport) |
42 | 45 | { |
43 | 46 | $this->transport->onMessage([$this, 'handleMessage']); |
| 47 | + if ($this->transport instanceof SseTransportInterface) { |
| 48 | + $this->registerNotificationHandler(new PongHandler($this->transport->getAdapter())); |
| 49 | + $this->registerRequestHandler(new PingHandler( $this->transport )); |
| 50 | + } |
44 | 51 | } |
45 | 52 |
|
46 | 53 | /** |
@@ -125,7 +132,7 @@ public function handleMessage(string $clientId, array $message): void |
125 | 132 | throw new JsonRpcErrorException(message: 'Invalid Request: Not a valid JSON-RPC 2.0 message', code: JsonRpcErrorCode::INVALID_REQUEST, data: $message); |
126 | 133 | } |
127 | 134 |
|
128 | | - $requestData = DataUtil::makeRequestData(message: $message); |
| 135 | + $requestData = DataUtil::makeRequestData(clientId: $clientId, message: $message); |
129 | 136 | if ($requestData instanceof RequestData) { |
130 | 137 | $this->handleRequestProcess(clientId: $clientId, requestData: $requestData); |
131 | 138 |
|
@@ -159,7 +166,7 @@ private function handleRequestProcess(string $clientId, RequestData $requestData |
159 | 166 | try { |
160 | 167 | foreach ($this->requestHandlers as $handler) { |
161 | 168 | if ($handler->isHandle(method: $requestData->method)) { |
162 | | - $result = $handler->execute(method: $requestData->method, params: $requestData->params); |
| 169 | + $result = $handler->execute(method: $requestData->method, messageId: $requestData->id, params: $requestData->params); |
163 | 170 |
|
164 | 171 | $resultResource = new JsonRpcResultResource(id: $requestData->id, result: $result); |
165 | 172 | $this->pushMessage(clientId: $clientId, message: $resultResource); |
|
0 commit comments