MCPcopy Index your code
hub / github.com/github/github-mcp-server / ForMCPRequest

Method ForMCPRequest

pkg/inventory/registry.go:102–153  ·  view source on GitHub ↗

ForMCPRequest returns a Registry optimized for a specific MCP request. This is designed for servers that create a new instance per request (like the remote server), allowing them to only register the items needed for that specific request rather than all ~90 tools. Parameters: - method: The MCP met

(method string, itemName string)

Source from the content-addressed store, hash-verified

100//
101// All existing filters (read-only, toolsets, etc.) still apply to the returned items.
102func (r *Inventory) ForMCPRequest(method string, itemName string) *Inventory {
103 // Create a shallow copy with shared filter settings
104 // Note: lazy-init maps (toolsByName, etc.) are NOT copied - the new Registry
105 // will initialize its own maps on first use if needed
106 result := &Inventory{
107 tools: r.tools,
108 resourceTemplates: r.resourceTemplates,
109 prompts: r.prompts,
110 deprecatedAliases: r.deprecatedAliases,
111 readOnly: r.readOnly,
112 enabledToolsets: r.enabledToolsets, // shared, not modified
113 additionalTools: r.additionalTools, // shared, not modified
114 featureChecker: r.featureChecker,
115 filters: r.filters, // shared, not modified
116 unrecognizedToolsets: r.unrecognizedToolsets,
117 }
118
119 // Helper to clear all item types
120 clearAll := func() {
121 result.tools = []ServerTool{}
122 result.resourceTemplates = []ServerResourceTemplate{}
123 result.prompts = []ServerPrompt{}
124 }
125
126 switch method {
127 case MCPMethodInitialize:
128 clearAll()
129 case MCPMethodToolsList:
130 result.resourceTemplates, result.prompts = nil, nil
131 case MCPMethodToolsCall:
132 result.resourceTemplates, result.prompts = nil, nil
133 if itemName != "" {
134 result.tools = r.filterToolsByName(itemName)
135 }
136 case MCPMethodResourcesList, MCPMethodResourcesTemplatesList:
137 result.tools, result.prompts = nil, nil
138 case MCPMethodResourcesRead:
139 // Keep all resources registered - SDK handles URI template matching internally
140 result.tools, result.prompts = nil, nil
141 case MCPMethodPromptsList:
142 result.tools, result.resourceTemplates = nil, nil
143 case MCPMethodPromptsGet:
144 result.tools, result.resourceTemplates = nil, nil
145 if itemName != "" {
146 result.prompts = r.filterPromptsByName(itemName)
147 }
148 default:
149 clearAll()
150 }
151
152 return result
153}
154
155// ToolsetIDs returns a sorted list of unique toolset IDs from all tools in this group.
156func (r *Inventory) ToolsetIDs() []ToolsetID {

Calls 2

filterToolsByNameMethod · 0.95
filterPromptsByNameMethod · 0.95