Skip to content

Commit fc3c832

Browse files
committed
Pass the whole config and pass headers
Signed-off-by: David Gageot <[email protected]>
1 parent 34cbcc9 commit fc3c832

File tree

3 files changed

+45
-15
lines changed

3 files changed

+45
-15
lines changed

cmd/docker-mcp/internal/catalog/types.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ type Env struct {
3737
}
3838

3939
type Remote struct {
40-
URL string `yaml:"url" json:"url"`
41-
Transport string `yaml:"transport,omitempty" json:"transport,omitempty"`
40+
URL string `yaml:"url" json:"url"`
41+
Transport string `yaml:"transport,omitempty" json:"transport,omitempty"`
42+
Headers map[string]string `yaml:"headers,omitempty" json:"headers,omitempty"`
4243
}
4344

4445
// POCI tools

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -313,12 +313,9 @@ func (cg *clientGetter) GetClient(ctx context.Context) (mcpclient.Client, error)
313313

314314
// Deprecated: Use Remote instead
315315
if cg.serverConfig.Spec.SSEEndpoint != "" {
316-
client = mcpclient.NewRemoteMCPClient(cg.serverConfig.Name, catalog.Remote{
317-
URL: cg.serverConfig.Spec.SSEEndpoint,
318-
Transport: "sse",
319-
})
316+
client = mcpclient.NewRemoteMCPClient(cg.serverConfig)
320317
} else if cg.serverConfig.Spec.Remote.URL != "" {
321-
client = mcpclient.NewRemoteMCPClient(cg.serverConfig.Name, cg.serverConfig.Spec.Remote)
318+
client = mcpclient.NewRemoteMCPClient(cg.serverConfig)
322319
} else if cg.cp.Static {
323320
client = mcpclient.NewStdioCmdClient(cg.serverConfig.Name, "socat", nil, "STDIO", fmt.Sprintf("TCP:mcp-%s:4444", cg.serverConfig.Name))
324321
} else {

cmd/docker-mcp/internal/mcp/remote.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ package mcp
33
import (
44
"context"
55
"fmt"
6+
"os"
67
"sync/atomic"
78

89
"github.com/mark3labs/mcp-go/client"
10+
mcptransport "github.com/mark3labs/mcp-go/client/transport"
911
"github.com/mark3labs/mcp-go/mcp"
1012

1113
"github.com/docker/mcp-gateway/cmd/docker-mcp/internal/catalog"
1214
)
1315

1416
type remoteMCPClient struct {
15-
name string
16-
config catalog.Remote
17+
config catalog.ServerConfig
1718

1819
initialized atomic.Bool
1920
*client.Client
2021
}
2122

22-
func NewRemoteMCPClient(name string, config catalog.Remote) Client {
23+
func NewRemoteMCPClient(config catalog.ServerConfig) Client {
2324
return &remoteMCPClient{
24-
name: name,
2525
config: config,
2626
}
2727
}
@@ -36,19 +36,45 @@ func (c *remoteMCPClient) Initialize(ctx context.Context, request mcp.Initialize
3636
err error
3737
)
3838

39-
switch c.config.Transport {
39+
// Read configuration.
40+
var (
41+
url string
42+
transport string
43+
)
44+
if c.config.Spec.SSEEndpoint != "" {
45+
// Deprecated
46+
url = c.config.Spec.SSEEndpoint
47+
transport = "sse"
48+
} else {
49+
url = c.config.Spec.Remote.URL
50+
transport = c.config.Spec.Remote.Transport
51+
}
52+
53+
// Secrets to env
54+
env := map[string]string{}
55+
for _, secret := range c.config.Spec.Secrets {
56+
env[secret.Env] = c.config.Secrets[secret.Name]
57+
}
58+
59+
// Headers
60+
headers := map[string]string{}
61+
for k, v := range c.config.Spec.Remote.Headers {
62+
headers[k] = expandEnv(v, env)
63+
}
64+
65+
switch transport {
4066
case "sse":
41-
remoteClient, err = client.NewSSEMCPClient(c.config.URL)
67+
remoteClient, err = client.NewSSEMCPClient(url, client.WithHeaders(headers))
4268
if err != nil {
4369
return nil, err
4470
}
4571
case "http":
46-
remoteClient, err = client.NewStreamableHttpClient(c.config.URL)
72+
remoteClient, err = client.NewStreamableHttpClient(url, mcptransport.WithHTTPHeaders(headers))
4773
if err != nil {
4874
return nil, err
4975
}
5076
default:
51-
return nil, fmt.Errorf("unsupported remote transport: %s", c.config.Transport)
77+
return nil, fmt.Errorf("unsupported remote transport: %s", transport)
5278
}
5379

5480
if err := remoteClient.Start(context.WithoutCancel(ctx)); err != nil {
@@ -64,3 +90,9 @@ func (c *remoteMCPClient) Initialize(ctx context.Context, request mcp.Initialize
6490
c.initialized.Store(true)
6591
return result, nil
6692
}
93+
94+
func expandEnv(value string, secrets map[string]string) string {
95+
return os.Expand(value, func(name string) string {
96+
return secrets[name]
97+
})
98+
}

0 commit comments

Comments
 (0)