{"record":{"id":"5a2be6fc90ff4c1a","repo":"BerriAI/litellm","slug":"tool-tool-name-not-found","errorCode":null,"errorMessage":"Tool '{tool_name}' not found","messagePattern":"Tool '(.+?)' not found","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"litellm/proxy/management_endpoints/tool_management_endpoints.py","lineNumber":337,"sourceCode":")\nasync def get_tool_detail(\n    tool_name: str,\n    user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),\n):\n    \"\"\"\n    Get a single tool with its policy overrides (for UI detail view).\n    \"\"\"\n    from litellm.proxy.db.tool_registry_writer import get_tool as db_get_tool\n    from litellm.proxy.db.tool_registry_writer import list_overrides_for_tool\n    from litellm.proxy.proxy_server import prisma_client\n\n    if prisma_client is None:\n        raise HTTPException(status_code=500, detail=CommonProxyErrors.db_not_connected_error.value)\n\n    try:\n        tool: Final = await db_get_tool(prisma_client=prisma_client, tool_name=tool_name)\n        if tool is None:\n            raise HTTPException(status_code=404, detail=f\"Tool '{tool_name}' not found\")\n        overrides: Final = await list_overrides_for_tool(prisma_client=prisma_client, tool_name=tool_name)\n        return ToolDetailResponse(tool=tool, overrides=overrides)\n    except HTTPException:\n        raise\n    except Exception as e:\n        verbose_proxy_logger.exception(\"Error getting tool detail: %s\", e)\n        raise HTTPException(status_code=500, detail=str(e))\n\n\n_ParsedJson: TypeAlias = dict[str, object] | list[object] | str | int | float | bool | None\n_PARSED_JSON: Final[TypeAdapter[_ParsedJson]] = TypeAdapter(_ParsedJson)\n_STR_OBJECT_DICT: Final = TypeAdapter(dict[str, object])\n\n\ndef _input_snippet_for_tool_log(sl: \"_SpendLogRow | None\", max_len: int = 200) -> str | None:\n    \"\"\"Short snippet from messages or proxy_server_request for tool usage log row.\"\"\"\n    if sl is None:\n        return None","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/tool_management_endpoints.py#L319-L355","documentation":"Error \"Tool '{tool_name}' not found\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/tool_management_endpoints.py:337 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the tool name exists (list available tools) before querying its spend."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}