@@ -33,13 +33,29 @@ func NewServerTool(tool mcp.Tool, handler server.ToolHandlerFunc) server.ServerT
33
33
return server.ServerTool {Tool : tool , Handler : handler }
34
34
}
35
35
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
+
36
49
type Toolset struct {
37
50
Name string
38
51
Description string
39
52
Enabled bool
40
53
readOnly bool
41
54
writeTools []server.ServerTool
42
55
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
43
59
}
44
60
45
61
func (t * Toolset ) GetActiveTools () []server.ServerTool {
@@ -73,6 +89,31 @@ func (t *Toolset) RegisterTools(s *server.MCPServer) {
73
89
}
74
90
}
75
91
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
+
76
117
func (t * Toolset ) SetReadOnly () {
77
118
// Set the toolset to read-only
78
119
t .readOnly = true
0 commit comments