{"record":{"id":"752bf4c08c1ee7d9","repo":"paperclipai/paperclip","slug":"tool-not-found","errorCode":"tool_not_found","errorMessage":"Tool \"${toolName}\" not found","messagePattern":"Tool \"(.+?)\" not found","errorType":"http","errorClass":"ToolGatewayHttpError","httpStatus":404,"severity":"error","filePath":"server/src/services/tool-gateway.ts","lineNumber":1916,"sourceCode":"        signedArguments,\n        previewMarkdown,\n        approvalId: formalApprovalId,\n        expiresAt,\n        updatedAt: new Date(),\n      })\n      .where(and(eq(toolActionRequests.id, actionRequest.id), eq(toolActionRequests.status, \"pending\")))\n      .returning({ id: toolActionRequests.id });\n    if (signedRows.length === 0) {\n      await db\n        .update(toolInvocations)\n        .set({\n          status: \"failed\",\n          approvalState: \"expired\",\n          errorCode: \"approval_request_superseded\",\n          errorMessage: \"The approval request was resolved before it could be signed\",\n          completedAt: new Date(),\n          updatedAt: new Date(),\n        })\n        .where(eq(toolInvocations.id, input.invocation.id));\n      throw new ToolGatewayHttpError(\n        409,\n        \"The approval request was resolved before it could be signed\",\n        \"approval_request_superseded\",\n        {\n          invocationId: input.invocation.id,\n          actionRequestId: actionRequest.id,\n          tool: input.tool.name,\n          instructions: \"A parallel call already handled this approval. Retry the same call now to reach the live approval request.\",\n        },\n      );\n    }\n\n    await db.insert(toolActionDeliveries).values({ companyId: input.session.companyId, actionRequestId: actionRequest.id, issueId: input.session.issueId, interactionId: interaction.id }).onConflictDoNothing();\n\n    await writeToolCallEvent({\n      invocationId: input.invocation.id,","sourceCodeStart":1898,"sourceCodeEnd":1934,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/services/tool-gateway.ts#L1898-L1934","documentation":"Catalog lookup miss: the requested tool name (static tool, connected MCP tool, or virtual on-demand tool) is not present for this company/session, so no descriptor can be resolved and the call is rejected before any policy evaluation. Usually caused by a disconnected app, a renamed upstream tool, or calling a virtual tool when no on-demand targets exist.","triggerScenarios":"Thrown at server/src/services/tool-gateway.ts:1865 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the tool name against the list of available tools for this session; it may be misspelled or the providing plugin/connection is down."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}