{"record":{"id":"0b6dd7060f3f4b76","repo":"musistudio/claude-code-router","slug":"plugin-id-is-required-0b6dd7","errorCode":null,"errorMessage":"Plugin id is required.","messagePattern":"Plugin id is required\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/ipc.ts","lineNumber":162,"sourceCode":"  if (!server) {\n    throw new Error(\"MCP server must be saved before tool discovery.\");\n  }\n  return listMcpServerTools(server);\n});\nipcMain.handle(IPC_CHANNELS.appStartChromeLoginImport, async (_event, request: ChromeLoginImportRequest) => {\n  return await chromeLoginImportService.createJob(request);\n});\nipcMain.handle(IPC_CHANNELS.appGetChromeLoginImport, (_event, id: string) => {\n  return chromeLoginImportService.getJob(typeof id === \"string\" ? id : \"\");\n});\nipcMain.handle(IPC_CHANNELS.appOpenBuiltInBrowser, async (_event, url?: string) => {\n  const config = await loadAppConfig();\n  await builtInBrowserService.open(config, url);\n});\nipcMain.handle(IPC_CHANNELS.appOpenPluginApp, async (_event, pluginId: string, appId?: string) => {\n  const normalizedPluginId = readString(pluginId);\n  if (!normalizedPluginId) {\n    throw new Error(\"Plugin id is required.\");\n  }\n  await deepLinkService.openPluginApp(normalizedPluginId, readString(appId));\n});\nipcMain.handle(IPC_CHANNELS.appCloseTray, () => {\n  trayController.hidePopover();\n});\nipcMain.handle(IPC_CHANNELS.appDetectProviderIcon, (_event, request: ProviderIconDetectionRequest) => {\n  return detectProviderIcon(request);\n});\nipcMain.handle(IPC_CHANNELS.appClearProxyNetworkCaptures, () => proxyService.clearNetworkCaptures());\nipcMain.handle(IPC_CHANNELS.appSetProxyNetworkCaptureEnabled, (_event, enabled: boolean) => {\n  return proxyService.setNetworkCaptureEnabled(Boolean(enabled));\n});\nipcMain.handle(IPC_CHANNELS.appSelectPluginDirectory, async (event) => {\n  const window = BrowserWindow.fromWebContents(event.sender);\n  const options: OpenDialogOptions = {\n    buttonLabel: \"Select plugin\",\n    properties: [\"openDirectory\"],","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/ipc.ts#L144-L180","documentation":"Error \"Plugin id is required.\" thrown in musistudio/claude-code-router.","triggerScenarios":"Thrown at packages/electron/src/main/ipc.ts:162 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}