docs(mcp): document passthrough auth modes, multi-server token isolation, and audience-lock steering - #1188
Merged
yassin-berriai merged 1 commit intoSep 5, 2026
Conversation
…ion, and audience-lock steering Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
yassin-berriai
deleted the
litellm_mcp_passthrough_auth_modes_audience_lock
branch
September 5, 2026 18:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Extends
docs/mcp_oauth_passthrough.mdso an operator can pick betweentrue_passthrough,oauth_delegateandoauth2_token_exchangefrom the token they actually hold, and understand why a passthrough token minted for another resource is rejected upstream by designNew sections, each checked against
litellm/proxy/_experimental/mcp_server/onlitellm_internal_staging:"Audience-locked tokens: passthrough or token exchange" states that both passthrough modes forward the bearer verbatim (no decode, no audience/scope check, no exchange), so an upstream
401for a token audienced to a different resource is the confused-deputy-safe outcome and the fix isoauth2_token_exchange(OBO re-mints an upstream-audienced token), never a widened audience. A three-row table maps "token minted for X" to the mode to use"Multi-server aggregate requests" documents
x-mcp-{alias}-authorization(alias sanitized persanitize_mcp_alias_for_header: lowercase, non[a-z0-9_]becomes_) and the fan-out rule from_prepare_mcp_server_headers/_caller_authorization_fans_out: the request-wideAuthorizationis withheld from a client-forwarded server duringtools/list, prompts and resources listings when another server in the same scope would also consume it, while per-server headers and explicitly addressed operations (tools/call,/{server_name}/mcp) still get it. Includes a curl for an aggregatetools/listwith two per-server tokens"Previewing tools in the Admin UI" describes the browser-only "Authorize & Fetch Tools" button (
PassthroughAuthorizeSection.tsx): the upstream token stays in the browser session and is never written to the server row or credential store, while the optional OAuth Client ID/Secret are persisted config"Intentional limits" covers the absent per-server re-auth signal on the aggregate (a failing server is absorbed into an empty listing), sender-constrained DPoP/mTLS tokens not being relayable at L7, and revocation not being checked at connect time
Also documents
allowed_toolsfortrue_passthroughas the only tool restriction (server-level, identical for every caller, since there is no per-key identity)Linear ticket
Resolves LIT-4301
Screenshots / Proof of Fix
npm run buildcompleted with[SUCCESS] Generated static files in "build"at 883eaa3, no broken links or MDX errors for this pageRendered at
/docs/mcp_oauth_passthroughfrom the local build:Link to Devin session: https://app.devin.ai/sessions/c3f6277efdd24ead9ab000396f51a5ec
Open in Devin Desktop: https://app.devin.ai/desktop/session/c3f6277efdd24ead9ab000396f51a5ec?variant=devin
Requested by: @yassin-berriai