@@ -33,13 +33,29 @@ func NewServerTool(tool mcp.Tool, handler server.ToolHandlerFunc) server.ServerT
3333 return server.ServerTool {Tool : tool , Handler : handler }
3434}
3535
36+ func NewServerResourceTemplate (resourceTemplate mcp.ResourceTemplate , handler server.ResourceTemplateHandlerFunc ) ServerResourceTemplate {
37+ return ServerResourceTemplate {
38+ resourceTemplate : resourceTemplate ,
39+ handler : handler ,
40+ }
41+ }
42+
43+ // ServerResource represents a resource that can be registered with the MCP server.
44+ type ServerResourceTemplate struct {
45+ resourceTemplate mcp.ResourceTemplate
46+ handler server.ResourceTemplateHandlerFunc
47+ }
48+
3649type Toolset struct {
3750 Name string
3851 Description string
3952 Enabled bool
4053 readOnly bool
4154 writeTools []server.ServerTool
4255 readTools []server.ServerTool
56+ // resources are not tools, but the community seems to be moving towards namespaces as a broader concept
57+ // and in order to have multiple servers running concurrently, we want to avoid overlapping resources too.
58+ resourceTemplates []ServerResourceTemplate
4359}
4460
4561func (t * Toolset ) GetActiveTools () []server.ServerTool {
@@ -73,6 +89,31 @@ func (t *Toolset) RegisterTools(s *server.MCPServer) {
7389 }
7490}
7591
92+ func (t * Toolset ) AddResourceTemplates (templates ... ServerResourceTemplate ) * Toolset {
93+ t .resourceTemplates = append (t .resourceTemplates , templates ... )
94+ return t
95+ }
96+
97+ func (t * Toolset ) GetActiveResourceTemplates () []ServerResourceTemplate {
98+ if ! t .Enabled {
99+ return nil
100+ }
101+ return t .resourceTemplates
102+ }
103+
104+ func (t * Toolset ) GetAvailableResourceTemplates () []ServerResourceTemplate {
105+ return t .resourceTemplates
106+ }
107+
108+ func (t * Toolset ) RegisterResourcesTemplates (s * server.MCPServer ) {
109+ if ! t .Enabled {
110+ return
111+ }
112+ for _ , resource := range t .resourceTemplates {
113+ s .AddResourceTemplate (resource .resourceTemplate , resource .handler )
114+ }
115+ }
116+
76117func (t * Toolset ) SetReadOnly () {
77118 // Set the toolset to read-only
78119 t .readOnly = true
0 commit comments