svrnty-mcp-client/samples/CodexMcpClient/Program.cs
Svrnty 97880406dc refactor: rename OpenHarbor.MCP to Svrnty.MCP across all libraries
- Renamed all directories: OpenHarbor.MCP.* → Svrnty.MCP.*
- Updated all namespaces in 179 C# files
- Renamed 20 .csproj files and 3 .sln files
- Updated 193 documentation references
- Updated 33 references in main CODEX codebase
- Updated Codex.sln with new paths
- Build verified: 0 errors

Preparing for extraction to standalone repositories.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 21:04:17 -04:00

125 lines
3.6 KiB
C#

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<McpServerConfig>
{
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<string, object>
{
["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;