1- package ghmcp
1+ package http
22
33import (
44 "context"
@@ -11,12 +11,10 @@ import (
1111 "syscall"
1212 "time"
1313
14- "github.com/github/github-mcp-server/pkg/github"
15- "github.com/github/github-mcp-server/pkg/http/middleware"
1614 "github.com/github/github-mcp-server/pkg/lockdown"
1715 "github.com/github/github-mcp-server/pkg/translations"
1816 "github.com/github/github-mcp-server/pkg/utils"
19- "github.com/modelcontextprotocol/ go-sdk/mcp "
17+ "github.com/go-chi/chi/v5 "
2018)
2119
2220type HTTPServerConfig struct {
@@ -102,9 +100,12 @@ func RunHTTPServer(cfg HTTPServerConfig) error {
102100
103101 handler := NewHttpMcpHandler (& cfg , t , & apiHost , repoAccessOpts , logger )
104102
103+ r := chi .NewRouter ()
104+ r .Mount ("/" , handler )
105+
105106 httpSvr := http.Server {
106107 Addr : ":8082" ,
107- Handler : handler ,
108+ Handler : r ,
108109 }
109110
110111 go func () {
@@ -130,64 +131,3 @@ func RunHTTPServer(cfg HTTPServerConfig) error {
130131 logger .Info ("server stopped gracefully" )
131132 return nil
132133}
133-
134- type HttpMcpHandler struct {
135- config * HTTPServerConfig
136- apiHosts utils.ApiHost
137- logger * slog.Logger
138- t translations.TranslationHelperFunc
139- repoAccessOpts []lockdown.RepoAccessOption
140- }
141-
142- func NewHttpMcpHandler (cfg * HTTPServerConfig ,
143- t translations.TranslationHelperFunc ,
144- apiHosts * utils.ApiHost ,
145- repoAccessOptions []lockdown.RepoAccessOption ,
146- logger * slog.Logger ) * HttpMcpHandler {
147- return & HttpMcpHandler {
148- config : cfg ,
149- apiHosts : * apiHosts ,
150- logger : logger ,
151- t : t ,
152- repoAccessOpts : repoAccessOptions ,
153- }
154- }
155-
156- func (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-
186- mcpHandler := mcp .NewStreamableHTTPHandler (func (r * http.Request ) * mcp.Server {
187- return ghServer
188- }, & mcp.StreamableHTTPOptions {
189- Stateless : true ,
190- })
191-
192- middleware .ExtractUserToken ()(mcpHandler ).ServeHTTP (w , r )
193- }
0 commit comments