MCPcopy
hub / github.com/github/github-mcp-server / NewStdioMCPServer

Function NewStdioMCPServer

internal/ghmcp/server.go:135–195  ·  view source on GitHub ↗
(ctx context.Context, cfg github.MCPServerConfig)

Source from the content-addressed store, hash-verified

133}
134
135func NewStdioMCPServer(ctx context.Context, cfg github.MCPServerConfig) (*mcp.Server, error) {
136 apiHost, err := utils.NewAPIHost(cfg.Host)
137 if err != nil {
138 return nil, fmt.Errorf("failed to parse API host: %w", err)
139 }
140
141 clients, err := createGitHubClients(cfg, apiHost)
142 if err != nil {
143 return nil, fmt.Errorf("failed to create GitHub clients: %w", err)
144 }
145
146 // Create feature checker — resolves explicit features + insiders expansion
147 featureChecker := createFeatureChecker(cfg.EnabledFeatures, cfg.InsidersMode)
148
149 // Create dependencies for tool handlers
150 obs, err := observability.NewExporters(cfg.Logger, metrics.NewNoopMetrics())
151 if err != nil {
152 return nil, fmt.Errorf("failed to create observability exporters: %w", err)
153 }
154 deps := github.NewBaseDeps(
155 clients.rest,
156 clients.gql,
157 clients.raw,
158 clients.repoAccess,
159 cfg.Translator,
160 github.FeatureFlags{
161 LockdownMode: cfg.LockdownMode,
162 },
163 cfg.ContentWindowSize,
164 featureChecker,
165 obs,
166 )
167 // Build and register the tool/resource/prompt inventory
168 inventoryBuilder := github.NewInventory(cfg.Translator).
169 WithDeprecatedAliases(github.DeprecatedToolAliases).
170 WithReadOnly(cfg.ReadOnly).
171 WithToolsets(github.ResolvedEnabledToolsets(cfg.EnabledToolsets, cfg.EnabledTools)).
172 WithTools(github.CleanTools(cfg.EnabledTools)).
173 WithExcludeTools(cfg.ExcludeTools).
174 WithServerInstructions().
175 WithFeatureChecker(featureChecker)
176
177 // Apply token scope filtering if scopes are known (for PAT filtering)
178 if cfg.TokenScopes != nil {
179 inventoryBuilder = inventoryBuilder.WithFilter(github.CreateToolScopeFilter(cfg.TokenScopes))
180 }
181
182 inventory, err := inventoryBuilder.Build()
183 if err != nil {
184 return nil, fmt.Errorf("failed to build inventory: %w", err)
185 }
186
187 ghServer, err := github.NewMCPServer(ctx, &cfg, deps, inventory)
188 if err != nil {
189 return nil, fmt.Errorf("failed to create GitHub MCP server: %w", err)
190 }
191
192 ghServer.AddReceivingMiddleware(addUserAgentsMiddleware(cfg, clients.restUATransp, clients.gqlHTTP))

Callers 1

RunStdioServerFunction · 0.85

Calls 15

NewAPIHostFunction · 0.92
NewExportersFunction · 0.92
NewNoopMetricsFunction · 0.92
createGitHubClientsFunction · 0.85
createFeatureCheckerFunction · 0.85
addUserAgentsMiddlewareFunction · 0.85
WithFeatureCheckerMethod · 0.80
WithExcludeToolsMethod · 0.80
WithToolsMethod · 0.80
WithToolsetsMethod · 0.80
WithReadOnlyMethod · 0.80

Tested by

no test coverage detected