Files
mcp/internal/tools/list_modules.go
T

48 lines
1.4 KiB
Go
Raw Normal View History

package tools
import (
"context"
"code.nochebuena.dev/einherjar/mcp/internal/index"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
type listModulesInput struct{}
type moduleSummary struct {
Name string `json:"name"`
ImportPath string `json:"importPath"`
Purpose string `json:"purpose"`
GoVersion string `json:"goVersion"`
SubPackages []string `json:"subPackages"`
}
type listModulesOutput struct {
Modules []moduleSummary `json:"modules"`
}
func registerListModules(s *mcp.Server, idx *index.Index) {
mcp.AddTool(s, &mcp.Tool{
Name: "list_modules",
Description: "List every module of the Einherjar framework with its purpose, import path, Go version, and sub-packages. Use this first to discover what the framework offers.",
}, func(ctx context.Context, req *mcp.CallToolRequest, _ listModulesInput) (*mcp.CallToolResult, listModulesOutput, error) {
out := listModulesOutput{Modules: make([]moduleSummary, 0, len(idx.Modules))}
for _, m := range idx.Modules {
subs := make([]string, 0, len(m.SubPackages))
for _, sp := range m.SubPackages {
if sp.Name != "" {
subs = append(subs, sp.Name)
}
}
out.Modules = append(out.Modules, moduleSummary{
Name: m.Name,
ImportPath: m.ImportPath,
Purpose: m.Purpose,
GoVersion: m.GoVersion,
SubPackages: subs,
})
}
return jsonText(out), out, nil
})
}