*/ class CallToolRequestHandler implements RequestHandlerInterface { /** * @param array $toolDefinitions */ public function __construct(private array $toolDefinitions) { } public function supports(Request $request): bool { return $request instanceof CallToolRequest; } /** * @return Response|Error */ public function handle(Request $request, SessionInterface $session): Response|Error { \assert($request instanceof CallToolRequest); $name = $request->name; $args = $request->arguments ?? []; if (!isset($this->toolDefinitions[$name])) { return new Error($request->getId(), Error::METHOD_NOT_FOUND, \sprintf('Tool not found: %s', $name)); } try { switch ($name) { case 'say_hello': $greetName = (string) ($args['name'] ?? 'world'); $result = [new TextContent(\sprintf('Hello, %s!', $greetName))]; break; case 'sum': $a = (float) ($args['a'] ?? 0); $b = (float) ($args['b'] ?? 0); $result = [new TextContent((string) ($a + $b))]; break; default: $result = [new TextContent('Unknown tool')]; } return new Response($request->getId(), new CallToolResult($result)); } catch (\Throwable $e) { return new Response($request->getId(), new CallToolResult([new TextContent('Tool execution failed')], true)); } } }