package mcp
import (
"context"
"fmt"
)
type TypedToolHandlerFunc [T any ] func (ctx context .Context , request CallToolRequest , args T ) (*CallToolResult , error )
type StructuredToolHandlerFunc [TArgs any , TResult any ] func (ctx context .Context , request CallToolRequest , args TArgs ) (TResult , error )
func NewTypedToolHandler [T any ](handler TypedToolHandlerFunc [T ]) func (ctx context .Context , request CallToolRequest ) (*CallToolResult , error ) {
return func (ctx context .Context , request CallToolRequest ) (*CallToolResult , error ) {
var args T
if err := request .BindArguments (&args ); err != nil {
return NewToolResultError (fmt .Sprintf ("failed to bind arguments: %v" , err )), nil
}
return handler (ctx , request , args )
}
}
func NewStructuredToolHandler [TArgs any , TResult any ](handler StructuredToolHandlerFunc [TArgs , TResult ]) func (ctx context .Context , request CallToolRequest ) (*CallToolResult , error ) {
return func (ctx context .Context , request CallToolRequest ) (*CallToolResult , error ) {
var args TArgs
if err := request .BindArguments (&args ); err != nil {
return NewToolResultError (fmt .Sprintf ("failed to bind arguments: %v" , err )), nil
}
result , err := handler (ctx , request , args )
if err != nil {
return NewToolResultError (fmt .Sprintf ("tool execution failed: %v" , err )), nil
}
return NewToolResultStructuredOnly (result ), nil
}
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .