Forge
csharpe9e34128
1using System.Text;
2using System.Text.Encodings.Web;
3using System.Text.Json;
4using System.Text.Json.Serialization;
5using DotnetBuildTestMcp;
6using ExportMcpManifest;
7using McpToolManifest;
8using Tool = ModelContextProtocol.Protocol.Tool;
9
10var tools = ToolCatalog.Build();
11var cliArgs = Environment.GetCommandLineArgs().Skip(1).ToArray();
12
13if (cliArgs.Contains("--write", StringComparer.Ordinal))
14{
15 var root = Directory.GetCurrentDirectory();
16 var jsonPath = Path.Combine(root, "mcp-tools.manifest.json");
17 var mdDir = Path.Combine(root, "docs");
18 var mdPath = Path.Combine(mdDir, "MCP-TOOLS.md");
19 Directory.CreateDirectory(mdDir);
20
21 WriteJsonFile(jsonPath, tools);
22 var md = McpToolsDocMarkdown.Build(tools.Select(t => (t.Name!, t.Description!)));
23 var appendixPath = Path.Combine(mdDir, "MCP-TOOLS-appendix.md");
24 if (File.Exists(appendixPath))
25 md += File.ReadAllText(appendixPath, Encoding.UTF8);
26
27 if (!md.EndsWith(Environment.NewLine, StringComparison.Ordinal))
28 md += Environment.NewLine;
29
30 File.WriteAllText(mdPath, md, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
31
32 Console.Error.WriteLine($"Wrote {jsonPath}");
33 Console.Error.WriteLine($"Wrote {mdPath}");
34 return;
35}
36
37if (cliArgs.Contains("--md-only", StringComparer.Ordinal))
38{
39 Console.WriteLine(McpToolsDocMarkdown.Build(tools.Select(t => (t.Name!, t.Description!))).TrimEnd());
40 return;
41}
42
43var doc = new McpToolManifestDocument
44{
45 SchemaVersion = 1,
46 McpId = "dotnet-build-test-mcp",
47 Title = "Dotnet Build/Test MCP",
48 Tools = tools.Select(t => new McpToolManifestTool { Name = t.Name, Description = t.Description }).ToList()
49};
50
51Console.WriteLine(JsonSerializer.Serialize(doc, new JsonSerializerOptions
52{
53 WriteIndented = true,
54 DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
55 Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
56}));
57
58static void WriteJsonFile(string path, List<Tool> tools)
59{
60 var doc = new McpToolManifestDocument
61 {
62 SchemaVersion = 1,
63 McpId = "dotnet-build-test-mcp",
64 Title = "Dotnet Build/Test MCP",
65 Tools = tools.Select(t => new McpToolManifestTool { Name = t.Name, Description = t.Description }).ToList()
66 };
67
68 File.WriteAllText(
69 path,
70 JsonSerializer.Serialize(doc, new JsonSerializerOptions
71 {
72 WriteIndented = true,
73 DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
74 Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
75 }) + Environment.NewLine,
76 new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
77}
78
View only · write via MCP/CIDE