xdebug-mcp/internal/app/app.go

53 lines
1.4 KiB
Go
Raw Normal View History

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)
}