Skip to content

Commit 7fa8ac9

Browse files
committed
Store the mcpServer
Signed-off-by: David Gageot <[email protected]>
1 parent f5f4f49 commit 7fa8ac9

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

cmd/docker-mcp/internal/gateway/run.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type Gateway struct {
2121
docker docker.Client
2222
configurator Configurator
2323
clientPool *clientPool
24+
mcpServer *server.MCPServer
2425
health health.State
2526
}
2627

@@ -90,7 +91,7 @@ func (g *Gateway) Run(ctx context.Context) error {
9091
}
9192
toolCallbacks := interceptors.Callbacks(g.LogCalls, g.BlockSecrets, customInterceptors)
9293

93-
mcpServer := server.NewMCPServer(
94+
g.mcpServer = server.NewMCPServer(
9495
"Docker AI MCP Gateway",
9596
"2.0.1",
9697
server.WithToolHandlerMiddleware(toolCallbacks),
@@ -103,7 +104,7 @@ func (g *Gateway) Run(ctx context.Context) error {
103104
}),
104105
)
105106

106-
if err := g.reloadConfiguration(ctx, mcpServer, configuration); err != nil {
107+
if err := g.reloadConfiguration(ctx, configuration); err != nil {
107108
return fmt.Errorf("loading configuration: %w", err)
108109
}
109110

@@ -124,7 +125,7 @@ func (g *Gateway) Run(ctx context.Context) error {
124125
continue
125126
}
126127

127-
if err := g.reloadConfiguration(ctx, mcpServer, configuration); err != nil {
128+
if err := g.reloadConfiguration(ctx, configuration); err != nil {
128129
logf("> Unable to list capabilities: %s", err)
129130
continue
130131
}
@@ -143,22 +144,22 @@ func (g *Gateway) Run(ctx context.Context) error {
143144
switch strings.ToLower(g.Transport) {
144145
case "stdio":
145146
log("> Start stdio server")
146-
return g.startStdioServer(ctx, mcpServer, os.Stdin, os.Stdout)
147+
return g.startStdioServer(ctx, os.Stdin, os.Stdout)
147148

148149
case "sse":
149150
log("> Start sse server on port", g.Port)
150-
return g.startSseServer(ctx, mcpServer, ln)
151+
return g.startSseServer(ctx, ln)
151152

152153
case "streaming":
153154
log("> Start streaming server on port", g.Port)
154-
return g.startStreamingServer(ctx, mcpServer, ln)
155+
return g.startStreamingServer(ctx, ln)
155156

156157
default:
157158
return fmt.Errorf("unknown transport %q, expected 'stdio', 'sse' or 'streaming", g.Transport)
158159
}
159160
}
160161

161-
func (g *Gateway) reloadConfiguration(ctx context.Context, mcpServer *server.MCPServer, configuration Configuration) error {
162+
func (g *Gateway) reloadConfiguration(ctx context.Context, configuration Configuration) error {
162163
// Which servers are enabled in the registry.yaml?
163164
serverNames := configuration.ServerNames()
164165
if len(serverNames) == 0 {
@@ -178,12 +179,12 @@ func (g *Gateway) reloadConfiguration(ctx context.Context, mcpServer *server.MCP
178179

179180
// Update the server's capabilities.
180181
g.health.SetUnhealthy()
181-
mcpServer.SetTools(capabilities.Tools...)
182-
mcpServer.SetPrompts(capabilities.Prompts...)
183-
mcpServer.SetResources(capabilities.Resources...)
184-
mcpServer.RemoveAllResourceTemplates()
182+
g.mcpServer.SetTools(capabilities.Tools...)
183+
g.mcpServer.SetPrompts(capabilities.Prompts...)
184+
g.mcpServer.SetResources(capabilities.Resources...)
185+
g.mcpServer.RemoveAllResourceTemplates()
185186
for _, v := range capabilities.ResourceTemplates {
186-
mcpServer.AddResourceTemplate(v.ResourceTemplate, v.Handler)
187+
g.mcpServer.AddResourceTemplate(v.ResourceTemplate, v.Handler)
187188
}
188189
g.health.SetHealthy()
189190

cmd/docker-mcp/internal/gateway/transport.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import (
99
"github.com/mark3labs/mcp-go/server"
1010
)
1111

12-
func (g *Gateway) startStdioServer(ctx context.Context, mcpServer *server.MCPServer, stdin io.Reader, stdout io.Writer) error {
13-
return server.NewStdioServer(mcpServer).Listen(ctx, stdin, stdout)
12+
func (g *Gateway) startStdioServer(ctx context.Context, stdin io.Reader, stdout io.Writer) error {
13+
return server.NewStdioServer(g.mcpServer).Listen(ctx, stdin, stdout)
1414
}
1515

16-
func (g *Gateway) startSseServer(ctx context.Context, mcpServer *server.MCPServer, ln net.Listener) error {
16+
func (g *Gateway) startSseServer(ctx context.Context, ln net.Listener) error {
1717
mux := http.NewServeMux()
18-
sseServer := server.NewSSEServer(mcpServer)
18+
sseServer := server.NewSSEServer(g.mcpServer)
1919
mux.Handle("/sse", sseServer.SSEHandler())
2020
mux.Handle("/message", sseServer.MessageHandler())
2121
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
@@ -38,9 +38,9 @@ func (g *Gateway) startSseServer(ctx context.Context, mcpServer *server.MCPServe
3838
return httpServer.Serve(ln)
3939
}
4040

41-
func (g *Gateway) startStreamingServer(ctx context.Context, mcpServer *server.MCPServer, ln net.Listener) error {
41+
func (g *Gateway) startStreamingServer(ctx context.Context, ln net.Listener) error {
4242
mux := http.NewServeMux()
43-
mux.Handle("/mcp", server.NewStreamableHTTPServer(mcpServer))
43+
mux.Handle("/mcp", server.NewStreamableHTTPServer(g.mcpServer))
4444
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
4545
http.Redirect(w, r, "/mcp", http.StatusTemporaryRedirect)
4646
})

0 commit comments

Comments
 (0)