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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy