package app import ( "context" "fmt" "io" "os" "strings" "github.com/mark3labs/mcp-go/server" "forge.lclr.dev/AI/xdebug-mcp/internal/cache" "forge.lclr.dev/AI/xdebug-mcp/internal/tools" "forge.lclr.dev/AI/xdebug-mcp/mcpgen" ) func Run(_ context.Context, args []string, version string) error { c := cache.New(cache.DefaultCapacity) return dispatch(args, version, c, os.Stdout) } func dispatch(args []string, version string, c *cache.Cache, stdout io.Writer) error { cmd := "mcp" if len(args) > 0 { cmd = strings.TrimSpace(args[0]) } switch cmd { case "", "mcp": return runMCP(c, version) case "version": _, err := fmt.Fprintln(stdout, version) return err case "help", "-h", "--help": _, err := fmt.Fprintf(stdout, "%s\n\nUsage:\n %s [command]\n\nCommands:\n mcp Run the MCP server (default)\n version Print the version\n\nOptions:\n -h, --help Show this help\n", mcpgen.DefaultDescription, mcpgen.BinaryName, ) return err default: return fmt.Errorf("unknown command %q — run '%s --help' for usage", cmd, mcpgen.BinaryName) } } func runMCP(c *cache.Cache, version string) error { s := server.NewMCPServer(mcpgen.BinaryName, version) s.AddTool(tools.AnalyzeTool(), tools.AnalyzeHandler(c)) s.AddTool(tools.CallersTool(), tools.CallersHandler(c)) s.AddTool(tools.CalleesTool(), tools.CalleesHandler(c)) return server.ServeStdio(s) }