using Svrnty.MCP.Client.Core.Exceptions; using Svrnty.MCP.Client.Core.Models; using Svrnty.MCP.Client.Infrastructure; Console.WriteLine("=== Svrnty.MCP.Client - CODEX Example ===\n"); // Step 1: Configure MCP servers var serverConfigs = new List { new McpServerConfig { Name = "codex-server", Transport = new StdioTransportConfig { Type = "Stdio", Command = "dotnet", Args = new[] { "run", "--project", "/home/svrnty/codex/Svrnty.MCP.Server/samples/CodexMcpServer/CodexMcpServer.csproj" } }, Timeout = TimeSpan.FromSeconds(30), Enabled = true } }; // Step 2: Create and initialize the MCP client await using var mcpClient = new McpClient(serverConfigs); try { Console.WriteLine("Connecting to MCP servers..."); await mcpClient.ConnectAllAsync(); var connectedServers = await mcpClient.GetConnectedServersAsync(); Console.WriteLine($"✓ Connected to {connectedServers.Count()} server(s)\n"); // Step 3: List available tools from each server foreach (var server in connectedServers) { Console.WriteLine($"--- Tools from '{server.Name}' ---"); try { var tools = await mcpClient.ListToolsAsync(server.Name); foreach (var tool in tools) { Console.WriteLine($" • {tool.Name}"); Console.WriteLine($" Description: {tool.Description}"); } Console.WriteLine(); } catch (McpConnectionException ex) { Console.WriteLine($" Error listing tools: {ex.Message}\n"); } } // Step 4: Example - Search CODEX (if tool exists) Console.WriteLine("--- Example: Searching CODEX ---"); try { var searchResult = await mcpClient.CallToolAsync( serverName: "codex-server", toolName: "search_codex", arguments: new Dictionary { ["query"] = "Model Context Protocol", ["maxResults"] = 5 } ); if (searchResult.IsSuccess) { Console.WriteLine("✓ Search successful!"); Console.WriteLine($"Results:\n{searchResult.Content}"); } else { Console.WriteLine($"✗ Search failed: {searchResult.Error}"); } } catch (ServerNotFoundException ex) { Console.WriteLine($"✗ Server not found: {ex.Message}"); } catch (ToolNotFoundException ex) { Console.WriteLine($"✗ Tool not found: {ex.Message}"); } catch (McpConnectionException ex) { Console.WriteLine($"✗ Connection error: {ex.Message}"); } Console.WriteLine("\n--- Example: Health Check ---"); // Step 5: Health check example foreach (var server in connectedServers) { try { await mcpClient.PingAsync(server.Name); Console.WriteLine($"✓ {server.Name} is healthy"); } catch (Exception ex) { Console.WriteLine($"✗ {server.Name} is unhealthy: {ex.Message}"); } } Console.WriteLine("\nDisconnecting from all servers..."); await mcpClient.DisconnectAllAsync(); Console.WriteLine("✓ Disconnected successfully"); } catch (Exception ex) { Console.WriteLine($"\n✗ Error: {ex.Message}"); Console.WriteLine($"Stack trace: {ex.StackTrace}"); return 1; } Console.WriteLine("\n=== Example Complete ==="); return 0;