Skip to content

Commit 5a6cdb0

Browse files
Support Remote without source
* create server.yaml * could be closed source * Remotes without Images
1 parent 7c20f73 commit 5a6cdb0

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

pkg/catalog/tile.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func ToTile(ctx context.Context, server servers.Server) (Tile, error) {
4444
license := "Apache License 2.0"
4545
githubStars := 0
4646

47-
if server.Type == "server" {
47+
if server.Type == "server" && server.Remote.URL == "" {
4848
client := github.NewFromServer(server)
4949
repository, err := client.GetProjectRepository(ctx, upstream)
5050
if err != nil {
@@ -127,7 +127,7 @@ func ToTile(ctx context.Context, server servers.Server) (Tile, error) {
127127

128128
image := server.Image
129129

130-
if server.Type == "server" && image == "" {
130+
if server.Type == "server" && image == "" && server.Remote.URL == "" {
131131
return Tile{}, fmt.Errorf("no image for server: %s", server.Name)
132132
}
133133
if server.Type == "poci" && image != "" {
@@ -168,6 +168,15 @@ func ToTile(ctx context.Context, server servers.Server) (Tile, error) {
168168

169169
dateAdded := time.Now().Format(time.RFC3339)
170170

171+
var remote Remote
172+
if server.Remote.URL != "" {
173+
remote = Remote{
174+
TransportType: server.Remote.TransportType,
175+
URL: server.Remote.URL,
176+
Headers: server.Remote.Headers,
177+
}
178+
}
179+
171180
return Tile{
172181
Description: addDot(strings.TrimSpace(strings.ReplaceAll(description, "\n", " "))),
173182
Title: server.About.Title,
@@ -178,6 +187,7 @@ func ToTile(ctx context.Context, server servers.Server) (Tile, error) {
178187
ToolsURL: "http://desktop.docker.com/mcp/catalog/v" + strconv.Itoa(Version) + "/tools/" + server.Name + ".json",
179188
Source: source,
180189
Upstream: upstream,
190+
Remote: remote,
181191
Icon: server.About.Icon,
182192
Secrets: secrets,
183193
Env: env,

pkg/catalog/types.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ type Tile struct {
141141
// Source string `json:"source,omitempty" yaml:"source,omitempty"`
142142
Source string `json:"source" yaml:"source"`
143143
Upstream string `json:"upstream,omitempty" yaml:"upstream,omitempty"`
144+
Remote Remote `json:"remote,omitempty" yaml:"remote,omitempty"`
144145
Icon string `json:"icon" yaml:"icon"`
145146
Tools []servers.Tool `json:"tools" yaml:"tools"`
146147
Secrets []Secret `json:"secrets,omitempty" yaml:"secrets,omitempty"`
@@ -197,3 +198,47 @@ type Env struct {
197198
Name string `json:"name" yaml:"name"`
198199
Value string `json:"value" yaml:"value"`
199200
}
201+
202+
type Remote struct {
203+
TransportType string `json:"transport_type,omitempty" yaml:"transport_type,omitempty"`
204+
URL string `json:"url,omitempty" yaml:"url,omitempty"`
205+
Headers map[string]string `json:"headers,omitempty" yaml:"headers,omitempty"`
206+
}
207+
208+
func (r Remote) MarshalYAML() (interface{}, error) {
209+
mapNode := &yaml.Node{
210+
Kind: yaml.MappingNode,
211+
Content: []*yaml.Node{},
212+
}
213+
214+
if r.TransportType != "" {
215+
mapNode.Content = append(mapNode.Content,
216+
&yaml.Node{Kind: yaml.ScalarNode, Value: "transport_type"},
217+
&yaml.Node{Kind: yaml.ScalarNode, Value: r.TransportType})
218+
}
219+
220+
if r.URL != "" {
221+
mapNode.Content = append(mapNode.Content,
222+
&yaml.Node{Kind: yaml.ScalarNode, Value: "url"},
223+
&yaml.Node{Kind: yaml.ScalarNode, Value: r.URL})
224+
}
225+
226+
if len(r.Headers) > 0 {
227+
headersNode := &yaml.Node{
228+
Kind: yaml.MappingNode,
229+
Content: []*yaml.Node{},
230+
}
231+
232+
for k, v := range r.Headers {
233+
headersNode.Content = append(headersNode.Content,
234+
&yaml.Node{Kind: yaml.ScalarNode, Value: k},
235+
&yaml.Node{Kind: yaml.ScalarNode, Value: v, Style: yaml.DoubleQuotedStyle})
236+
}
237+
238+
mapNode.Content = append(mapNode.Content,
239+
&yaml.Node{Kind: yaml.ScalarNode, Value: "headers"},
240+
headersNode)
241+
}
242+
243+
return mapNode, nil
244+
}

pkg/servers/types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type Server struct {
3636
Meta Meta `yaml:"meta,omitempty" json:"meta,omitempty"`
3737
About About `yaml:"about,omitempty" json:"about,omitempty"`
3838
Source Source `yaml:"source,omitempty" json:"source,omitempty"`
39+
Remote Remote `yaml:"remote,omitempty" json:"remote,omitempty"`
3940
Run Run `yaml:"run,omitempty" json:"run,omitempty"`
4041
Config Config `yaml:"config,omitempty" json:"config,omitempty"`
4142
OAuth []OAuthProvider `yaml:"oauth,omitempty" json:"oauth,omitempty"`
@@ -104,6 +105,12 @@ type Source struct {
104105
BuildTarget string `yaml:"buildTarget,omitempty" json:"buildTarget,omitempty"`
105106
}
106107

108+
type Remote struct {
109+
TransportType string `yaml:"transport_type,omitempty" json:"transport_type,omitempty"`
110+
URL string `yaml:"url,omitempty" json:"url,omitempty"`
111+
Headers map[string]string `yaml:"headers,omitempty" json:"headers,omitempty"`
112+
}
113+
107114
type Run struct {
108115
Command []string `yaml:"command,omitempty" json:"command,omitempty"`
109116
Volumes []string `yaml:"volumes,omitempty" json:"volumes,omitempty"`

0 commit comments

Comments
 (0)