{"record":{"id":"71e6047e686d4482","repo":"BerriAI/litellm","slug":"mcp-required-fields-contains-unknown-field-names","errorCode":null,"errorMessage":"mcp_required_fields contains unknown field names: {unknown}. Check general_settings.mcp_required_fields in your proxy config.","messagePattern":"mcp_required_fields contains unknown field names: (.+?)\\. Check general_settings\\.mcp_required_fields in your proxy config\\.","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"litellm/proxy/management_endpoints/mcp_management_endpoints.py","lineNumber":287,"sourceCode":"        payload.oauth2_flow = \"client_credentials\" if has_m2m_shape else \"authorization_code\"\n\n    _VALID_MCP_REQUIRED_FIELDS: Final[frozenset] = frozenset(NewMCPServerRequest.model_fields)\n\n    def _validate_mcp_required_fields(payload: NewMCPServerRequest) -> None:\n        \"\"\"Validate submission payload against admin-configured mcp_required_fields.\"\"\"\n        from litellm.proxy.proxy_server import (\n            general_settings as proxy_general_settings,\n        )\n\n        required_fields: Final[list[str] | None] = proxy_general_settings.get(\"mcp_required_fields\")\n        if not required_fields:\n            return\n\n        # Fail fast on unknown field names — a typo in the config would silently\n        # block every submission with a confusing \"missing fields\" error.\n        unknown: Final = [f for f in required_fields if f not in _VALID_MCP_REQUIRED_FIELDS]\n        if unknown:\n            raise HTTPException(\n                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,\n                detail={\n                    \"error\": f\"mcp_required_fields contains unknown field names: {unknown}. \"\n                    \"Check general_settings.mcp_required_fields in your proxy config.\"\n                },\n            )\n\n        # Mirror the UI's compliance checks (MCPStandardsSettings.tsx FIELD_GROUPS):\n        # auth_type requires a real value — \"none\" is treated as absent.\n        _AUTH_TYPE_SENTINEL: Final = \"none\"\n\n        def _field_present(field_name: str) -> bool:\n            value: Final = getattr(payload, field_name, None)\n            if value is None:\n                return False\n            # Treat empty string and empty list as absent (mirrors UI compliance check)\n            if isinstance(value, (str, list)) and not value:\n                return False","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/mcp_management_endpoints.py#L269-L305","documentation":"Error \"mcp_required_fields contains unknown field names: {unknown}. Check general_settings.mcp_required_fields in your proxy config.\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/mcp_management_endpoints.py:287 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the unknown field names from general_settings.mcp_required_fields in the proxy config.","Check the documentation for the supported MCP required field names."],"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"}