- 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>
125 lines
3.6 KiB
C#
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;
|