refactor(mcp): consolidate MCP implementation into internal package
Build and Deploy / build-and-push (push) Successful in 54s
Build and Deploy / build-and-push (push) Successful in 54s
- Move MCP tools registration to internal/mcp - cmd/mcp now only contains CLI entry logic - Support env vars TASKPOOL_URL/TASKPOOL_TOKEN for stdio mode - Remove duplicate client.go from cmd/mcp
This commit is contained in:
+27
-8
@@ -7,6 +7,7 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@@ -21,18 +22,36 @@ var (
|
||||
openAPIClientOnce sync.Once
|
||||
)
|
||||
|
||||
// GetOpenAPIClient 获取内部 OpenAPI 客户端(单例)
|
||||
// 使用当前服务器的地址和系统设置中的 OpenAPI Token
|
||||
// GetOpenAPIClient 获取 OpenAPI 客户端(单例)
|
||||
// 优先使用环境变量 TASKPOOL_URL 和 TASKPOOL_TOKEN
|
||||
// 否则使用本地服务器地址和系统设置中的 OpenAPI Token
|
||||
func GetOpenAPIClient() *Client {
|
||||
openAPIClientOnce.Do(func() {
|
||||
cfg := services.GetConfig()
|
||||
baseURL := fmt.Sprintf("http://127.0.0.1:%d", cfg.Server.Port)
|
||||
if cfg.Server.URLPrefix != "" {
|
||||
baseURL += cfg.Server.URLPrefix
|
||||
// 优先从环境变量读取(支持 stdio 模式连接远程服务器)
|
||||
envURL := strings.TrimSpace(os.Getenv("TASKPOOL_URL"))
|
||||
envToken := strings.TrimSpace(os.Getenv("TASKPOOL_TOKEN"))
|
||||
if envURL == "" {
|
||||
envURL = strings.TrimSpace(os.Getenv("BAIHU_URL"))
|
||||
}
|
||||
if envToken == "" {
|
||||
envToken = strings.TrimSpace(os.Getenv("BAIHU_TOKEN"))
|
||||
}
|
||||
|
||||
settingsSvc := services.NewSettingsService()
|
||||
token := getOpenAPIToken(settingsSvc)
|
||||
var baseURL, token string
|
||||
if envURL != "" && envToken != "" {
|
||||
// 使用环境变量配置
|
||||
baseURL = envURL
|
||||
token = envToken
|
||||
} else {
|
||||
// 使用本地服务器配置
|
||||
cfg := services.GetConfig()
|
||||
baseURL = fmt.Sprintf("http://127.0.0.1:%d", cfg.Server.Port)
|
||||
if cfg.Server.URLPrefix != "" {
|
||||
baseURL += cfg.Server.URLPrefix
|
||||
}
|
||||
settingsSvc := services.NewSettingsService()
|
||||
token = getOpenAPIToken(settingsSvc)
|
||||
}
|
||||
|
||||
openAPIClient = NewClient(baseURL, token)
|
||||
})
|
||||
|
||||
+22
-3
@@ -19,9 +19,10 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
mcpServer *server.MCPServer
|
||||
mcpHTTPServer *server.StreamableHTTPServer
|
||||
once sync.Once
|
||||
mcpServer *server.MCPServer
|
||||
mcpHTTPServer *server.StreamableHTTPServer
|
||||
externalClient *Client // 外部客户端(用于 stdio 模式连接远程服务器)
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
// GetServer 获取 MCP Server 实例(单例)
|
||||
@@ -42,6 +43,19 @@ func GetServer() *server.MCPServer {
|
||||
return mcpServer
|
||||
}
|
||||
|
||||
// SetExternalClient 设置外部 OpenAPI 客户端(用于 stdio 模式)
|
||||
func SetExternalClient(c *Client) {
|
||||
externalClient = c
|
||||
}
|
||||
|
||||
// getClient 获取当前使用的客户端
|
||||
func getClient() *Client {
|
||||
if externalClient != nil {
|
||||
return externalClient
|
||||
}
|
||||
return GetOpenAPIClient()
|
||||
}
|
||||
|
||||
// GetHTTPHandler 获取 MCP HTTP Handler(用于集成到 Gin)
|
||||
func GetHTTPHandler() http.Handler {
|
||||
s := GetServer()
|
||||
@@ -53,6 +67,11 @@ func GetHTTPHandler() http.Handler {
|
||||
return mcpHTTPServer
|
||||
}
|
||||
|
||||
// ServeStdio 启动 stdio 模式的 MCP Server
|
||||
func ServeStdio(s *server.MCPServer) error {
|
||||
return server.ServeStdio(s)
|
||||
}
|
||||
|
||||
const instructions = `你是 TaskPool(任务池)运维助手。通过 MCP tools 管理任务调度面板。
|
||||
|
||||
核心能力:
|
||||
|
||||
Reference in New Issue
Block a user