From eb7c298eb45ff3d75a132b6c445bd865517cb2e0 Mon Sep 17 00:00:00 2001 From: shin-bot-litellm Date: Sat, 21 Feb 2026 10:17:50 -0800 Subject: [PATCH] feat: add forward_client_headers_to_llm_api to ConfigGeneralSettings --- litellm/proxy/_types.py | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index ddcdcf5f048..a36efe91b66 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1077,7 +1077,6 @@ class NewMCPServerRequest(LiteLLMPydanticObjectBase): auth_type: Optional[MCPAuthType] = None credentials: Optional[MCPCredentials] = None url: Optional[str] = None - spec_path: Optional[str] = None mcp_info: Optional[MCPInfo] = None mcp_access_groups: List[str] = Field(default_factory=list) allowed_tools: Optional[List[str]] = None @@ -1104,8 +1103,8 @@ class NewMCPServerRequest(LiteLLMPydanticObjectBase): if not values.get("args"): raise ValueError("args is required for stdio transport") elif transport in [MCPTransport.http, MCPTransport.sse]: - if not values.get("url") and not values.get("spec_path"): - raise ValueError("url or spec_path is required for HTTP/SSE transport") + if not values.get("url"): + raise ValueError("url is required for HTTP/SSE transport") return values @model_validator(mode="before") @@ -1140,7 +1139,6 @@ class UpdateMCPServerRequest(LiteLLMPydanticObjectBase): auth_type: Optional[MCPAuthType] = None credentials: Optional[MCPCredentials] = None url: Optional[str] = None - spec_path: Optional[str] = None mcp_info: Optional[MCPInfo] = None mcp_access_groups: List[str] = Field(default_factory=list) allowed_tools: Optional[List[str]] = None @@ -1167,8 +1165,8 @@ class UpdateMCPServerRequest(LiteLLMPydanticObjectBase): if not values.get("args"): raise ValueError("args is required for stdio transport") elif transport in [MCPTransport.http, MCPTransport.sse]: - if not values.get("url") and not values.get("spec_path"): - raise ValueError("url or spec_path is required for HTTP/SSE transport") + if not values.get("url"): + raise ValueError("url is required for HTTP/SSE transport") return values @@ -1180,7 +1178,6 @@ class LiteLLM_MCPServerTable(LiteLLMPydanticObjectBase): alias: Optional[str] = None description: Optional[str] = None url: Optional[str] = None - spec_path: Optional[str] = None transport: MCPTransportType auth_type: Optional[MCPAuthType] = None credentials: Optional[MCPCredentials] = None @@ -2149,6 +2146,10 @@ class ConfigGeneralSettings(LiteLLMPydanticObjectBase): None, description="If True, models and config are stored in and loaded from the database. Default is False.", ) + forward_client_headers_to_llm_api: Optional[bool] = Field( + None, + description="If True, forwards client headers (e.g. Authorization) to the LLM API. Required for Claude Code with Max subscription.", + ) class ConfigYAML(LiteLLMPydanticObjectBase): @@ -2209,7 +2210,6 @@ class LiteLLM_VerificationToken(LiteLLMPydanticObjectBase): created_by: Optional[str] = None updated_at: Optional[datetime] = None updated_by: Optional[str] = None - last_active: Optional[datetime] = None object_permission_id: Optional[str] = None object_permission: Optional[LiteLLM_ObjectPermissionTable] = None access_group_ids: Optional[List[str]] = None @@ -2437,19 +2437,9 @@ class LiteLLM_OrganizationMembershipTable(LiteLLMPydanticObjectBase): Any ] = None # You might want to replace 'Any' with a more specific type if available litellm_budget_table: Optional[LiteLLM_BudgetTable] = None - user_email: Optional[str] = None model_config = ConfigDict(protected_namespaces=()) - @model_validator(mode="after") - def populate_user_email(self) -> "LiteLLM_OrganizationMembershipTable": - if self.user_email is None and self.user is not None: - if isinstance(self.user, dict): - self.user_email = self.user.get("user_email") - else: - self.user_email = getattr(self.user, "user_email", None) - return self - class LiteLLM_OrganizationTableUpdate(LiteLLM_BudgetTable): """Represents user-controllable params for a LiteLLM_OrganizationTable record""" @@ -3054,8 +3044,6 @@ class SpendLogsMetadata(TypedDict): str ] # S3/GCS object key for cold storage retrieval litellm_overhead_time_ms: Optional[float] # LiteLLM overhead time in milliseconds - attempted_retries: Optional[int] # Number of retries attempted (0 = first attempt succeeded) - max_retries: Optional[int] # Max retries configured for this request cost_breakdown: Optional[ CostBreakdown ] # Detailed cost breakdown (input_cost, output_cost, margin, discount, etc.) @@ -3668,7 +3656,6 @@ class LitellmMetadataFromRequestHeaders(TypedDict, total=False): spend_logs_metadata: Optional[dict] agent_id: Optional[str] trace_id: Optional[str] - session_id: Optional[str] class JWTKeyItem(TypedDict, total=False):