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

Function RunHTTPServer

pkg/http/server.go:105–230  ·  view source on GitHub ↗
(cfg ServerConfig)

Source from the content-addressed store, hash-verified

103}
104
105func RunHTTPServer(cfg ServerConfig) error {
106 // Create app context
107 ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
108 defer stop()
109
110 t, dumpTranslations := translations.TranslationHelper()
111
112 var slogHandler slog.Handler
113 var logOutput io.Writer
114 if cfg.LogFilePath != "" {
115 file, err := os.OpenFile(cfg.LogFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
116 if err != nil {
117 return fmt.Errorf("failed to open log file: %w", err)
118 }
119 logOutput = file
120 slogHandler = slog.NewTextHandler(logOutput, &slog.HandlerOptions{Level: slog.LevelDebug})
121 } else {
122 logOutput = os.Stderr
123 slogHandler = slog.NewTextHandler(logOutput, &slog.HandlerOptions{Level: slog.LevelInfo})
124 }
125 logger := slog.New(slogHandler)
126 logger.Info("starting server", "version", cfg.Version, "host", cfg.Host, "lockdownEnabled", cfg.LockdownMode, "readOnly", cfg.ReadOnly, "insidersMode", cfg.InsidersMode)
127
128 apiHost, err := utils.NewAPIHost(cfg.Host)
129 if err != nil {
130 return fmt.Errorf("failed to parse API host: %w", err)
131 }
132
133 repoAccessOpts := []lockdown.RepoAccessOption{
134 lockdown.WithLogger(logger.With("component", "lockdown")),
135 }
136 if cfg.RepoAccessCacheTTL != nil {
137 repoAccessOpts = append(repoAccessOpts, lockdown.WithTTL(*cfg.RepoAccessCacheTTL))
138 }
139
140 featureChecker := createHTTPFeatureChecker(cfg.EnabledFeatures, cfg.InsidersMode)
141
142 obs, err := observability.NewExporters(logger, metrics.NewNoopMetrics())
143 if err != nil {
144 return fmt.Errorf("failed to create observability exporters: %w", err)
145 }
146
147 deps := github.NewRequestDeps(
148 apiHost,
149 cfg.Version,
150 cfg.LockdownMode,
151 repoAccessOpts,
152 t,
153 cfg.ContentWindowSize,
154 featureChecker,
155 obs,
156 )
157
158 // Initialize the global tool scope map
159 err = initGlobalToolScopeMap(t)
160 if err != nil {
161 return fmt.Errorf("failed to initialize tool scope map: %w", err)
162 }

Callers

nothing calls this directly

Calls 15

RegisterRoutesMethod · 0.95
TranslationHelperFunction · 0.92
NewAPIHostFunction · 0.92
WithLoggerFunction · 0.92
WithTTLFunction · 0.92
NewExportersFunction · 0.92
NewNoopMetricsFunction · 0.92
NewRequestDepsFunction · 0.92
NewFetcherFunction · 0.92
NewAuthHandlerFunction · 0.92
createHTTPFeatureCheckerFunction · 0.85
initGlobalToolScopeMapFunction · 0.85

Tested by

no test coverage detected