sipeed/picoclaw · error
MCP server '%s' is configured but disabled
Error message
MCP server '%s' is configured but disabled
What it means
ListMCPTools resolved the server in cfg.Tools.MCP.Servers but the entry has enabled: false. A disabled server is never dialed, so its tools cannot be listed even though it is configured. The message deliberately uses the resolved (config-key) spelling of the name.
Source
Thrown at pkg/agent/agent_command.go:204
serverName = strings.TrimSpace(serverName)
if serverName == "" {
return nil, fmt.Errorf("server name is required")
}
resolvedName := ""
var serverCfg config.MCPServerConfig
for name, candidate := range cfg.Tools.MCP.Servers {
if strings.EqualFold(name, serverName) {
resolvedName = name
serverCfg = candidate
break
}
}
if resolvedName == "" {
return nil, fmt.Errorf("MCP server '%s' is not configured", serverName)
}
if !serverCfg.Enabled {
return nil, fmt.Errorf("MCP server '%s' is configured but disabled", resolvedName)
}
if !cfg.Tools.IsToolEnabled("mcp") {
return nil, fmt.Errorf("MCP integration is disabled")
}
if err := al.ensureMCPInitialized(ctx); err != nil {
logger.WarnCF("agent", "Failed to initialize MCP runtime for command",
map[string]any{
"server": resolvedName,
"error": err.Error(),
})
}
manager := al.mcp.getManager()
if manager == nil {
return nil, fmt.Errorf("MCP server '%s' is configured but not connected", resolvedName)
}
View on GitHub (pinned to 49183d7e8d)
Solutions
- Set enabled: true on that server in tools.mcp.servers and reload config (/reload or restart)
- If the server should stay off, stop listing its tools — remove it from automation/scripts that assume it is on
- Check for a second config layer overriding your edit
Example fix
# config: tools.mcp.servers.<name> # before enabled: false # after enabled: true
Defensive patterns
Strategy: validation
Validate before calling
if srv, ok := cfg.Tools.MCP.Servers[name]; ok && !srv.Enabled {
return fmt.Errorf("enable %s first (tools.mcp.servers.%s.enabled: true)", name, name)
} Type guard
func serverEnabled(cfg *config.Config, name string) bool {
srv, ok := cfg.Tools.MCP.Servers[name]
return ok && srv.Enabled
} Prevention
- Check the enabled flag before listing tools for a server
- Automate config linting: enabled:true servers must have complete connection settings
- Document which servers ship disabled by default
When it happens
Trigger: Listing tools for a server whose config entry sets enabled=false; a server disabled earlier via a toggle command or manual config edit; fresh config template where servers default to disabled.
Common situations: Temporarily disabling a flaky server and forgetting to re-enable; merging configs that flipped the flag; security policies shipping servers disabled by default.
Related errors
- command unavailable: config not loaded
- MCP server '%s' is not configured
- MCP integration is disabled
- ${label} must be a JSON object.
- ${label}.${key} must be a string.
AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15).
Data as JSON: /api/errors/5f9d7bdf744d1ee7.
Report an issue: GitHub.