sipeed/picoclaw · error

MCP integration is disabled

Error message

MCP integration is disabled

What it means

The requested MCP server is configured and enabled, but cfg.Tools.IsToolEnabled("mcp") is false: the MCP integration itself is globally disabled, so no MCP runtime exists and per-server tool listing is refused. This is a top-level kill switch checked after per-server validation.

Source

Thrown at pkg/agent/agent_command.go:207

			}

			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)
			}

			conn, ok := manager.GetServer(resolvedName)
			if !ok {
				return nil, fmt.Errorf("MCP server '%s' is configured but not connected", resolvedName)

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Enable the MCP tool gate in config (tools.mcp.enabled: true / include mcp in enabled tools) and reload
  2. Search config for where mcp is disabled: grep -n 'mcp' on the active config file
  3. After re-enabling, verify with /mcp list before listing tools

Example fix

# before
tools:
  mcp:
    enabled: false

# after
tools:
  mcp:
    enabled: true
Defensive patterns

Strategy: validation

Validate before calling

if !cfg.Tools.IsToolEnabled("mcp") {
    return fmt.Errorf("MCP is globally disabled; set tools.mcp.enabled=true")
}

Type guard

func mcpEnabled(cfg *config.Config) bool { return cfg.Tools.IsToolEnabled("mcp") }

Prevention

When it happens

Trigger: tools.mcp.enabled (or the equivalent tool gate) set to false in config, or MCP excluded from the enabled tools list; listing tools for any server in that state.

Common situations: User disabled MCP to troubleshoot or for air-gapped setups; deployment templates that turn off non-core tools; stale config after an upgrade that renamed the toggle.

Related errors


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