{"record":{"id":"a22f43ea2b623657","repo":"musistudio/claude-code-router","slug":"mcp-server-must-be-saved-before-tool-discovery","errorCode":null,"errorMessage":"MCP server must be saved before tool discovery.","messagePattern":"MCP server must be saved before tool discovery\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/web/management-server.ts","lineNumber":355,"sourceCode":"  getProxyCertificateStatus: () => proxyService.getCertificateStatus(),\n  getProxyNetworkCaptures: () => proxyService.getNetworkCaptures(),\n  getProxyStatus: () => proxyService.getStatus(),\n  getRequestLogDetail: (request) => getRequestLogDetail(request as RequestLogDetailRequest),\n  getRequestLogBodyChunk: (request) => getRequestLogBodyChunk(request as RequestLogBodyChunkRequest),\n  getRequestLogs: (filter) => getRequestLogs(filter as RequestLogListFilter | undefined),\n  getUpdateStatus: () => unsupportedUpdateStatus,\n  getUsageStats: (range, filter) => getUsageStats(range as UsageStatsRange | undefined, filter as UsageStatsFilter | undefined),\n  importLocalAgentProvider: (request) => importLocalAgentProvider(request as LocalAgentProviderImportRequest),\n  installProxyCertificate: () => proxyService.installCertificate(),\n  listMcpServerTools: async (serverName) => {\n    const name = typeof serverName === \"string\" ? serverName.trim() : \"\";\n    if (!name) {\n      throw new Error(\"MCP server name is required.\");\n    }\n    const config = await loadAppConfig();\n    const server = config.agent.mcpServers.find((candidate) => candidate.name === name);\n    if (!server) {\n      throw new Error(\"MCP server must be saved before tool discovery.\");\n    }\n    return listMcpServerTools(server);\n  },\n  openBotGatewayQrWindow: async (request) => {\n    const qrRequest = request as BotGatewayQrWindowOpenRequest;\n    await openSystemExternal(qrRequest.url);\n    return {\n      message: \"Opened the QR login URL in your default browser.\",\n      observed: false,\n      opened: true\n    };\n  },\n  openBuiltInBrowser: async (url) => {\n    const targetUrl = readString(url);\n    if (targetUrl) {\n      await openSystemExternal(targetUrl);\n      return;\n    }","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/core/src/web/management-server.ts#L337-L373","documentation":"Error \"MCP server must be saved before tool discovery.\" thrown in musistudio/claude-code-router.","triggerScenarios":"Thrown at packages/core/src/web/management-server.ts:355 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"}