Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
d8beb7d
fix(proxy): point /metrics 401 at the opt-out flag
yuneng-berri May 9, 2026
7e0347c
Merge pull request #27505 from BerriAI/cherry-pick-metrics-optout-hin…
yuneng-berri May 9, 2026
a0b2811
fix(proxy): bound budget reservation per request instead of pinning t…
yuneng-berri May 9, 2026
b347015
fix(proxy): reserve per-image cost for image-generation requests
yuneng-berri May 9, 2026
d50c98d
fix(proxy): gate image-gen reservation strictly on model mode
yuneng-berri May 9, 2026
18c14d9
Merge pull request #27539 from BerriAI/litellm_/budget-reservation-rc…
yuneng-berri May 9, 2026
82c8cb8
build(packaging): relax core runtime pins to ranges
yuneng-berri May 9, 2026
5bb2803
Merge pull request #27545 from BerriAI/litellm_/charming-sammet-8d77c3
yuneng-berri May 9, 2026
a5cc4ff
build(packaging): raise jinja2 floor to 3.1.6
yuneng-berri May 9, 2026
188875b
Merge pull request #27554 from BerriAI/litellm_/charming-sammet-8d77c3
yuneng-berri May 10, 2026
38bc921
fix(mcp): forward extra_headers for OpenAPI MCP tools
milan-berri May 7, 2026
c31ead8
refactor(mcp): access has_client_credentials on MCPServer directly
milan-berri May 7, 2026
a1d1906
fix(mcp): static headers win over forwarded headers in OpenAPI MCP
cursoragent May 9, 2026
4046cb1
Merge pull request #27768 from milan-berri/litellm_cherry-pick-27383-…
yuneng-berri May 12, 2026
111ee52
fix(proxy): always merge caller-supplied tags into request metadata
yuneng-berri May 12, 2026
cd9d312
docs(proxy): refresh stale comments referencing removed tag strip
yuneng-berri May 12, 2026
74bb525
Merge pull request #27789 from BerriAI/litellm_/wizardly-sammet-94baac
yuneng-berri May 12, 2026
590bc83
chore: reject bare str at file-input sinks to prevent local-file read…
krrish-berri-2 May 12, 2026
037d4c5
Merge pull request #27794 from BerriAI/litellm_/fervent-archimedes-7e…
yuneng-berri May 13, 2026
2675b50
Strip SERVER_ROOT_PATH before lazy-feature prefix match
yuneng-berri May 13, 2026
c14cab9
Cache normalized SERVER_ROOT_PATH at middleware init
yuneng-berri May 13, 2026
069469c
chore(proxy): backport /key/regenerate ownership-rebind + premium-gat…
yuneng-berri May 13, 2026
8b90a54
Merge pull request #27818 from BerriAI/litellm_backport_27812_to_1840rc2
yuneng-berri May 13, 2026
2b189be
Merge pull request #27819 from BerriAI/litellm_backport_regenerate_gu…
yuneng-berri May 13, 2026
be37cf7
fix(proxy): expose db status on public /health/readiness
yuneng-berri May 13, 2026
be0526b
Merge pull request #27868 from BerriAI/backport-pr-27866-into-1.84.0rc2
yuneng-berri May 13, 2026
ab0267d
fix(ui): fetch version + debug flag from /health/readiness/details
yuneng-berri May 14, 2026
51ed234
fix(ui): disable retries on readiness/details + cover token forwarding
yuneng-berri May 14, 2026
305875f
Merge pull request #27899 from BerriAI/backport-pr-27896-into-1.84.0rc2
yuneng-berri May 14, 2026
02c5e1c
chore: update Next.js build artifacts (2026-05-14 03:52 UTC, node v20…
yuneng-berri May 14, 2026
50030e3
Merge pull request #27901 from BerriAI/yj_build_may13
yuneng-berri May 14, 2026
974f5cd
Merge pull request #27898 from stuxf/chore/banned-params-extra-body-c…
yuneng-berri May 14, 2026
3dd763d
Merge pull request #27801 from stuxf/chore/get-instance-fn-runtime-s3…
yuneng-berri May 14, 2026
08ea016
Merge pull request #27902 from BerriAI/litellm_/eager-euler-fd3639
yuneng-berri May 14, 2026
fdb55ab
fix: block client-side pricing injection via request body
krrish-berri-2 May 14, 2026
b2c93b1
fix: block SSRF fields in RAG ingest vector_store config
krrish-berri-2 May 14, 2026
d35d2a7
fix: harden /key/update authorization checks (#27878)
krrish-berri-2 May 14, 2026
087003e
Merge pull request #27903 from BerriAI/backport/27892-litellm_1.84.0rc2
yuneng-berri May 14, 2026
fe18665
Merge remote-tracking branch 'origin/litellm_1.84.0rc2' into backport…
yuneng-berri May 14, 2026
321d576
Merge pull request #27904 from BerriAI/backport/27878-litellm_1.84.0rc2
yuneng-berri May 14, 2026
0f741fc
bump: version 0.4.71 → 0.4.72
yuneng-berri May 14, 2026
fcd63b0
uv lock
yuneng-berri May 14, 2026
e1fc955
Merge pull request #27909 from BerriAI/backport/27908-litellm_1.84.0rc2
yuneng-berri May 14, 2026
d0cc1a4
feat(mcp): support OAuth passthrough discovery
gym-cmd May 15, 2026
0daeeab
fix(mcp): support OAuth browser auth
gym-cmd May 15, 2026
8e864f3
fix(mcp): refine upstream OAuth metadata fallback
gym-cmd May 15, 2026
da24c89
feat(proxy): support issuer-scoped JWT auth
gym-cmd May 15, 2026
c279f4e
fix(mcp): validate oauth callback redirect sink
gym-cmd May 15, 2026
1d731af
feat(proxy): support issuer-scoped JWT auth
gym-cmd May 15, 2026
dee5d55
test(mcp): align trusted proxy fixtures
gym-cmd May 15, 2026
dfb1e33
style(mcp): satisfy black formatting
gym-cmd May 15, 2026
b290416
chore(ui): bump next to 16.2.6
gym-cmd May 15, 2026
8ca2f14
fix(mcp): address oauth passthrough review findings
gym-cmd May 15, 2026
6079a5f
test(mcp): split oauth passthrough regressions
gym-cmd May 15, 2026
409a005
fix(interactions): align openapi response fields
gym-cmd May 15, 2026
3753970
security: prevent forwarding litellm api keys to upstream mcp servers
gym-cmd May 16, 2026
3990165
fix(interactions): remove steps field not in google openapi spec
gym-cmd May 16, 2026
f6359cb
fix(mcp): forward Authorization in pass-through when x-litellm-api-ke…
artem-dudarev-jet May 19, 2026
216e055
fix(interactions): align status enum with openapi spec
gym-cmd May 20, 2026
806b8be
fix(mcp,jwt): address greptile review concerns
claude May 20, 2026
a119324
test: replace dall-e-3 with gpt-image-1 in health check and router te…
yuneng-berri May 13, 2026
93d3ed7
fix(tests): drop dall-e-only test classes; route live image tests via…
yuneng-berri May 12, 2026
a0b61f6
test(fireworks): replace deprecated llama-v3p3-70b-instruct model
yuneng-berri May 16, 2026
76700e7
test(fireworks): mock remaining live smoke tests
yuneng-berri May 16, 2026
c65e598
fix(tests): replace shut-down gpt-4o-audio-preview with gpt-audio-1.5…
yuneng-berri May 19, 2026
37845ac
fix(tests): migrate realtime + rerank tests off shut-down upstream mo…
yuneng-berri May 18, 2026
76c704b
fix(model_prices): register mistral/ministral-8b-2512
claude May 20, 2026
298936f
fix(mcp,auth): address greptile review concerns
claude May 20, 2026
d42a66a
Merge branch 'litellm_internal_staging' into litellm_feat/v1.84.0-mcp…
claude May 20, 2026
fc31a07
Merge remote-tracking branch 'origin/litellm_feat/v1.84.0-mcp-gateway…
claude May 20, 2026
087a4da
fix(tests): backfill local model_cost into remote-fetched map
claude May 20, 2026
22e9064
fix(mcp,jwt): address greptile concurrency and code-quality concerns
claude May 20, 2026
b4df1a9
Merge remote-tracking branch 'upstream/litellm_internal_staging' into…
gym-cmd May 20, 2026
488fcc2
fix(jwt,mcp): fall back to global JWKS on unknown issuer; prune fetch…
claude May 20, 2026
1e5053a
fix(mcp,auth): restore client_ip in oauth2 target check, drop from de…
claude May 20, 2026
eae390b
fix(mcp): respect client ip for delegated auth
gym-cmd May 20, 2026
a6492bf
fix(auth): address remaining greptile style findings
claude May 20, 2026
6f82537
Merge branch 'litellm_internal_staging' into litellm_feat/v1.84.0-mcp…
claude May 20, 2026
5d8f74f
fix(jwt): strip internal _litellm_* claims in global JWKS auth path
cursoragent May 20, 2026
a86f6e7
fix(mcp): surface MCPUpstreamAuthError as 401 in SSE/HTTP transport h…
cursoragent May 20, 2026
326c6bb
fix(mcp): add upstream auth pre-flight in SSE handler
claude May 20, 2026
78cb412
fix(mcp): tighten cold-start bypass against CSV paths + dedupe upstre…
cursoragent May 20, 2026
ee38ba1
fix(mcp,tests): sync stubs and cold-start assertions with delegate-check
claude May 20, 2026
f0eb54e
fix(mcp): correct passthrough probe 401 + slashed-name cold start parser
cursoragent May 20, 2026
96e4de3
style(mcp): format discoverable endpoints
gym-cmd May 20, 2026
d1d9ff0
refactor(mcp): dedupe MCPUpstreamAuthError->HTTPException + thread cl…
cursoragent May 20, 2026
719adfd
fix(mcp): handle passthrough OAuth metadata and startup auth errors
cursoragent May 20, 2026
7ba7815
fix(mcp): restrict passthrough probe challenge to OAuth passthrough s…
cursoragent May 20, 2026
2636bbc
test(proxy): cover issuer-scoped JWT auth
gym-cmd May 20, 2026
0447ba6
fix(mcp): use resource metadata for passthrough reauth
gym-cmd May 20, 2026
31f8c56
fix(mcp,tests): assert cold-start helper directly for aggregate /mcp
mateo-berri May 21, 2026
6697fdb
Merge PR #28008 (gym-cmd/litellm:feat/v1.84.0-mcp-gateway-jwt-auth) i…
cursoragent May 21, 2026
7905e99
fix(mcp,jwt): drop unneeded async helper + suppress misleading unscop…
mateo-berri May 21, 2026
91f44f3
fix(jwt,mcp): clarify issuers fallthrough + add TTL on mcp permission…
mateo-berri May 21, 2026
86cf3ef
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
cursoragent May 21, 2026
418e266
fix(tests): align merged JWT and MCP cold-start assertions
cursoragent May 21, 2026
1434ad3
fix(jwt): guard litellm_jwtauth access in auth_jwt global path
mateo-berri May 21, 2026
e2e4f70
Merge latest litellm_feat/v1.84.0-mcp-gateway-jwt-auth into local mer…
cursoragent May 21, 2026
026c237
Merge latest litellm_feat/v1.84.0-mcp-gateway-jwt-auth
cursoragent May 21, 2026
0511b76
Gate MCP OAuth pass-through on delegate_auth_to_upstream flag
mateo-berri May 21, 2026
22cfb55
fix(mcp): route org object_permission lookup through shared auth helpers
mateo-berri May 21, 2026
123f0fd
fix(mcp): wrap get_object_permission call in shared try/except
cursoragent May 21, 2026
0fada28
fix(jwt): validate issuer audience at config load + dedicated key-mis…
mateo-berri May 21, 2026
e9ff79c
fix(mcp): admit and forward Authorization for passthrough OAuth return
cursoragent May 21, 2026
7dfef63
fix(mcp): consistent www-authenticate casing + SSE toolset scoping
cursoragent May 21, 2026
ec3c670
security(mcp): strip Authorization in call_tool when LiteLLM admissio…
mateo-berri May 21, 2026
b80a91f
refactor(mcp): centralize caller Authorization strip decision
cursoragent May 21, 2026
457b21f
log MCP OAuth discovery diagnostics for unmatched paths and non-trans…
mateo-berri May 21, 2026
4ddbb91
fix(jwt): include issuer-normalized team id in get_all_jwt_team_ids
cursoragent May 21, 2026
f5a193f
fix(mcp/jwt): dedupe cold-start path parser; reject conflicting audie…
mateo-berri May 21, 2026
ad8c9c2
fix(mcp): restrict passthrough cold-start bypass to 401 only
cursoragent May 21, 2026
1b0b75c
fix(jwt/mcp): warn on unscoped JWT fallback; route agent permission l…
mateo-berri May 21, 2026
064f31e
fix(mcp): fabricate resource_metadata challenge when upstream 401 omi…
mateo-berri May 21, 2026
20e6447
fix(jwt): make _get_decode_options explicitly control verify_iss
cursoragent May 21, 2026
ca8e04c
fix(mcp): emit absolute resource_metadata URI in fabricated 401 chall…
mateo-berri May 21, 2026
77206df
fix(mcp): correct 403 detail text and remove dead _list_tools_for_sin…
cursoragent May 21, 2026
c949c54
fix: address potential bugs in auth_utils, mcp discoverable endpoints…
cursoragent May 21, 2026
0d999c0
test(vertex): tolerate transient InternalServerError in google maps t…
mateo-berri May 21, 2026
4f3e79e
refactor(mcp): drop redundant has_client_credentials filter on passth…
cursoragent May 21, 2026
c6eafec
Merge origin/litellm_internal_staging into litellm_feat/v1.84.0-mcp-g…
mateo-berri May 21, 2026
1bdeeec
fix: restore unreachable InternalServerError skip handler in vertex test
cursoragent May 21, 2026
ccea19d
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
mateo-berri May 26, 2026
172c11b
feat(mcp): add dedicated oauth_passthrough flag for non-oauth2 pass-t…
mateo-berri May 26, 2026
1d73f1b
fix(mcp): reconcile cold-start bypass with x-mcp-servers header and s…
cursoragent May 26, 2026
9469ede
fix(mcp): fabricate path-aware resource_metadata URI for upstream 401
cursoragent May 26, 2026
61c9a2f
fix(jwt+mcp): tighten issuer-scoped claim type handling, RFC-quote au…
cursoragent May 26, 2026
adc4a83
Merge origin/litellm_internal_staging into litellm_feat/v1.84.0-mcp-g…
mateo-berri May 26, 2026
53806eb
chore(docker): align Dockerfile.non_root/Dockerfile.database to curre…
mateo-berri May 26, 2026
98472c9
ci(docker): bump wolfi-base pin to current working digest
mateo-berri May 26, 2026
5a8adc3
ci(docker): retry apk add in Dockerfile.database for apk.cgr.dev flakes
mateo-berri May 26, 2026
625e3bc
fix(mcp): scope preemptive 401 to toolset-narrowed server set
cursoragent May 26, 2026
9288f83
revert(docker): drop unrelated Wolfi bump and apk retry loop from MCP…
mateo-berri May 30, 2026
06eb433
Merge remote-tracking branch 'origin/litellm_internal_staging' into l…
mateo-berri Jun 2, 2026
ec48d4d
fix(mcp): surface upstream 403 challenges from REST tools/list
mateo-berri Jun 2, 2026
390f3aa
fix(mcp): fail closed for IP access control when XFF trusted ranges u…
mateo-berri Jun 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "LiteLLM_MCPServerTable" ADD COLUMN IF NOT EXISTS "oauth_passthrough" BOOLEAN NOT NULL DEFAULT false;
1 change: 1 addition & 0 deletions litellm-proxy-extras/litellm_proxy_extras/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ model LiteLLM_MCPServerTable {
allow_all_keys Boolean @default(false)
available_on_public_internet Boolean @default(true)
delegate_auth_to_upstream Boolean @default(false)
oauth_passthrough Boolean @default(false)
is_byok Boolean @default(false)
byok_description String[] @default([])
byok_api_key_help_url String?
Expand Down
14 changes: 12 additions & 2 deletions litellm/experimental_mcp_client/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,8 +421,16 @@ def factory(

return factory

async def list_tools(self) -> List[MCPTool]:
"""List available tools from the server."""
async def list_tools(self, raise_on_error: bool = False) -> List[MCPTool]:
"""List available tools from the server.

Args:
raise_on_error: When True, re-raise exceptions instead of returning
an empty list. Used by the proxy's pass-through MCP flow so it
can surface upstream HTTP 401 responses as a proper 401 to the
MCP client (triggering the upstream OAuth flow) rather than
masking them as "connected, no tools".
"""
verbose_logger.debug(
f"MCP client listing tools from {self.server_url or 'stdio'}"
)
Expand Down Expand Up @@ -458,6 +466,8 @@ async def _list_tools_operation(session: ClientSession):
"the MCP server may have crashed, disconnected, or timed out"
)

if raise_on_error:
raise
# Return empty list instead of raising to allow graceful degradation
return []

Expand Down
305 changes: 237 additions & 68 deletions litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py

Large diffs are not rendered by default.

Loading
Loading