package demomcp import ( "context" "github.com/modelcontextprotocol/go-sdk/mcp" "k8s.io/utils/ptr" demo "gitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/demo/app/v1alpha1" ) var DemoTool = &mcp.Tool{ Name: "Demo Tool", Title: "Demo Random Fact Tool", Description: "Returns a random fact for demo or boredom purposes", Annotations: &mcp.ToolAnnotations{ ReadOnlyHint: true, OpenWorldHint: ptr.To(true), }, } type DemoToolParams struct { Language string `json:"language,omitempty" jsonschema:"Random Fact Language Abbreviation (e.g. en)"` } func (d *DemoMCPServer) addDemoRandomFactTool() { d.server.AddTool( mcp.ToolFor(DemoTool, d.demoToolHandler), ) } func (d *DemoMCPServer) demoToolHandler(ctx context.Context, req *mcp.CallToolRequest, args *DemoToolParams) ( *mcp.CallToolResult, any, error, ) { d.log.Debug().Str("language", args.Language).Msg("demo fact tool called") fact, err := d.demoGRPC.GetDemo(ctx, &demo.GetDemoRequest{ Language: &args.Language, }) if err != nil { return &mcp.CallToolResult{ IsError: true, Meta: mcp.Meta{ "error": err, }, }, nil, err } return &mcp.CallToolResult{ Meta: mcp.Meta{ "language": fact.GetLanguage(), "source": fact.GetSource(), }, Content: []mcp.Content{ &mcp.TextContent{ Text: fact.GetFact(), }, }, }, nil, nil }