48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
|
|
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
|
||
|
|
})
|
||
|
|
}
|