* feat(schema.prisma): add object permissions for end users
allows controlling if end user can call specific mcp servers
* feat: cleanup for customer_endpoints support of object permission id
* fix: cleanup str
* feat(customers/): enforce end user can only call allowed mcps - if configured
* docs: document customer/end user object permission usage
* feat: enforce end user permissions on MCP tool calls
This commit implements end user permission enforcement for MCP servers:
1. Always add server prefixes to MCP tool names
- Removed conditional logic that only added prefixes when multiple servers existed
- Now always adds server prefix for consistent tool naming across all scenarios
- Updated 5 locations in server.py (list_tools, get_prompts, get_resources,
get_resource_templates, get_prompt)
2. Created MCP End User Permission Guardrail Hook
- New guardrail hook: litellm/proxy/guardrails/guardrail_hooks/mcp_end_user_permission.py
- Runs on post_call to validate tool calls in LLM responses
- Extracts MCP server name from tool names (splits on first '-')
- Checks if end_user_id has permissions for the MCP server
- Raises GuardrailRaisedException if end user lacks permission
- Supports both streaming and non-streaming responses
3. Added comprehensive tests
- Test file: tests/test_litellm/proxy/guardrails/guardrail_hooks/test_mcp_end_user_permission.py
- Tests cover: authorized/unauthorized tools, non-MCP tools, no end_user scenarios
- Tests permission checking logic and exception raising
The hook integrates with the existing MCPRequestHandler._get_allowed_mcp_servers_for_end_user
to fetch end user permissions and enforce access control at the response level.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactor: remove redundant add_prefix variable assignments
Simplified the code by removing intermediate `add_prefix` variable
assignments and passing `True` directly to function calls since
we now always add server prefixes.
Changes:
- Removed `add_prefix = True` variable assignments in 5 locations
- Changed `add_prefix=add_prefix` to `add_prefix=True` in function calls
- Added inline comments to clarify the behavior
This makes the code more concise and clearer in intent.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(auth_utils.py): support safety_identifier as a valid way of passing the end user id for responses api
* feat(llms): ensure 'tools' is correctly updated for responses api
* fix: fix greptile feedback
* feat: transformation.py
proper responses api tool handling for guardrail translation layer
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2.5 KiB
Request Headers
Special headers that are supported by LiteLLM.
Header Forwarding
By default, LiteLLM does not forward client headers to LLM provider APIs. However, you can selectively enable header forwarding for specific model groups. Learn more about configuring header forwarding.
LiteLLM Headers
x-litellm-timeout Optional[float]: The timeout for the request in seconds.
x-litellm-stream-timeout Optional[float]: The timeout for getting the first chunk of the response in seconds (only applies for streaming requests). Demo Video
x-litellm-enable-message-redaction: Optional[bool]: Don't log the message content to logging integrations. Just track spend. Learn More
x-litellm-tags: Optional[str]: A comma separated list (e.g. tag1,tag2,tag3) of tags to use for tag-based routing OR spend-tracking.
x-litellm-num-retries: Optional[int]: The number of retries for the request.
x-litellm-spend-logs-metadata: Optional[str]: JSON string containing custom metadata to include in spend logs. Example: {"user_id": "12345", "project_id": "proj_abc", "request_type": "chat_completion"}. Learn More
x-litellm-customer-id: Optional[str]: Standard header for passing a customer/end-user ID. Always checked without any configuration. Learn More
x-litellm-end-user-id: Optional[str]: Standard header for passing a customer/end-user ID. Always checked without any configuration. Learn More
Anthropic Headers
anthropic-version Optional[str]: The version of the Anthropic API to use.
anthropic-beta Optional[str]: The beta version of the Anthropic API to use.
- For /v1/messages endpoint, this will always be forward the header to the underlying model.
- For /chat/completions endpoint, this will only be forwarded if the model is configured in forward_client_headers_to_llm_api. Learn more
OpenAI Headers
openai-organization Optional[str]: The organization to use for the OpenAI API. (currently needs to be enabled via general_settings::forward_openai_org_id: true)
Custom Headers
Custom headers starting with x- can be forwarded to LLM provider APIs when the model is configured in forward_client_headers_to_llm_api. Learn more about header forwarding configuration.