{"record":{"id":"abe485e16a7a9479","repo":"BerriAI/litellm","slug":"tool-name-is-not-allowed-for-server-server-name","errorCode":null,"errorMessage":"Tool {name} is not allowed for server {server.name}. Contact proxy admin to allow this tool.","messagePattern":"Tool (.+?) is not allowed for server (.+?)\\. Contact proxy admin to allow this tool\\.","errorType":"http","errorClass":"HTTPException","httpStatus":403,"severity":"error","filePath":"litellm/proxy/_experimental/mcp_server/mcp_server_manager.py","lineNumber":4629,"sourceCode":"        \"\"\"\n        Run pre-call checks and guardrail hooks for an MCP tool call.\n\n        Authorization runs unconditionally; only the guardrail hooks, which are\n        dispatched through ``proxy_logging_obj``, depend on a logger being\n        present. An absent logger must never be able to turn an authorization\n        decision into a no-op.\n\n        ``litellm_logging_obj`` is the request's logger, and it is what lands a\n        ``pre_mcp_call`` evaluation (or a block) on the spend-log row the Guardrails\n        Monitor counts. It stays optional so callers that do no logging are unchanged.\n\n        Returns a dict that may contain:\n        - \"arguments\": hook-modified tool arguments (only if changed)\n        - \"extra_headers\": headers injected by pre_mcp_call guardrail hooks\n        \"\"\"\n        ## check if the tool is allowed or banned for the given server\n        if not self.check_allowed_or_banned_tools(name, server):\n            raise HTTPException(\n                status_code=403,\n                detail={\n                    \"error\": f\"Tool {name} is not allowed for server {server.name}. Contact proxy admin to allow this tool.\"\n                },\n            )\n\n        ## check tool-level permissions from object_permission\n        await self.check_tool_permission_for_key_team(\n            tool_name=name,\n            server=server,\n            user_api_key_auth=user_api_key_auth,\n        )\n\n        ## filter parameters based on allowed_params configuration\n        self.validate_allowed_params(\n            tool_name=name,\n            arguments=arguments,\n            server=server,","sourceCodeStart":4611,"sourceCodeEnd":4647,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py#L4611-L4647","documentation":"Raised in the pre-call checks for an MCP tool invocation when the tool name is not in the server's allow-list (allowed_tools config for that MCP server). This is a proxy-side authorization gate that fires before the tool call is forwarded; the end user cannot fix it themselves — the proxy admin must add the tool to the server's allowed list in config.","triggerScenarios":"Thrown at litellm/proxy/_experimental/mcp_server/mcp_server_manager.py:4629 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ask the proxy admin to allow this tool for the server."],"exampleFix":"Contact admin to update the tool allowlist.","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"}