Skip to content

Commit 1969f25

Browse files
move resources to a toolset
1 parent b11db64 commit 1969f25

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

internal/ghmcp/server.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ func NewMCPServer(cfg MCPServerConfig) (*server.MCPServer, error) {
120120
return nil, fmt.Errorf("failed to enable toolsets: %w", err)
121121
}
122122

123-
github.RegisterResources(ghServer, getClient, cfg.Translator)
124-
125123
// Register the tools with the server
126124
tsg.RegisterTools(ghServer)
127125

pkg/github/resources.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

pkg/github/tools.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ func DefaultToolsetGroup(readOnly bool, getClient GetClientFn, getGQLClient GetG
3838
toolsets.NewServerTool(CreateBranch(getClient, t)),
3939
toolsets.NewServerTool(PushFiles(getClient, t)),
4040
toolsets.NewServerTool(DeleteFile(getClient, t)),
41+
).
42+
AddResourceTemplates(
43+
toolsets.NewServerResourceTemplate(GetRepositoryResourceContent(getClient, t)),
44+
toolsets.NewServerResourceTemplate(GetRepositoryResourceBranchContent(getClient, t)),
45+
toolsets.NewServerResourceTemplate(GetRepositoryResourceCommitContent(getClient, t)),
46+
toolsets.NewServerResourceTemplate(GetRepositoryResourceTagContent(getClient, t)),
47+
toolsets.NewServerResourceTemplate(GetRepositoryResourcePrContent(getClient, t)),
4148
)
4249
issues := toolsets.NewToolset("issues", "GitHub Issues related tools").
4350
AddReadTools(

pkg/toolsets/toolsets.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
3649
type 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

4561
func (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+
76117
func (t *Toolset) SetReadOnly() {
77118
// Set the toolset to read-only
78119
t.readOnly = true

0 commit comments

Comments
 (0)