Upgrade MCP Go SDK to v1.2.0-pre.1 and add Octicon icons to tools
- Upgrade MCP Go SDK from v1.1.0 to v1.2.0-pre.1 for Icon support - Add Icon field to ToolsetMetadata for Octicon name assignment - Add OcticonURL() helper to generate CDN URLs for Octicon SVGs - Add Icons() method on ToolsetMetadata to generate MCP Icon objects - Apply icons automatically in RegisterFunc when tool is registered - Add icons to all 22 toolset metadata constants with appropriate Octicons - Update server.go to use new Capabilities API (fixes deprecation warnings) This demonstrates how the toolsets refactor makes adding new features simpler: icons are defined once in ToolsetMetadata and automatically applied to all tools in that toolset during registration.
This commit is contained in:
@@ -37,7 +37,7 @@ require (
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/modelcontextprotocol/go-sdk v1.1.0
|
||||
github.com/modelcontextprotocol/go-sdk v1.2.0-pre.1
|
||||
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/rogpeppe/go-internal v1.13.1 // indirect
|
||||
|
||||
@@ -17,6 +17,8 @@ github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrK
|
||||
github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
@@ -55,8 +57,8 @@ github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwX
|
||||
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
|
||||
github.com/migueleliasweb/go-github-mock v1.3.0 h1:2sVP9JEMB2ubQw1IKto3/fzF51oFC6eVWOOFDgQoq88=
|
||||
github.com/migueleliasweb/go-github-mock v1.3.0/go.mod h1:ipQhV8fTcj/G6m7BKzin08GaJ/3B5/SonRAkgrk0zCY=
|
||||
github.com/modelcontextprotocol/go-sdk v1.1.0 h1:Qjayg53dnKC4UZ+792W21e4BpwEZBzwgRW6LrjLWSwA=
|
||||
github.com/modelcontextprotocol/go-sdk v1.1.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10=
|
||||
github.com/modelcontextprotocol/go-sdk v1.2.0-pre.1 h1:14+JrlEIFvUmbu5+iJzWPLk8CkpvegfKr42oXyjp3O4=
|
||||
github.com/modelcontextprotocol/go-sdk v1.2.0-pre.1/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10=
|
||||
github.com/muesli/cache2go v0.0.0-20221011235721-518229cd8021 h1:31Y+Yu373ymebRdJN1cWLLooHH8xAr0MhKTEJGV/87g=
|
||||
github.com/muesli/cache2go v0.0.0-20221011235721-518229cd8021/go.mod h1:WERUkUryfUWlrHnFSO/BEUZ+7Ns8aZy7iVOGewxKzcc=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
|
||||
@@ -3,6 +3,7 @@ package inventory
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
)
|
||||
@@ -26,6 +27,35 @@ type ToolsetMetadata struct {
|
||||
Description string
|
||||
// Default indicates this toolset should be enabled by default
|
||||
Default bool
|
||||
// Icon is the name of the Octicon to use for tools in this toolset.
|
||||
// Use the base name without size suffix, e.g., "repo" not "repo-16".
|
||||
// See https://primer.style/foundations/icons for available icons.
|
||||
Icon string
|
||||
}
|
||||
|
||||
// OcticonURL returns the CDN URL for a GitHub Octicon SVG. Size should be 16 or 24.
|
||||
func OcticonURL(name string, size int) string {
|
||||
return fmt.Sprintf("https://raw.githubusercontent.com/primer/octicons/main/icons/%s-%d.svg", name, size)
|
||||
}
|
||||
|
||||
// Icons returns MCP Icon objects for this toolset, or nil if no icon is set.
|
||||
// Icons are provided in both 16x16 and 24x24 sizes.
|
||||
func (tm ToolsetMetadata) Icons() []mcp.Icon {
|
||||
if tm.Icon == "" {
|
||||
return nil
|
||||
}
|
||||
return []mcp.Icon{
|
||||
{
|
||||
Source: OcticonURL(tm.Icon, 16),
|
||||
MIMEType: "image/svg+xml",
|
||||
Sizes: []string{"16x16"},
|
||||
},
|
||||
{
|
||||
Source: OcticonURL(tm.Icon, 24),
|
||||
MIMEType: "image/svg+xml",
|
||||
Sizes: []string{"24x24"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// ServerTool represents an MCP tool with metadata and a handler generator function.
|
||||
@@ -81,9 +111,14 @@ func (st *ServerTool) Handler(deps any) mcp.ToolHandler {
|
||||
}
|
||||
|
||||
// RegisterFunc registers the tool with the server using the provided dependencies.
|
||||
// Icons are automatically applied from the toolset metadata if not already set.
|
||||
// Panics if the tool has no handler - all tools should have handlers.
|
||||
func (st *ServerTool) RegisterFunc(s *mcp.Server, deps any) {
|
||||
handler := st.Handler(deps) // This will panic if HandlerFunc is nil
|
||||
// Apply icons from toolset metadata if tool doesn't have icons set
|
||||
if len(st.Tool.Icons) == 0 {
|
||||
st.Tool.Icons = st.Toolset.Icons()
|
||||
}
|
||||
s.AddTool(&st.Tool, handler)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user