Skip to content

Commit 5c2ab27

Browse files
authored
Fix parsing bug that breaks Docker Desktop client listing (#110)
* Fix a bug that breaks Docker Desktop client listing. * Handle http in client configs.
1 parent c07f209 commit 5c2ab27

File tree

4 files changed

+46
-11
lines changed

4 files changed

+46
-11
lines changed

cmd/docker-mcp/client/config_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ func Test_yq_list(t *testing.T) {
3232
Args: []string{"mcp", "gateway", "run"},
3333
},
3434
},
35-
SSEServers: []MCPServerSSE{},
35+
SSEServers: []MCPServerSSE{},
36+
HTTPServers: []MCPServerHTTP{},
3637
},
3738
},
3839
{
@@ -47,7 +48,8 @@ func Test_yq_list(t *testing.T) {
4748
Args: []string{"mcp", "gateway", "run"},
4849
},
4950
},
50-
SSEServers: []MCPServerSSE{},
51+
SSEServers: []MCPServerSSE{},
52+
HTTPServers: []MCPServerHTTP{},
5153
},
5254
},
5355
{
@@ -65,7 +67,8 @@ func Test_yq_list(t *testing.T) {
6567
Name: "my-server",
6668
},
6769
},
68-
SSEServers: []MCPServerSSE{},
70+
SSEServers: []MCPServerSSE{},
71+
HTTPServers: []MCPServerHTTP{},
6972
},
7073
},
7174
{
@@ -93,6 +96,7 @@ func Test_yq_list(t *testing.T) {
9396
Headers: map[string]string{"VERSION": "1.2"},
9497
},
9598
},
99+
HTTPServers: []MCPServerHTTP{},
96100
},
97101
},
98102
}

cmd/docker-mcp/client/ls.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func prettyPrintBaseData(vendor string, data MCPClientCfgBase) {
135135
circle := redCircle
136136
nrServers := 0
137137
if data.cfg != nil {
138-
nrServers = len(data.cfg.STDIOServers) + len(data.cfg.SSEServers)
138+
nrServers = len(data.cfg.STDIOServers) + len(data.cfg.SSEServers) + len(data.cfg.HTTPServers)
139139
}
140140
if nrServers > 0 {
141141
circle = orangeCircle
@@ -155,6 +155,9 @@ func prettyPrintBaseData(vendor string, data MCPClientCfgBase) {
155155
for _, server := range data.cfg.SSEServers {
156156
fmt.Printf(" %s: %s (sse)\n", server.Name, server.String())
157157
}
158+
for _, server := range data.cfg.HTTPServers {
159+
fmt.Printf(" %s: %s (http)\n", server.Name, server.String())
160+
}
158161
}
159162

160163
func (cfg GlobalConfig) GetData() any {

cmd/docker-mcp/client/parse.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package client
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
67
"strings"
78
)
89

@@ -14,6 +15,7 @@ import (
1415
type MCPJSONLists struct {
1516
STDIOServers []MCPServerSTDIO
1617
SSEServers []MCPServerSSE
18+
HTTPServers []MCPServerHTTP
1719
}
1820

1921
type MCPServerSTDIO struct {
@@ -41,10 +43,20 @@ type MCPServerSSE struct {
4143
Headers map[string]string `json:"headers"`
4244
}
4345

46+
type MCPServerHTTP struct {
47+
Name string `json:"name"`
48+
URL string `json:"url"`
49+
Headers map[string]string `json:"headers"`
50+
}
51+
4452
func (c *MCPServerSSE) String() string {
4553
return c.URL
4654
}
4755

56+
func (c *MCPServerHTTP) String() string {
57+
return c.URL
58+
}
59+
4860
func UnmarshalMCPJSONList(data []byte) (*MCPJSONLists, error) {
4961
if len(data) == 0 {
5062
return &MCPJSONLists{}, nil
@@ -56,6 +68,7 @@ func UnmarshalMCPJSONList(data []byte) (*MCPJSONLists, error) {
5668
cfg := &MCPJSONLists{
5769
STDIOServers: []MCPServerSTDIO{},
5870
SSEServers: []MCPServerSSE{},
71+
HTTPServers: []MCPServerHTTP{},
5972
}
6073
for _, raw := range temp {
6174
itemType, _ := getType(raw) // type is an optional field, default to stdio if not explicitly set
@@ -72,8 +85,14 @@ func UnmarshalMCPJSONList(data []byte) (*MCPJSONLists, error) {
7285
return nil, err
7386
}
7487
cfg.SSEServers = append(cfg.SSEServers, server)
88+
case "http":
89+
var server MCPServerHTTP
90+
if err := json.Unmarshal(raw, &server); err != nil {
91+
return nil, err
92+
}
93+
cfg.HTTPServers = append(cfg.HTTPServers, server)
7594
default:
76-
fmt.Printf("unknown server type for %q\n", itemType)
95+
fmt.Fprintf(os.Stderr, "unknown server type for %q\n", itemType)
7796
}
7897
}
7998
return cfg, nil

cmd/docker-mcp/client/parse_test.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,18 @@ func Test_UnmarshalMCPJSONList(t *testing.T) {
2424
"name": "my-server",
2525
"type": "stdio"
2626
},
27-
{
28-
"name":"my-remote-server",
29-
"type": "sse",
30-
"url": "http://api.contoso.com/sse",
31-
"headers": { "VERSION": "1.2" }
32-
}
27+
{
28+
"name":"my-remote-server",
29+
"type": "sse",
30+
"url": "http://api.contoso.com/sse",
31+
"headers": { "VERSION": "1.2" }
32+
},
33+
{
34+
"name":"my-remote-server",
35+
"type": "http",
36+
"url": "http://api.contoso.com/http",
37+
"headers": { "VERSION": "1.2" }
38+
}
3339
]`,
3440
result: &MCPJSONLists{
3541
STDIOServers: []MCPServerSTDIO{
@@ -38,6 +44,9 @@ func Test_UnmarshalMCPJSONList(t *testing.T) {
3844
SSEServers: []MCPServerSSE{
3945
{Name: "my-remote-server", URL: "http://api.contoso.com/sse", Headers: map[string]string{"VERSION": "1.2"}},
4046
},
47+
HTTPServers: []MCPServerHTTP{
48+
{Name: "my-remote-server", URL: "http://api.contoso.com/http", Headers: map[string]string{"VERSION": "1.2"}},
49+
},
4150
},
4251
},
4352
{

0 commit comments

Comments
 (0)