setClientInfo('STDIO Roots Test', '1.0.0') ->setInitTimeout(30) ->setRequestTimeout(120) ->setCapabilities(new ClientCapabilities(roots: true, rootsListChanged: true)) ->addRequestHandler($rootsRequestHandler) ->build(); $transport = new StdioTransport( command: 'php', args: [__DIR__.'/../server/client-communication/server.php'], ); echo "Connecting to MCP server...\n"; $client->connect($transport); $serverInfo = $client->getServerInfo(); echo 'Connected to: '.($serverInfo->name ?? 'unknown')."\n\n"; // The server tool asks the client for its roots, which triggers the handler above. echo "Calling 'inspect_workspace_roots'...\n"; $result = $client->callTool(name: 'inspect_workspace_roots'); echo "\nResult:\n"; foreach ($result->content as $content) { if ($content instanceof TextContent) { echo $content->text."\n"; } } // Whenever the client's workspace folders change, notify the server so it can // request an updated list via roots/list. echo "\nNotifying the server that the roots list changed...\n"; $client->sendRootsListChanged(); $client->disconnect();