{"record":{"id":"fc1c18fb7b9e34ae","repo":"BerriAI/litellm","slug":"description-is-required-for-tool-name","errorCode":null,"errorMessage":"description is required for tool {name}","messagePattern":"description is required for tool (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/proxy/_experimental/mcp_server/tool_registry.py","lineNumber":132,"sourceCode":"\n            if not all([name, description, handler_name]):\n                continue\n\n            # Try to resolve the handler\n            # First check if it's a module path (e.g., \"module.submodule.function\")\n            if handler_name is None:\n                raise ValueError(f\"handler is required for tool {name}\")\n            handler = get_instance_fn(handler_name, config_file_path)\n\n            if handler is None:\n                verbose_logger.warning(\"Warning: Could not find handler %s for tool %s\", handler_name, name)\n                continue\n\n            # Register the tool\n            if name is None:\n                raise ValueError(f\"name is required for tool {name}\")\n            if description is None:\n                raise ValueError(f\"description is required for tool {name}\")\n\n            self.register_tool(\n                name=name,\n                description=description,\n                input_schema=input_schema,\n                handler=handler,\n            )\n        verbose_logger.debug(\"all registered tools: %s\", json.dumps(self.tools, indent=4, default=str))\n\n\nglobal_mcp_tool_registry: Final = MCPToolRegistry()\n","sourceCodeStart":114,"sourceCodeEnd":144,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/_experimental/mcp_server/tool_registry.py#L114-L144","documentation":"Raised while loading MCP tools from config.yaml when a tool entry has a name and handler but no description (or an empty one). Every registered tool needs a description for the MCP tool listing exposed to clients, so the offending entry is rejected instead of being registered silently. It sits next to the analogous 'handler is required' check on the same all([...]) guard.","triggerScenarios":"Thrown at litellm/proxy/_experimental/mcp_server/tool_registry.py:132 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a 'description' field to the tool entry in mcp_tools config."],"exampleFix":"mcp_tools: [{name: 'my_tool', description: '...', ...}]","handlingStrategy":"validation","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-14T00:17:10.932Z"}