@@ -88,53 +88,19 @@ func RunHTTPServer(cfg HTTPServerConfig) error {
8888 logger := slog .New (slogHandler )
8989 logger .Info ("starting server" , "version" , cfg .Version , "host" , cfg .Host , "dynamicToolsets" , cfg .DynamicToolsets , "readOnly" , cfg .ReadOnly , "lockdownEnabled" , cfg .LockdownMode )
9090
91- // Set up repo access cache for lockdown mode
92- var opts []lockdown.RepoAccessOption
93- if cfg .LockdownMode {
94- opts = []lockdown.RepoAccessOption {
95- lockdown .WithLogger (logger .With ("component" , "lockdown" )),
96- }
97- if cfg .RepoAccessCacheTTL != nil {
98- opts = append (opts , lockdown .WithTTL (* cfg .RepoAccessCacheTTL ))
99- }
100- }
101-
10291 apiHost , err := utils .ParseAPIHost (cfg .Host )
10392 if err != nil {
10493 return fmt .Errorf ("failed to parse API host: %w" , err )
10594 }
10695
107- deps := github .NewRequestDeps (
108- & apiHost ,
109- cfg .Version ,
110- cfg .LockdownMode ,
111- opts ,
112- t ,
113- github.FeatureFlags {
114- LockdownMode : cfg .LockdownMode ,
115- },
116- cfg .ContentWindowSize ,
117- )
118-
119- ghServer , err := github .NewMcpServer (& github.MCPServerConfig {
120- Version : cfg .Version ,
121- Host : cfg .Host ,
122- EnabledToolsets : cfg .EnabledToolsets ,
123- EnabledTools : cfg .EnabledTools ,
124- EnabledFeatures : cfg .EnabledFeatures ,
125- DynamicToolsets : cfg .DynamicToolsets ,
126- ReadOnly : cfg .ReadOnly ,
127- Translator : t ,
128- ContentWindowSize : cfg .ContentWindowSize ,
129- LockdownMode : cfg .LockdownMode ,
130- Logger : logger ,
131- RepoAccessTTL : cfg .RepoAccessCacheTTL ,
132- }, deps )
133- if err != nil {
134- return fmt .Errorf ("failed to create MCP server: %w" , err )
96+ repoAccessOpts := []lockdown.RepoAccessOption {
97+ lockdown .WithLogger (logger .With ("component" , "lockdown" )),
98+ }
99+ if cfg .RepoAccessCacheTTL != nil {
100+ repoAccessOpts = append (repoAccessOpts , lockdown .WithTTL (* cfg .RepoAccessCacheTTL ))
135101 }
136102
137- handler := NewHttpMcpHandler (& cfg , ghServer )
103+ handler := NewHttpMcpHandler (& cfg , t , & apiHost , repoAccessOpts , logger )
138104
139105 httpSvr := http.Server {
140106 Addr : ":8082" ,
@@ -166,20 +132,59 @@ func RunHTTPServer(cfg HTTPServerConfig) error {
166132}
167133
168134type HttpMcpHandler struct {
169- config * HTTPServerConfig
170- ghServer * mcp.Server
135+ config * HTTPServerConfig
136+ apiHosts utils.ApiHost
137+ logger * slog.Logger
138+ t translations.TranslationHelperFunc
139+ repoAccessOpts []lockdown.RepoAccessOption
171140}
172141
173- func NewHttpMcpHandler (cfg * HTTPServerConfig , mcpServer * mcp.Server ) * HttpMcpHandler {
142+ func NewHttpMcpHandler (cfg * HTTPServerConfig ,
143+ t translations.TranslationHelperFunc ,
144+ apiHosts * utils.ApiHost ,
145+ repoAccessOptions []lockdown.RepoAccessOption ,
146+ logger * slog.Logger ) * HttpMcpHandler {
174147 return & HttpMcpHandler {
175- config : cfg ,
176- ghServer : mcpServer ,
148+ config : cfg ,
149+ apiHosts : * apiHosts ,
150+ logger : logger ,
151+ t : t ,
152+ repoAccessOpts : repoAccessOptions ,
177153 }
178154}
179155
180156func (s * HttpMcpHandler ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
157+ // Set up repo access cache for lockdown mode
158+ deps := github .NewRequestDeps (
159+ & s .apiHosts ,
160+ s .config .Version ,
161+ s .repoAccessOpts ,
162+ s .t ,
163+ github.FeatureFlags {
164+ LockdownMode : s .config .LockdownMode ,
165+ },
166+ s .config .ContentWindowSize ,
167+ )
168+
169+ ghServer , err := github .NewMcpServer (& github.MCPServerConfig {
170+ Version : s .config .Version ,
171+ Host : s .config .Host ,
172+ EnabledToolsets : s .config .EnabledToolsets ,
173+ EnabledTools : s .config .EnabledTools ,
174+ EnabledFeatures : s .config .EnabledFeatures ,
175+ DynamicToolsets : s .config .DynamicToolsets ,
176+ ReadOnly : s .config .ReadOnly ,
177+ Translator : s .t ,
178+ ContentWindowSize : s .config .ContentWindowSize ,
179+ Logger : s .logger ,
180+ RepoAccessTTL : s .config .RepoAccessCacheTTL ,
181+ }, deps )
182+ if err != nil {
183+ w .WriteHeader (http .StatusInternalServerError )
184+ }
185+
181186 mcpHandler := mcp .NewStreamableHTTPHandler (func (r * http.Request ) * mcp.Server {
182- return s . ghServer
187+ return ghServer
183188 }, & mcp.StreamableHTTPOptions {
184189 Stateless : true ,
185190 })
0 commit comments