Phase 5 Batch 2: 4 RM Tool + rm 客户端 + 日志降级链
- internal/rm/client.go: YARN RM 客户端 - ListApps / GetApp / KillApp / GetLogs - GetLogs 降级链数据驱动 (amContainerLogs → aggregated-logs → logs) - 跨主机 redirect 保留 Authorization (URLAllowlist 兜底) - 4 Tool: list_applications / get_application_status / get_application_logs / kill_application - mcp.WithEnum(state) 约束 YARN app 状态 - tool handler 永远 (result, nil), 业务错误用 NewToolResultError - deps.go: +HTTPClient + MaxResponseBytes - main.go: 注入 httpclient.Client - 端到端实测: mock RM 验证 4 Tool + 降级链 + 错误路径 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package mcp
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
|
||||
"spark-mcp-go/internal/mcp/tools"
|
||||
)
|
||||
|
||||
// NewServer builds the MCP server with all configured Tools.
|
||||
func NewServer(deps *tools.Deps) *server.MCPServer {
|
||||
s := server.NewMCPServer("spark-mcp-go", "0.0.0",
|
||||
server.WithToolCapabilities(false),
|
||||
server.WithRecovery(),
|
||||
server.WithLogging(),
|
||||
)
|
||||
s.AddTool(tools.NewListClustersTool(), deps.ListClustersHandler)
|
||||
s.AddTool(tools.NewSparkSubmitTool(), deps.SparkSubmitHandler)
|
||||
s.AddTool(tools.NewListApplicationsTool(), deps.ListApplicationsHandler)
|
||||
s.AddTool(tools.NewGetApplicationStatusTool(), deps.GetApplicationStatusHandler)
|
||||
s.AddTool(tools.NewGetApplicationLogsTool(), deps.GetApplicationLogsHandler)
|
||||
s.AddTool(tools.NewKillApplicationTool(), deps.KillApplicationHandler)
|
||||
s.AddTool(tools.NewFetchURLTool(), deps.FetchURLHandler)
|
||||
s.AddTool(tools.NewUploadFileTool(), deps.UploadFileHandler)
|
||||
s.AddTool(tools.NewFetchSparkMetricsTool(), deps.FetchSparkMetricsHandler)
|
||||
s.AddTool(tools.NewFetchClusterEnvTool(), deps.FetchClusterEnvHandler)
|
||||
s.AddTool(tools.NewAnalyzeSparkLogTool(), deps.AnalyzeSparkLogHandler)
|
||||
return s
|
||||
}
|
||||
|
||||
// Handler exposes the MCP server as an http.Handler for main.go to mount.
|
||||
func Handler(deps *tools.Deps) (http.Handler, error) {
|
||||
s := NewServer(deps)
|
||||
return server.NewStreamableHTTPServer(s), nil
|
||||
}
|
||||
Reference in New Issue
Block a user