mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-07 08:37:28 +08:00
feat: add MCP tool and web UI management
This commit is contained in:
@@ -326,10 +326,28 @@ type SandboxConfig struct {
|
||||
|
||||
type FilesystemConfig struct{}
|
||||
|
||||
type MCPServerConfig struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Transport string `json:"transport"`
|
||||
Command string `json:"command"`
|
||||
Args []string `json:"args,omitempty"`
|
||||
Env map[string]string `json:"env,omitempty"`
|
||||
WorkingDir string `json:"working_dir,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Package string `json:"package,omitempty"`
|
||||
}
|
||||
|
||||
type MCPToolsConfig struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
RequestTimeoutSec int `json:"request_timeout_sec"`
|
||||
Servers map[string]MCPServerConfig `json:"servers,omitempty"`
|
||||
}
|
||||
|
||||
type ToolsConfig struct {
|
||||
Web WebToolsConfig `json:"web"`
|
||||
Shell ShellConfig `json:"shell"`
|
||||
Filesystem FilesystemConfig `json:"filesystem"`
|
||||
MCP MCPToolsConfig `json:"mcp"`
|
||||
}
|
||||
|
||||
type LoggingConfig struct {
|
||||
@@ -540,6 +558,11 @@ func DefaultConfig() *Config {
|
||||
},
|
||||
},
|
||||
Filesystem: FilesystemConfig{},
|
||||
MCP: MCPToolsConfig{
|
||||
Enabled: false,
|
||||
RequestTimeoutSec: 20,
|
||||
Servers: map[string]MCPServerConfig{},
|
||||
},
|
||||
},
|
||||
Logging: LoggingConfig{
|
||||
Enabled: true,
|
||||
|
||||
@@ -165,6 +165,7 @@ func Validate(cfg *Config) []error {
|
||||
if cfg.Memory.RecentDays <= 0 {
|
||||
errs = append(errs, fmt.Errorf("memory.recent_days must be > 0"))
|
||||
}
|
||||
errs = append(errs, validateMCPTools(cfg)...)
|
||||
|
||||
if cfg.Channels.InboundMessageIDDedupeTTLSeconds <= 0 {
|
||||
errs = append(errs, fmt.Errorf("channels.inbound_message_id_dedupe_ttl_seconds must be > 0"))
|
||||
@@ -212,6 +213,40 @@ func Validate(cfg *Config) []error {
|
||||
return errs
|
||||
}
|
||||
|
||||
func validateMCPTools(cfg *Config) []error {
|
||||
var errs []error
|
||||
mcp := cfg.Tools.MCP
|
||||
if !mcp.Enabled {
|
||||
return errs
|
||||
}
|
||||
if mcp.RequestTimeoutSec <= 0 {
|
||||
errs = append(errs, fmt.Errorf("tools.mcp.request_timeout_sec must be > 0 when tools.mcp.enabled=true"))
|
||||
}
|
||||
for name, server := range mcp.Servers {
|
||||
if strings.TrimSpace(name) == "" {
|
||||
errs = append(errs, fmt.Errorf("tools.mcp.servers contains an empty server name"))
|
||||
continue
|
||||
}
|
||||
if !server.Enabled {
|
||||
continue
|
||||
}
|
||||
transport := strings.ToLower(strings.TrimSpace(server.Transport))
|
||||
if transport == "" {
|
||||
transport = "stdio"
|
||||
}
|
||||
if transport != "stdio" {
|
||||
errs = append(errs, fmt.Errorf("tools.mcp.servers.%s.transport must be 'stdio'", name))
|
||||
}
|
||||
if strings.TrimSpace(server.Command) == "" {
|
||||
errs = append(errs, fmt.Errorf("tools.mcp.servers.%s.command is required when enabled=true", name))
|
||||
}
|
||||
if wd := strings.TrimSpace(server.WorkingDir); wd != "" && !filepath.IsAbs(wd) {
|
||||
errs = append(errs, fmt.Errorf("tools.mcp.servers.%s.working_dir must be an absolute path", name))
|
||||
}
|
||||
}
|
||||
return errs
|
||||
}
|
||||
|
||||
func validateAgentRouter(cfg *Config) []error {
|
||||
router := cfg.Agents.Router
|
||||
var errs []error
|
||||
|
||||
Reference in New Issue
Block a user