{"record":{"id":"a393afcead36d287","repo":"BerriAI/litellm","slug":"submission-is-missing-required-fields-missing","errorCode":null,"errorMessage":"Submission is missing required fields: {missing}. Configure required fields via general_settings.mcp_required_fields.","messagePattern":"Submission is missing required fields: (.+?)\\. Configure required fields via general_settings\\.mcp_required_fields\\.","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/management_endpoints/mcp_management_endpoints.py","lineNumber":312,"sourceCode":"\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\n            if field_name == \"auth_type\" and value == _AUTH_TYPE_SENTINEL:\n                return False\n            return True\n\n        missing: Final = [f for f in required_fields if not _field_present(f)]\n        if missing:\n            raise HTTPException(\n                status_code=status.HTTP_400_BAD_REQUEST,\n                detail={\n                    \"error\": f\"Submission is missing required fields: {missing}. \"\n                    \"Configure required fields via general_settings.mcp_required_fields.\"\n                },\n            )\n\n    def _is_public_registry_enabled() -> bool:\n        from litellm.proxy.proxy_server import (\n            general_settings as proxy_general_settings,\n        )\n\n        return bool(proxy_general_settings.get(\"enable_mcp_registry\"))\n\n    def _build_registry_remote_url(base_url: str, path: str) -> str:\n        normalized_base: Final = base_url.rstrip(\"/\")\n        normalized_path: Final = path if path.startswith(\"/\") else f\"/{path}\"\n        return f\"{normalized_base}{normalized_path}\"","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/mcp_management_endpoints.py#L294-L330","documentation":"Generic guard in _validate_mcp_required_fields: the submitted MCP server payload omits one or more fields listed in general_settings.mcp_required_fields. The check mirrors the UI's FIELD_GROUPS compliance rules, so None, empty string, empty list, and auth_type equal to the 'none' sentinel all count as absent — a payload that superficially looks populated can still fail.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/mcp_management_endpoints.py:312 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include all required fields listed in the error in your submission.","Ask the proxy admin to review general_settings.mcp_required_fields if the requirements are wrong."],"exampleFix":null,"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-14T05:17:10.506Z"}