{"record":{"id":"7c1b8d33153ede8f","repo":"nexu-io/open-design","slug":"unknown-mcp-tool-name","errorCode":null,"errorMessage":"unknown MCP tool: ${name}","messagePattern":"unknown MCP tool: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/daemon/src/mcp-live-artifacts-server.ts","lineNumber":201,"sourceCode":"        ...(typeof args.templateHtml === 'string' ? { templateHtml: args.templateHtml } : {}),\n        ...(args.provenanceJson && typeof args.provenanceJson === 'object' && !Array.isArray(args.provenanceJson) ? { provenanceJson: args.provenanceJson } : {}),\n      }),\n    });\n  }\n  if (name === 'live_artifacts_refresh') {\n    return await requestJson('/api/tools/live-artifacts/refresh', { method: 'POST', body: JSON.stringify({ artifactId: args.artifactId }) });\n  }\n  if (name === 'connectors_list') {\n    const useCase = args.useCase === 'personal_daily_digest' ? '?useCase=personal_daily_digest' : '';\n    return await requestJson(`/api/tools/connectors/list${useCase}`, { method: 'GET' });\n  }\n  if (name === 'connectors_execute') {\n    return await requestJson('/api/tools/connectors/execute', {\n      method: 'POST',\n      body: JSON.stringify({ connectorId: args.connectorId, toolName: args.toolName, input: args.input ?? {} }),\n    });\n  }\n  throw new Error(`unknown MCP tool: ${name}`);\n}\n\nexport async function handleLiveArtifactsMcpRequest(request: JsonRpcRequest): Promise<JsonObject | undefined> {\n  const id = request.id ?? null;\n  const method = request.method;\n\n  if (method === 'notifications/initialized') return undefined;\n\n  try {\n    if (method === 'initialize') {\n      return {\n        jsonrpc: '2.0',\n        id,\n        result: {\n          protocolVersion: '2025-03-26',\n          capabilities: { tools: {} },\n          serverInfo: { name: 'open-design-live-artifacts', version: '0.1.0' },\n        },","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/nexu-io/open-design/blob/5be4028344c2eb4c667c5a97bda8f750c5597ef7/apps/daemon/src/mcp-live-artifacts-server.ts#L183-L219","documentation":"The live-artifacts MCP server's callTool dispatcher recognizes exactly six tool names: live_artifacts_create, live_artifacts_list, live_artifacts_update, live_artifacts_refresh, connectors_list, connectors_execute. Any other name falls through to the final throw.","triggerScenarios":"Invoking a tool name that does not exist on this server; a typo; calling a tool advertised by a different MCP server against this one; version skew where a tool was renamed.","commonSituations":"A client lists tools from server A and invokes against server B; a hardcoded tool name from an older release.","solutions":["Use one of the six recognized tool names.","Call tools/list on this server first and invoke only names it advertises.","Check the spelling and the current name."],"exampleFix":"// before\ncallTool('live_artifact_create', { input }) // singular -> throws [368]\n\n// after\ncallTool('live_artifacts_create', { input })","handlingStrategy":"validation","validationCode":"const KNOWN = new Set([\n  'live_artifacts_create',\n  'live_artifacts_list',\n  'live_artifacts_update',\n  'live_artifacts_refresh',\n  'connectors_list',\n  'connectors_execute',\n]);\nif (!KNOWN.has(name)) throw new Error(`unknown MCP tool: ${name}`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always enumerate tools/list on the target server before invoking.","Do not hardcode tool names across releases.","Invoke against the same server that advertised the tool."],"tags":["mcp","dispatch","routing"],"backgroundTag":null,"analyzedSha":"5be4028344c2eb4c667c5a97bda8f750c5597ef7","analyzedAt":"2026-08-12T12:03:58.812Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}