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

  1. Set enabled: true on that server in tools.mcp.servers and reload config (/reload or restart)
  2. If the server should stay off, stop listing its tools — remove it from automation/scripts that assume it is on
  3. 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

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


AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15). Data as JSON: /api/errors/5f9d7bdf744d1ee7. Report an issue: GitHub.