{"record":{"id":"2b22507cf1585254","repo":"paperclipai/paperclip","slug":"tool-tool-not-found","errorCode":null,"errorMessage":"Tool \"${tool}\" not found","messagePattern":"Tool \"(.+?)\" not found","errorType":"http","errorClass":null,"httpStatus":404,"severity":"error","filePath":"server/src/routes/plugins.ts","lineNumber":1085,"sourceCode":"      } catch (err) {\n        if (err instanceof ToolGatewayHttpError) {\n          res.status(err.status).json({ error: err.message, reasonCode: err.reasonCode, ...err.details });\n          return;\n        }\n        const message = err instanceof Error ? err.message : String(err);\n        if (message.includes(\"not running\") || message.includes(\"worker\")) {\n          res.status(502).json({ error: message });\n        } else {\n          res.status(500).json({ error: message });\n        }\n      }\n      return;\n    }\n\n    // Verify the tool exists\n    const registeredTool = toolDeps.toolDispatcher.getTool(tool);\n    if (!registeredTool) {\n      res.status(404).json({ error: `Tool \"${tool}\" not found` });\n      return;\n    }\n\n    try {\n      const result = await toolDeps.toolDispatcher.executeTool(\n        tool,\n        parameters ?? {},\n        runContext,\n      );\n      res.json(result);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n\n      // Distinguish between \"worker not running\" (502) and other errors (500)\n      if (message.includes(\"not running\") || message.includes(\"worker\")) {\n        res.status(502).json({ error: message });\n      } else {\n        res.status(500).json({ error: message });","sourceCodeStart":1067,"sourceCodeEnd":1103,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/routes/plugins.ts#L1067-L1103","documentation":"404 from plugin tool invocation routes. Raised in pluginRoutes when the requested tool name is not registered in the tool dispatcher's tool set — the caller referenced a tool that no installed plugin exposes under that name.","triggerScenarios":"Thrown at server/src/routes/plugins.ts:1070 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the id in the request path or body refers to an existing record in this company; re-list the parent collection to get a valid id.","Check that the record was not deleted or archived, and that the request is scoped to the correct companyId."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}