Files
go-server-with-otel/pkg/demo/demomcp/tool.go

59 lines
1.3 KiB
Go

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