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