-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathProgram.cs
More file actions
66 lines (57 loc) · 2.03 KB
/
Program.cs
File metadata and controls
66 lines (57 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using CodeContext.Mcp;
using CodeContext.Services;
namespace CodeContext;
/// <summary>
/// Main program entry point.
/// Supports both CLI mode and MCP server mode.
/// </summary>
public class Program
{
public static async Task Main(string[] args)
{
// Check if running in MCP server mode
if (args.Contains("--mcp") || args.Contains("--server"))
{
await RunMcpServer(args);
}
else
{
// Run in CLI mode
ProgramCli.RunCli(args);
}
}
/// <summary>
/// Runs the MCP server mode.
/// </summary>
private static async Task RunMcpServer(string[] args)
{
var builder = Host.CreateApplicationBuilder(args);
// Log to stderr (keeps stdout clean for JSON-RPC)
builder.Logging.ClearProviders();
builder.Logging.AddConsole(options =>
{
options.LogToStandardErrorThreshold = LogLevel.Trace;
});
// Register our services
builder.Services.AddSingleton<Interfaces.IConsoleWriter, ConsoleWriter>();
// Add MCP server with stdio transport and our tools
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
var host = builder.Build();
// Log startup message to stderr
Console.Error.WriteLine("CodeContext MCP Server starting...");
Console.Error.WriteLine("Available tools:");
Console.Error.WriteLine(" - GetCodeContext: Get optimized code context for a task");
Console.Error.WriteLine(" - GetProjectStructure: Get project directory structure");
Console.Error.WriteLine(" - ListProjectFiles: List all project files with metadata");
Console.Error.WriteLine(" - GetFileContent: Get content of specific files");
Console.Error.WriteLine();
await host.RunAsync();
}
}