v1.96.0rc1 - MCP Entitlements, Redis Config Sync & Auto-Router Context
Deploy this version​
- Docker
- Pip
docker run \
-e STORE_MODEL_IN_DB=True \
-p 4000:4000 \
docker.litellm.ai/berriai/litellm:1.96.0-rc.1
pip install litellm==1.96.0rc1
Key Highlights​
v1.96.0rc1 is the current release candidate for 1.96.0.
- MCP entitlements reach the person, not just the key - an internal user's
object_permissionnow acts as an MCP entitlement level that intersects the key, team, agent, and org scopes, is read at bothtools/listandtools/calltime, is persisted by/user/newand/user/update, returned by/v2/user/info, and editable from the internal user page. - Guardrails can finally see MCP tool results - a new
post_mcp_callmode routes tool result text through the unifiedapply_guardrailseam, so a guardrail can mask values inside a result or reject it outright; previously a tool returning sensitive data bypassed every guardrail. - Config changes propagate to every pod immediately - management writes publish an invalidation event on coordination Redis and every pod resyncs on receipt, debounced with jitter and capped at one resync per 10s, replacing the 30s poll lag on models, credentials, and settings. Without Redis both sides no-op and polling behavior is unchanged.
- OpenAI cuts GPT-5.6 prices -
gpt-5.6-terradrops 20% andgpt-5.6-lunadrops 80%, mirrored onto Bedrock Mantle, plus new flex long-context (above 272K) rates across thegpt-5.6family and a correction to the advertisedgpt-5.4-miniandgpt-5.4-nanocontext windows. - The auto-router learns what it is actually routing - the complexity classifier now sees prior turns and assistant turns, rates what a short reply approves, closes its rubric on the window it was given, and records its tier decision, request body, and its own classifier calls in spend logs and the log drawer.
- Budgets become a first-class management surface - a generic
/management/v1list contract lands withGET /management/v1/budgetson top of it, and the budgets page gains sorting, filtering, and search. - Operational hardening for large deployments - opt-in
database_statement_timeoutanddatabase_lock_timeout, opt-inREPLICA IDENTITY FULLre-asserted after every migration, pod-hardening and migration-Job knobs on the componentized Helm chart, and an unreachable Redis that no longer blocks every request.
Breaking changes​
- Mock testing params are gated behind one config flag - six mock testing request params previously had three different behaviors, and a dropped param returned a normal success, so a fallback drill could pass without ever running. All six are now gated by a single config flag that is unset by default and rejects with a 400 naming the params and the key - PR #35423
- User budgets are no longer enforced on team keys - reverts PR #32005, which caused team keys to reject on the key owner's personal budget; team keys use team budgets only and the
skip_user_budget_on_team_keyopt-out flag is removed - PR #35271 - Keyless gateway OAuth admits session bearers at any MCP scope - session-bearer admission and RFC 9728
WWW-Authenticatechallenges now fire on per-server MCP URL paths, not only the aggregate/mcp/scope - PR #34856
New Models / Updated Models​
New Model Support (2 new models)​
| Provider | Model | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | Features |
|---|---|---|---|---|---|
| DashScope | dashscope/qwen3.7-max | 991.8K | $2.50 | $7.50 | Reasoning, function calling, tool choice, prompt caching, response schema |
| DashScope | dashscope/qwen3.7-plus | 991.8K | $0.40 (tiered) | $1.60 (tiered) | Reasoning, vision, function calling, tool choice, prompt caching, response schema |
dashscope/qwen3.7-plus is priced in two tiers: $0.40 / $1.60 per 1M up to 256K tokens, and $1.20 / $4.80 per 1M above 256K.
Beyond the new entries, this release applies OpenAI's price cut to the GPT-5.6 family: gpt-5.6-terra falls from $2.50 / $15.00 to $2.00 / $12.00 per 1M and gpt-5.6-luna from $1.00 / $6.00 to $0.20 / $1.20 per 1M, with the same reductions mirrored on bedrock_mantle/openai.gpt-5.6-terra and bedrock_mantle/openai.gpt-5.6-luna and applied consistently to the batch, flex, priority, and cache variants. Flex long-context rates above 272K tokens are added to gpt-5.6, gpt-5.6-sol, gpt-5.6-terra, and gpt-5.6-luna. The advertised context window on gpt-5.4-mini and gpt-5.4-nano is corrected from 1.05M to 272K on OpenAI, Azure, and Azure AI Foundry, and the Azure AI above-272K tiers are removed with it. Fireworks AI Kimi K2.5, K2.6, and K2.7 max output tokens drop from 262,144 to 32,768. No pricing entries were removed.
Features​
Bug Fixes​
- OpenAI
- Google Vertex AI
- Anthropic
- Split mixed stream chunks by payload kind - PR #35289
- Amazon Bedrock
- Cache
AssumeRolecredentials per attributed identity - PR #35467
- Cache
- Fireworks AI
- Correct Kimi K2.5, K2.6, and K2.7 max output token limits - PR #35174
LLM API Endpoints​
Features​
- General
- Request stream usage upstream by default and strip it from client streams - PR #35290
Bugs​
- Anthropic
/v1/messages - Responses API
- Map all documented in-stream error codes to real HTTP statuses - PR #35307
- Batches
- Encode the public model group on background-created output file ids - PR #35406
- Managed files
- Source the Vertex AI managed-file read bucket and credentials from per-model
litellm_params- PR #34847
- Source the Vertex AI managed-file read bucket and credentials from per-model
- Passthrough
- Decide Vertex
rawPredictpassthrough streaming from the request body - PR #34672
- Decide Vertex
- A2A
- Keep config-defined agents registered and accept the documented
agents:key - PR #35163
- Keep config-defined agents registered and accept the documented
Management Endpoints / UI​
Features​
- Management API
- Virtual Keys & CLI
- Models + Endpoints
- Dashboard
- Sorting, filtering, and search on the budgets page - PR #35309
- Deep-link the team and organization detail pages via
?team=and?org=query params, and link organization teams to their team detail pages - PR #35112, PR #35117, PR #35120 - Shareable log links via a
log_idquery param on the logs page - PR #34879 - Split failed requests into their own series on the cache dashboard - PR #34862
- Show which log rows are the auto-router's own classifier calls - PR #35304
Bugs​
- Teams & Users
- Stop serving a stale team model allowlist after
/team/update- PR #34266 - Align team member add with existing user provisioning rules - PR #35435
- Skip team model aliases that point at deleted deployments - PR #34993
- Show pass-through route selections and match team id substrings in team search - PR #35319
- Report API-registered callbacks from
GET /team/{team_id}/callback- PR #35512
- Stop serving a stale team model allowlist after
- Auth & SSO
- SCIM
- Stop provisioning nested group ids as internal users - PR #34997
- Model writes
- Config & credentials
- Policy engine
- Preserve config-defined policies across DB sync and expose them via the list APIs - PR #35263
- Dashboard
- Let the internal user and organization forms save sub-cent budgets - PR #35302
- Stop clamping the budgets Budget ID column at 15 characters - PR #35268
- Keep the session view open when selecting a log inside it - PR #35399
- Show public model names in usage breakdowns - PR #35107
- Land general login on the keys dashboard and send MCP consent to
/ui/connect- PR #35523 - Point the navbar and sidebar logos at the dashboard home route - PR #35041
- Size the Object Permissions card grid by container width - PR #35019
- Nest the
sourceobject in the Claude Code marketplace settings snippet - PR #35322
AI Integrations​
Logging​
- OpenTelemetry
- Make OTLP export work against Grafana Cloud - PR #35060
- Cap tool-definition attributes so they cannot evict
gen_ai.*from the LLM span - PR #34828 - Label retrieval and agent metrics correctly and emit
gen_ai.provider.name- PR #35151 - Record the GenAI duration metric on failed requests - PR #35152
- Add a Grafana dashboard for the OTel GenAI metrics to the cookbook - PR #35159
- Prometheus
- s3
- Support SSE-KMS encryption params on both S3 logging paths - PR #35291
- General
- Bind
litellm_metadataby reference infunction_setupso guardrail information reaches spend logs - PR #35292
- Bind
Guardrails​
- General
- Bedrock Guardrails
- Run the Bedrock guardrail on MCP tool calls in
during_mcp_callmode - PR #35149
- Run the Bedrock guardrail on MCP tool calls in
- Compresr / Headroom
- Stop compressing the turn the model must act on - PR #35294
Spend Tracking, Budgets and Rate Limiting​
- Budgets
- Rate limiting
- Cost tracking
MCP Gateway​
- Entitlements
- OAuth
- Servers & discovery
Performance / Loadbalancing / Reliability improvements​
- Config propagation
- Push config sync to pods via Redis pub/sub instead of waiting on the 30s poll - PR #35436
- Database
- Router & auto-router
- Give the ComplexityRouter LLM classifier prior-turn context - PR #35185
- Let the classifier see assistant turns and rate what a short reply approves - PR #35471
- Drop the tier-rubric override and close the rubric on the window it was given - PR #35504
- Record why the auto-router picked a tier, capture the classifier request body, and mark the auto-router's own classifier calls in spend logs - PR #35016, PR #35164, PR #35300
- Honor request-level
num_retriesover a deployment'slitellm_paramsvalue - PR #35483 - Serialize latency for non-chat responses in lowest-latency routing - PR #33290
- Connections & caching
- Rust core
- Make
litellm-corethe callablemessages()SDK and drop the ai-gateway handler - PR #35044
- Make
- Deployment & Helm
- Pod-hardening and migration-Job knobs on the componentized chart - PR #35489
- Render pod-level
securityContexton the migration Job - PR #35482 - Give the gateway and backend probes an explicit
timeoutSeconds- PR #35497 - Honor
USE_DDTRACEin the componentized gateway and backend deployments - PR #35490 - Bake prisma offline in the componentized migrations image - PR #35485
- Pin the bundled postgres and redis to the bitnamilegacy images - PR #34963
- Dependencies & maintenance
Documentation Updates​
- Require e2e proof on all three LLM endpoints when applicable in the PR template - PR #35280
- Require 15-25 word human-readable replies to AI PR review bots - PR #35266
PR roll-up by ownership area​
PRs by ownership area (total: 151)
- Other (CI / chore / tests / build / version bumps): 35
- Performance: 24
- Auth & Management: 20
- UI: 19
- Models & Providers: 11
- Logging: 9
- MCP: 9
- Spend / Budgets / Rate Limits: 9
- LLM API Endpoints: 8
- Guardrails: 5
- Docs: 2
End-to-End Testing​
We are investing heavily in end-to-end testing to cut regressions and make LiteLLM more stable release over release. Every version is exercised by a live suite that runs against a real deployed proxy and hits real provider endpoints, not mocks, so the behavior we validate is the behavior you get in production.
This window added 18 test-only PRs, 10 of them against the live e2e suite. New and repaired coverage lands on MCP tool polling across multi-worker lag, budget-reset timing polled to a deadline rather than a fixed sleep, the team-key budget hierarchy after the revert, and a throughput SLO derived per replica with locust's error breakdown surfaced. The coverage registry now excludes skipped tests from its numerator, so the reported number reflects what actually ran, and several suites are parked behind named Linear tickets (LIT-5027, LIT-5052, LIT-5054, LIT-5118, LIT-5119) rather than left flaking.
New Contributors​
- @ljogeiger made their first contribution in PR #34603
- @lihugang made their first contribution in PR #35258
Full Changelog​
https://github.com/BerriAI/litellm/compare/v1.95.0-rc.1...v1.96.0-rc.1