{"record":{"id":"63abd5f588c26deb","repo":"musistudio/claude-code-router","slug":"browser-chrome-login-import-requires-domains-or-an","errorCode":null,"errorMessage":"browser_chrome_login_import requires domains or an active http(s) tab.","messagePattern":"browser_chrome_login_import requires domains or an active http\\(s\\) tab\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/browser-automation-mcp.ts","lineNumber":1463,"sourceCode":"    windowId: builtInBrowserService.getAutomationWindowId()\n  };\n}\n\nfunction resolveChromeLoginImportDomains(args: Record<string, unknown>, fallbackTabId?: string): string[] {\n  const explicit = uniqueStrings([\n    ...readStringArray(args.domains),\n    ...(readString(args.domain) ? [readString(args.domain) as string] : [])\n  ].map(normalizeChromeLoginImportDomain).filter((domain): domain is string => Boolean(domain)));\n  if (explicit.length > 0) {\n    return explicit;\n  }\n\n  const state = builtInBrowserService.getAutomationState();\n  const tabId = readString(args.tabId) || fallbackTabId || state.activeTabId;\n  const tab = state.tabs.find((candidate) => candidate.id === tabId) || state.tabs.find((candidate) => candidate.id === state.activeTabId);\n  const domain = normalizeChromeLoginImportDomain(tab?.url);\n  if (!domain) {\n    throw new Error(\"browser_chrome_login_import requires domains or an active http(s) tab.\");\n  }\n  return [domain];\n}\n\nfunction normalizeChromeLoginImportDomain(value: unknown): string | undefined {\n  const raw = readString(value)?.toLowerCase();\n  if (!raw) {\n    return undefined;\n  }\n  try {\n    const url = new URL(raw.includes(\"://\") ? raw : `https://${raw}`);\n    return url.hostname.replace(/^\\*\\./, \"\").replace(/^\\./, \"\");\n  } catch {\n    const domain = raw.replace(/^\\*\\./, \"\").replace(/^\\./, \"\").split(\"/\")[0];\n    return domain && !domain.includes(\" \") ? domain : undefined;\n  }\n}\n","sourceCodeStart":1445,"sourceCodeEnd":1481,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/browser-automation-mcp.ts#L1445-L1481","documentation":"Thrown by the domain-resolution helper for browser_chrome_login_import when the caller supplies no domains argument and the fallback — deriving a domain from the specified tab or the active tab's URL — cannot yield an http(s) domain. The import needs at least one target domain, either explicit or inferred from a web page.","triggerScenarios":"Calling browser_chrome_login_import with neither args.domains nor args.tabId while the active tab is blank, on a chrome:// page, or has no http(s) URL (normalizeChromeLoginImportDomain returns undefined).","commonSituations":"Running the import right after opening the browser with no page loaded; the active tab is the default new-tab page; passing domains in the wrong shape so they read as empty.","solutions":["Pass an explicit domains array, e.g. { domains: [\"example.com\"] }.","Or navigate a tab to the target site first so the active tab's URL yields a domain.","Ensure domains values are plain hostname strings (scheme/path stripped) as the helper expects."],"exampleFix":"// before\nawait call(\"browser_chrome_login_import\", {}); // active tab is about:blank\n\n// after\nawait call(\"browser_chrome_login_import\", { domains: [\"example.com\"] });","handlingStrategy":"validation","validationCode":"const domains = args.domains?.length ? args.domains : inferActiveHttpDomain(await call(\"browser_tab_list\", {}));\nif (!domains?.length) throw new Error(\"No domains available — navigate to the target site first\");\nawait call(\"browser_chrome_login_import\", { ...args, domains });","typeGuard":"function hasDomains(a: unknown): a is { domains: string[] } { return Array.isArray((a as any)?.domains) && (a as any).domains.length > 0; }","tryCatchPattern":"try { await call(\"browser_chrome_login_import\", args); } catch (e) { if (e instanceof Error && e.message.includes(\"requires domains or an active http(s) tab\")) { await call(\"browser_chrome_login_import\", { ...args, domains: [\"example.com\"] }); } else throw e; }","preventionTips":["Always pass explicit domains","Navigate to the target site before importing","Strip scheme/path from domain strings"],"tags":["mcp","browser-automation","missing-param","import"],"backgroundTag":"missing-required-parameter","analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}