{"record":{"id":"5f9d7bdf744d1ee7","repo":"sipeed/picoclaw","slug":"mcp-server-s-is-configured-but-disabled","errorCode":null,"errorMessage":"MCP server '%s' is configured but disabled","messagePattern":"MCP server '(.+?)' is configured but disabled","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/agent/agent_command.go","lineNumber":204,"sourceCode":"\t\t\tserverName = strings.TrimSpace(serverName)\n\t\t\tif serverName == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"server name is required\")\n\t\t\t}\n\n\t\t\tresolvedName := \"\"\n\t\t\tvar serverCfg config.MCPServerConfig\n\t\t\tfor name, candidate := range cfg.Tools.MCP.Servers {\n\t\t\t\tif strings.EqualFold(name, serverName) {\n\t\t\t\t\tresolvedName = name\n\t\t\t\t\tserverCfg = candidate\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif resolvedName == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"MCP server '%s' is not configured\", serverName)\n\t\t\t}\n\t\t\tif !serverCfg.Enabled {\n\t\t\t\treturn nil, fmt.Errorf(\"MCP server '%s' is configured but disabled\", resolvedName)\n\t\t\t}\n\t\t\tif !cfg.Tools.IsToolEnabled(\"mcp\") {\n\t\t\t\treturn nil, fmt.Errorf(\"MCP integration is disabled\")\n\t\t\t}\n\n\t\t\tif err := al.ensureMCPInitialized(ctx); err != nil {\n\t\t\t\tlogger.WarnCF(\"agent\", \"Failed to initialize MCP runtime for command\",\n\t\t\t\t\tmap[string]any{\n\t\t\t\t\t\t\"server\": resolvedName,\n\t\t\t\t\t\t\"error\":  err.Error(),\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tmanager := al.mcp.getManager()\n\t\t\tif manager == nil {\n\t\t\t\treturn nil, fmt.Errorf(\"MCP server '%s' is configured but not connected\", resolvedName)\n\t\t\t}\n","sourceCodeStart":186,"sourceCodeEnd":222,"githubUrl":"https://github.com/sipeed/picoclaw/blob/49183d7e8daed0dba89ddbb6fcb60089401d9680/pkg/agent/agent_command.go#L186-L222","documentation":"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.","triggerScenarios":"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.","commonSituations":"Temporarily disabling a flaky server and forgetting to re-enable; merging configs that flipped the flag; security policies shipping servers disabled by default.","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"],"exampleFix":"# config: tools.mcp.servers.<name>\n# before\nenabled: false\n\n# after\nenabled: true","handlingStrategy":"validation","validationCode":"if srv, ok := cfg.Tools.MCP.Servers[name]; ok && !srv.Enabled {\n    return fmt.Errorf(\"enable %s first (tools.mcp.servers.%s.enabled: true)\", name, name)\n}","typeGuard":"func serverEnabled(cfg *config.Config, name string) bool {\n    srv, ok := cfg.Tools.MCP.Servers[name]\n    return ok && srv.Enabled\n}","tryCatchPattern":null,"preventionTips":["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"],"tags":["mcp","configuration","disabled-flag"],"backgroundTag":null,"analyzedSha":"49183d7e8daed0dba89ddbb6fcb60089401d9680","analyzedAt":"2026-08-15T21:55:41.315Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}