Files
wehub-resource-sync 4cddfcf2f3
Backend Tests / Tests (other) (push) Failing after 1s
Backend Tests / Static Checks (push) Failing after 2s
Backend Tests / Tests (internal) (push) Failing after 2s
Backend Tests / Tests (server) (push) Failing after 1s
Backend Tests / Tests (store) (push) Failing after 1s
Build Canary Image / build-frontend (push) Failing after 1s
Frontend Tests / Lint (push) Failing after 1s
Build Canary Image / build-push (linux/amd64) (push) Has been skipped
Build Canary Image / build-push (linux/arm64) (push) Has been skipped
Build Canary Image / merge (push) Has been skipped
Frontend Tests / Build (push) Failing after 1s
Release Please / release-please (push) Failing after 0s
Proto Linter / Lint Protos (push) Failing after 2s
chore: import upstream snapshot with attribution
2026-07-13 12:02:24 +08:00

63 lines
1.4 KiB
Go

package mcp
import (
"bytes"
"encoding/json"
sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/pkg/errors"
)
func normalizeStructuredContent(value any) map[string]any {
switch typed := value.(type) {
case nil:
return map[string]any{"ok": true}
case map[string]any:
return typed
case []any:
return map[string]any{"result": typed}
default:
return map[string]any{"result": typed}
}
}
func newStructuredToolResult(value any) (*sdkmcp.CallToolResult, error) {
structured := normalizeStructuredContent(value)
text, err := json.Marshal(structured)
if err != nil {
return nil, errors.Wrap(err, "failed to marshal MCP structured result")
}
return &sdkmcp.CallToolResult{
Content: []sdkmcp.Content{
&sdkmcp.TextContent{Text: string(text)},
},
StructuredContent: structured,
}, nil
}
func newToolErrorResult(message string) *sdkmcp.CallToolResult {
structured := map[string]any{
"error": map[string]any{
"message": message,
},
}
return &sdkmcp.CallToolResult{
Content: []sdkmcp.Content{
&sdkmcp.TextContent{Text: message},
},
StructuredContent: structured,
IsError: true,
}
}
func decodeJSONValue(data []byte) (any, error) {
if len(bytes.TrimSpace(data)) == 0 {
return nil, nil
}
var value any
if err := json.Unmarshal(data, &value); err != nil {
return nil, errors.Wrap(err, "failed to decode API JSON response")
}
return value, nil
}