Skip to content

Commit e4d55a9

Browse files
authored
chore: bump mcp-go from 0.13.0 to 0.15.0 (#56)
Includes some updates to fix use of removed function and remove some trailing whitespace.
1 parent 0cc0143 commit e4d55a9

File tree

4 files changed

+28
-24
lines changed

4 files changed

+28
-24
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/grafana/grafana-openapi-client-go v0.0.0-20250108132429-8d7e1f158f65
88
github.com/grafana/incident-go v0.0.0-20250211094540-dc6a98fdae43
99
github.com/invopop/jsonschema v0.13.0
10-
github.com/mark3labs/mcp-go v0.13.0
10+
github.com/mark3labs/mcp-go v0.15.0
1111
github.com/prometheus/client_golang v1.21.0
1212
github.com/prometheus/common v0.62.0
1313
github.com/stretchr/testify v1.10.0
@@ -47,6 +47,7 @@ require (
4747
github.com/prometheus/client_model v0.6.1 // indirect
4848
github.com/prometheus/procfs v0.15.1 // indirect
4949
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
50+
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
5051
go.mongodb.org/mongo-driver v1.14.0 // indirect
5152
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
5253
go.opentelemetry.io/otel v1.34.0 // indirect

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
6262
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
6363
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
6464
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
65-
github.com/mark3labs/mcp-go v0.13.0 h1:HP+cJaE9KjWufUF9FxN/XgcXE6LVSebFZLiZYPmFbGU=
66-
github.com/mark3labs/mcp-go v0.13.0/go.mod h1:cjMlBU0cv/cj9kjlgmRhoJ5JREdS7YX83xeIG9Ko/jE=
65+
github.com/mark3labs/mcp-go v0.15.0 h1:lViiC4dk6chJHZccezaTzZLMOQVUXJDGNQPtzExr5NQ=
66+
github.com/mark3labs/mcp-go v0.15.0/go.mod h1:xBB350hekQsJAK7gJAii8bcEoWemboLm2mRm5/+KBaU=
6767
github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
6868
github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
6969
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@@ -100,6 +100,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
100100
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
101101
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
102102
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
103+
github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
104+
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
103105
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
104106
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
105107
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=

tools.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package mcpgrafana
33
import (
44
"context"
55
"encoding/json"
6+
"errors"
67
"fmt"
78
"reflect"
89

@@ -57,25 +58,25 @@ func ConvertTool[T any, R any](name, description string, toolHandler ToolHandler
5758
handlerValue := reflect.ValueOf(toolHandler)
5859
handlerType := handlerValue.Type()
5960
if handlerType.Kind() != reflect.Func {
60-
return zero, nil, fmt.Errorf("tool handler must be a function")
61+
return zero, nil, errors.New("tool handler must be a function")
6162
}
6263
if handlerType.NumIn() != 2 {
63-
return zero, nil, fmt.Errorf("tool handler must have 2 arguments")
64+
return zero, nil, errors.New("tool handler must have 2 arguments")
6465
}
6566
if handlerType.NumOut() != 2 {
66-
return zero, nil, fmt.Errorf("tool handler must return 2 values")
67+
return zero, nil, errors.New("tool handler must return 2 values")
6768
}
6869
if handlerType.In(0) != reflect.TypeOf((*context.Context)(nil)).Elem() {
69-
return zero, nil, fmt.Errorf("tool handler first argument must be context.Context")
70+
return zero, nil, errors.New("tool handler first argument must be context.Context")
7071
}
7172
// We no longer check the type of the first return value
7273
if handlerType.Out(1).Kind() != reflect.Interface {
73-
return zero, nil, fmt.Errorf("tool handler second return value must be error")
74+
return zero, nil, errors.New("tool handler second return value must be error")
7475
}
7576

7677
argType := handlerType.In(1)
7778
if argType.Kind() != reflect.Struct {
78-
return zero, nil, fmt.Errorf("tool handler second argument must be a struct")
79+
return zero, nil, errors.New("tool handler second argument must be a struct")
7980
}
8081

8182
handler := func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
@@ -87,23 +88,23 @@ func ConvertTool[T any, R any](name, description string, toolHandler ToolHandler
8788

8889
unmarshaledArgs := reflect.New(argType).Interface()
8990
if err := json.Unmarshal([]byte(s), unmarshaledArgs); err != nil {
90-
return mcp.NewToolResultError(fmt.Sprintf("unmarshal args: %s", err)), nil
91+
return nil, fmt.Errorf("unmarshal args: %s", err)
9192
}
9293

9394
// Need to dereference the unmarshaled arguments
9495
of := reflect.ValueOf(unmarshaledArgs)
9596
if of.Kind() != reflect.Ptr || !of.Elem().CanInterface() {
96-
return mcp.NewToolResultError("arguments must be a struct"), nil
97+
return nil, errors.New("arguments must be a struct")
9798
}
9899

99100
args := []reflect.Value{reflect.ValueOf(ctx), of.Elem()}
100101

101102
output := handlerValue.Call(args)
102103
if len(output) != 2 {
103-
return mcp.NewToolResultError("tool handler must return 2 values"), nil
104+
return nil, errors.New("tool handler must return 2 values")
104105
}
105106
if !output[0].CanInterface() {
106-
return mcp.NewToolResultError("tool handler first return value must be interfaceable"), nil
107+
return nil, errors.New("tool handler first return value must be interfaceable")
107108
}
108109

109110
// Handle the error return value first
@@ -112,7 +113,7 @@ func ConvertTool[T any, R any](name, description string, toolHandler ToolHandler
112113
if output[1].Kind() == reflect.Interface && !output[1].IsNil() {
113114
handlerErr, ok = output[1].Interface().(error)
114115
if !ok {
115-
return mcp.NewToolResultError("tool handler second return value must be error"), nil
116+
return nil, errors.New("tool handler second return value must be error")
116117
}
117118
}
118119

@@ -122,13 +123,13 @@ func ConvertTool[T any, R any](name, description string, toolHandler ToolHandler
122123
}
123124

124125
// Check if the first return value is nil (only for pointer, interface, map, etc.)
125-
isNilable := output[0].Kind() == reflect.Ptr ||
126-
output[0].Kind() == reflect.Interface ||
127-
output[0].Kind() == reflect.Map ||
128-
output[0].Kind() == reflect.Slice ||
129-
output[0].Kind() == reflect.Chan ||
126+
isNilable := output[0].Kind() == reflect.Ptr ||
127+
output[0].Kind() == reflect.Interface ||
128+
output[0].Kind() == reflect.Map ||
129+
output[0].Kind() == reflect.Slice ||
130+
output[0].Kind() == reflect.Chan ||
130131
output[0].Kind() == reflect.Func
131-
132+
132133
if isNilable && output[0].IsNil() {
133134
return nil, nil
134135
}
@@ -165,7 +166,7 @@ func ConvertTool[T any, R any](name, description string, toolHandler ToolHandler
165166
// Case 4: Any other type - marshal to JSON
166167
jsonBytes, err := json.Marshal(returnVal)
167168
if err != nil {
168-
return mcp.NewToolResultError(fmt.Sprintf("failed to marshal return value: %s", err)), nil
169+
return nil, fmt.Errorf("failed to marshal return value: %s", err)
169170
}
170171

171172
return mcp.NewToolResultText(string(jsonBytes)), nil

tools_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,9 @@ func TestConvertTool(t *testing.T) {
527527
},
528528
}
529529

530-
result, err := handler(context.Background(), mismatchRequest)
531-
assert.Nil(t, err) // Error is returned in the result, not as an error
532-
assert.Contains(t, result.Content[0].(mcp.TextContent).Text, "unmarshal args")
530+
_, err = handler(context.Background(), mismatchRequest)
531+
assert.Error(t, err)
532+
assert.Contains(t, err.Error(), "unmarshal args")
533533
})
534534
}
535535

0 commit comments

Comments
 (0)