Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cab42b3

Browse files
feat: Mcp Server support streamableHttp (1Panel-dev#9761)
Refs 1Panel-dev#8482
1 parent 78f280c commit cab42b3

File tree

18 files changed

+130
-32
lines changed

18 files changed

+130
-32
lines changed

‎agent/app/dto/request/mcp_server.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ type McpServerSearch struct {
99
}
1010

1111
type McpServerCreate struct {
12-
Name string `json:"name" validate:"required"`
13-
Command string `json:"command" validate:"required"`
14-
Environments []Environment `json:"environments"`
15-
Volumes []Volume `json:"volumes"`
16-
Port int `json:"port" validate:"required"`
17-
ContainerName string `json:"containerName"`
18-
BaseURL string `json:"baseUrl"`
19-
SsePath string `json:"ssePath"`
20-
HostIP string `json:"hostIP"`
12+
Name string `json:"name" validate:"required"`
13+
Command string `json:"command" validate:"required"`
14+
Environments []Environment `json:"environments"`
15+
Volumes []Volume `json:"volumes"`
16+
Port int `json:"port" validate:"required"`
17+
ContainerName string `json:"containerName"`
18+
BaseURL string `json:"baseUrl"`
19+
SsePath string `json:"ssePath"`
20+
HostIP string `json:"hostIP"`
21+
StreamableHttpPath string `json:"streamableHttpPath"`
22+
OutputTransport string `json:"outputTransport" validate:"required"`
2123
}
2224

2325
type McpServerUpdate struct {

‎agent/app/model/mcp_server.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ package model
22

33
type McpServer struct {
44
BaseModel
5-
Name string `json:"name"`
6-
DockerCompose string `json:"dockerCompose"`
7-
Command string `json:"command"`
8-
ContainerName string `json:"containerName"`
9-
Message string `json:"message"`
10-
Port int `json:"port"`
11-
Status string `json:"status"`
12-
Env string `json:"env"`
13-
BaseURL string `json:"baseUrl"`
14-
SsePath string `json:"ssePath"`
15-
WebsiteID int `json:"websiteID"`
16-
Dir string `json:"dir"`
17-
HostIP string `json:"hostIP"`
5+
Name string `json:"name"`
6+
DockerCompose string `json:"dockerCompose"`
7+
Command string `json:"command"`
8+
ContainerName string `json:"containerName"`
9+
Message string `json:"message"`
10+
Port int `json:"port"`
11+
Status string `json:"status"`
12+
Env string `json:"env"`
13+
BaseURL string `json:"baseUrl"`
14+
SsePath string `json:"ssePath"`
15+
WebsiteID int `json:"websiteID"`
16+
Dir string `json:"dir"`
17+
HostIP string `json:"hostIP"`
18+
StreamableHttpPath string `json:"streamableHttpPath"`
19+
OutputTransport string `json:"outputTransport"`
1820
}

‎agent/app/service/mcp_server.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ func (m McpServerService) Page(req request.McpServerSearch) response.McpServersR
8686
}
8787

8888
func (m McpServerService) Update(req request.McpServerUpdate) error {
89+
go func() {
90+
if err := docker.PullImage("supercorp/supergateway:latest"); err != nil {
91+
global.LOG.Errorf("docker pull mcp image error: %s", err.Error())
92+
}
93+
}()
8994
mcpServer, err := mcpServerRepo.GetFirst(repo.WithByID(req.ID))
9095
if err != nil {
9196
return err
@@ -108,6 +113,8 @@ func (m McpServerService) Update(req request.McpServerUpdate) error {
108113
mcpServer.BaseURL = req.BaseURL
109114
mcpServer.SsePath = req.SsePath
110115
mcpServer.HostIP = req.HostIP
116+
mcpServer.StreamableHttpPath = req.StreamableHttpPath
117+
mcpServer.OutputTransport = req.OutputTransport
111118
if err := handleCreateParams(mcpServer, req.Environments, req.Volumes); err != nil {
112119
return err
113120
}
@@ -130,6 +137,11 @@ func (m McpServerService) Update(req request.McpServerUpdate) error {
130137
}
131138

132139
func (m McpServerService) Create(create request.McpServerCreate) error {
140+
go func() {
141+
if err := docker.PullImage("supercorp/supergateway:latest"); err != nil {
142+
global.LOG.Errorf("docker pull mcp image error: %s", err.Error())
143+
}
144+
}()
133145
servers, _ := mcpServerRepo.List()
134146
for _, server := range servers {
135147
if server.Port == create.Port {
@@ -154,15 +166,17 @@ func (m McpServerService) Create(create request.McpServerCreate) error {
154166
}
155167
mcpDir := path.Join(global.Dir.McpDir, create.Name)
156168
mcpServer := &model.McpServer{
157-
Name: create.Name,
158-
ContainerName: create.ContainerName,
159-
Port: create.Port,
160-
Command: create.Command,
161-
Status: constant.StatusStarting,
162-
BaseURL: create.BaseURL,
163-
SsePath: create.SsePath,
164-
Dir: mcpDir,
165-
HostIP: create.HostIP,
169+
Name: create.Name,
170+
ContainerName: create.ContainerName,
171+
Port: create.Port,
172+
Command: create.Command,
173+
Status: constant.StatusStarting,
174+
BaseURL: create.BaseURL,
175+
SsePath: create.SsePath,
176+
Dir: mcpDir,
177+
HostIP: create.HostIP,
178+
StreamableHttpPath: create.StreamableHttpPath,
179+
OutputTransport: create.OutputTransport,
166180
}
167181
if err := handleCreateParams(mcpServer, create.Environments, create.Volumes); err != nil {
168182
return err
@@ -524,6 +538,8 @@ func handleEnv(mcpServer *model.McpServer) gotenv.Env {
524538
env["BASE_URL"] = mcpServer.BaseURL
525539
env["SSE_PATH"] = mcpServer.SsePath
526540
env["HOST_IP"] = mcpServer.HostIP
541+
env["STREAMABLE_HTTP_PATH"] = mcpServer.StreamableHttpPath
542+
env["OUTPUT_TRANSPORT"] = mcpServer.OutputTransport
527543
envStr, _ := gotenv.Marshal(env)
528544
mcpServer.Env = envStr
529545
return env

‎agent/cmd/server/mcp/compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ services:
77
- "${HOST_IP}:${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}"
88
command: [
99
"--stdio", "${COMMAND}",
10+
"--outputTransport","${OUTPUT_TRANSPORT}",
1011
"--port", "${PANEL_APP_PORT_HTTP}",
1112
"--baseUrl", "${BASE_URL}",
1213
"--ssePath", "${SSE_PATH}",
14+
"--streamableHttpPath", "${STREAMABLE_HTTP_PATH}",
1315
"--messagePath", "${SSE_PATH}/messages"
1416
]
1517
networks:

‎agent/init/migration/migrate.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func InitAgentDB() {
3333
migrations.InitAlertConfig,
3434
migrations.AddMethodToAlertLog,
3535
migrations.AddMethodToAlertTask,
36+
migrations.UpdateMcpServer,
3637
})
3738
if err := m.Migrate(); err != nil {
3839
global.LOG.Error(err)

‎agent/init/migration/migrations/init.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,3 +419,16 @@ var AddMethodToAlertTask = &gormigrate.Migration{
419419
return nil
420420
},
421421
}
422+
423+
var UpdateMcpServer = &gormigrate.Migration{
424+
ID: "20250729-update-mcp-server",
425+
Migrate: func(tx *gorm.DB) error {
426+
if err := tx.AutoMigrate(&model.McpServer{}); err != nil {
427+
return err
428+
}
429+
if err := tx.Model(&model.McpServer{}).Where("1=1").Update("output_transport", "sse").Error; err != nil {
430+
return err
431+
}
432+
return nil
433+
},
434+
}

‎agent/utils/docker/docker.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,3 +353,15 @@ func logProcess(progress map[string]interface{}, task *task.Task) {
353353
}
354354
_ = setLog(id, progressStr, task)
355355
}
356+
357+
func PullImage(imageName string) error {
358+
cli, err := NewDockerClient()
359+
if err != nil {
360+
return err
361+
}
362+
defer cli.Close()
363+
if _, err := cli.ImagePull(context.Background(), imageName, image.PullOptions{}); err != nil {
364+
return err
365+
}
366+
return nil
367+
}

‎frontend/src/api/interface/ai.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ export namespace AI {
137137
hostIP: string;
138138
protocol: string;
139139
url: string;
140+
outputTransport: string;
141+
streamableHttpPath: string;
140142
}
141143

142144
export interface McpServerSearch extends ReqPage {

‎frontend/src/lang/modules/en.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,9 @@ const message = {
706706
importMcpJsonError: 'mcpServers structure is incorrect',
707707
bindDomainHelper:
708708
'After binding the website, it will modify the access address of all installed MCP Servers and close external access to the ports',
709+
outputTransport: 'Output Type',
710+
streamableHttpPath: 'Streaming Path',
711+
streamableHttpPathHelper: 'For example: /mcp, note that it should not overlap with other Servers',
709712
},
710713
},
711714
container: {

‎frontend/src/lang/modules/ja.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,9 @@ const message = {
692692
importMcpJsonError: 'mcpServers 構造が正しくありません',
693693
bindDomainHelper:
694694
'ウェブサイトをバインドした後、インストールされたすべての MCP サーバーのアクセスアドレスを変更し、ポートへの外部アクセスを閉じます',
695+
outputTransport: '出力タイプ',
696+
streamableHttpPath: 'ストリーミングパス',
697+
streamableHttpPathHelper: '例:/mcp、他のサーバーと重複しないように注意してください',
695698
},
696699
},
697700
container: {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /