Forge
csharp9332cf7c
1using System.Collections.Frozen;
2using System.Text.Json;
3using HybridCodebaseIndex.Mcp;
4using ModelContextProtocol.Protocol;
5using ModelContextProtocol.Server;
6
7var tools = ToolCatalog.Build();
8
9var options = new McpServerOptions
10{
11 ServerInfo = new Implementation { Name = "HybridCodebaseIndex.Mcp", Version = "0.1.0" },
12 ProtocolVersion = "2024-11-05",
13 Capabilities = new ServerCapabilities { Tools = new ToolsCapability { ListChanged = false } },
14 Handlers = new McpServerHandlers
15 {
16 ListToolsHandler = (_, _) => ValueTask.FromResult(new ListToolsResult { Tools = tools }),
17
18 CallToolHandler = (request, _) =>
19 {
20 var name = request.Params?.Name ?? "";
21 var args = request.Params?.Arguments is IReadOnlyDictionary<string, JsonElement> d
22 ? d
23 : FrozenDictionary<string, JsonElement>.Empty;
24
25 try
26 {
27 var text = ToolHandlers.Handle(name, args);
28 return ValueTask.FromResult(new CallToolResult { Content = [new TextContentBlock { Text = text }] });
29 }
30 catch (ArgumentException ex)
31 {
32 return ValueTask.FromResult(new CallToolResult
33 {
34 Content = [new TextContentBlock { Text = $"Error: {ex.Message}" }],
35 IsError = true,
36 });
37 }
38 catch (Exception ex)
39 {
40 return ValueTask.FromResult(new CallToolResult
41 {
42 Content = [new TextContentBlock { Text = "Error: " + ex.Message }],
43 IsError = true,
44 });
45 }
46 },
47 },
48};
49
50var transport = new StdioServerTransport("HybridCodebaseIndex.Mcp");
51await using var server = McpServer.Create(transport, options);
52await server.RunAsync();
53return 0;
54
View only · write via MCP/CIDE