Your remote MCP server fronts three downstream SaaS APIs — how do you design its credentials?
answer
- The incoming token stops at your server
- Per upstream, not one policy for all
- Delegated grant versus service identity
- Scopes are your contract, not the vendors'
- Rotation overlaps; re-linking is user-visible
basics
~20 sThe incoming MCP token never leaves the server. Each upstream gets its own credential, held and rotated by the server, with the authenticated caller mapped onto the right upstream identity — and the MCP server's own scopes chosen so a token's power matches the damage it could do.
solid answer
~50 sStart from the rule that fixes the shape: MCP forbids token passthrough, so the bearer token presented to your server is audience-bound to your server and stops there. Every upstream call therefore uses a credential your server holds — either a per-user linked account, where the user separately authorizes each SaaS and you store that grant against their identity, or a service credential your server owns, where you are making the access decision and must enforce it yourself. Then design your own scope vocabulary as the contract callers see: it should describe what the MCP server can do, grouped by blast radius, not mirror three vendors' scope taxonomies. The judgment calls to defend are which upstreams justify per-user delegation versus a service identity, how a partly-linked user is handled (a tool that is visible but returns a link-required prompt rather than a hard failure), and how rotation and revocation happen without downtime.
go deeper
Know that the token a client sends to the MCP server is not reused against other APIs, and that the server keeps its own credentials for anything it calls downstream.
Explain audience binding as the reason the incoming token stops at the server, and describe the two upstream options — a per-user linked grant or a service credential the server owns — with one tradeoff each.
Argue the choice per upstream rather than uniformly, cover what a partly-linked user experiences, and describe rotation with overlap plus short cached-validation windows so revocation is not defeated by your own cache.
Own the whole boundary: your scope vocabulary as the authorization contract, blast radius per compromise, whether a sensitive upstream deserves its own MCP server and audience, and how consent, audit and re-linking stay legible to the user.
## The constraint that determines the architecture MCP revision 2026-07-28 requires audience-bound tokens and forbids token passthrough. The token a client presents was minted for *your* MCP server as its audience; it is not spendable anywhere else, and you must not try. That single rule settles the outbound question before design starts: your server is a credential *boundary*, and every upstream call is made with something your server holds. That is not a limitation to work around. It is what lets you put policy between the caller and three vendors who have no idea about each other. ## Two credential models, chosen per upstream **Per-user delegated access.** The user separately authorizes each SaaS, and your server stores that grant keyed to the user's identity. Access matches what that person can do in the vendor's product, the vendor's audit log names them, and revoking their access there revokes it here. The costs are real: a linking flow per user per vendor, refresh-token storage that is now a high-value target, and users who are half-linked at any given moment. **Service-identity access.** Your server holds one credential per upstream and calls with it. Simple to operate, but every access decision moves into your server — the vendor sees one caller and can no longer distinguish who asked. That is acceptable when the upstream data is genuinely shared by all callers, or the vendor offers no per-user model, and unacceptable where the upstream enforces per-user visibility you would then be silently flattening. Deciding per upstream rather than uniformly is the mark of the senior answer. A shared reference catalogue and a customer CRM do not deserve the same model. ## Designing your own scope vocabulary Callers authenticate to your MCP server, so the scopes on that token are *your* contract, not a mirror of three vendors' taxonomies. Two failure modes bracket the good design: - One scope for everything. Step-up becomes meaningless and every token is maximally powerful, so a leaked token is a full compromise. - One scope per tool. Consent screens grow to thirty lines that nobody reads, and the effective consent is worse than with five meaningful ones. Group by blast radius instead: read versus write, and per data domain, so that each scope maps to a sentence a user can evaluate. Then map scopes to upstream capability inside the server, and make the mapping the reviewed artifact — that mapping *is* your authorization model. Since a server's tool set may vary by the authorization presented (though never per connection), the same design decides what a narrow token even sees in `tools/list`. ## Blast radius and isolation Ask what one compromise costs. A single service credential per upstream with full privileges means a compromise of the MCP server yields full access to three products. Reduce it deliberately: request the narrowest upstream scopes that make your tools work, prefer short-lived credentials your server refreshes over long-lived static keys, and keep the credential store outside the process image so a code-execution bug does not immediately yield the secrets. If one upstream is dramatically more sensitive than the others, consider whether it belongs behind the same MCP server at all. Splitting it into a separate server with its own audience and its own tokens is often cheaper than defending a single server that holds everything, and it lets a user grant one without the other. ## Rotation and revocation as routine operations Design for both from day one. Rotation should overlap — the server accepts and uses a new upstream credential while the old one is still valid — so it is a normal deploy rather than a coordinated outage. For delegated grants, decide what happens when a refresh token is rejected: the tool should surface a re-link prompt through the host rather than fail opaquely, because the user is the only one who can fix it. On the inbound side, remember that MCP is stateless after 2026-07-28: there is no session to invalidate, so revocation is entirely a property of the token and of your validation path. If you cache validation results, cache them briefly, or a revoked token stays alive in your cache long after the authorization server disowned it. ## Consent and observability The user consented to your MCP server, and probably to each SaaS separately during linking. They did not consent to a tool that quietly reaches into a third product; make what a tool touches legible in its description and keep the surprising combinations out of one tool. On the operations side, log the caller identity, the tool, and which upstream identity was used — without that third field, an incident on the vendor's side cannot be traced back through your server to a person. ## What a strong answer sounds like Name the passthrough constraint first, then choose delegation versus service identity per upstream with reasons, then defend your scope granularity in terms of blast radius, then say how rotation, re-linking and revocation work operationally. An answer that stops at "store the API keys in a vault" has solved storage and skipped the authorization design.
- When is a single service credential per upstream defensible?When the upstream data is genuinely shared by every caller, or the vendor offers no per-user model at all. The tradeoff you accept is that the vendor's audit log sees one caller, so per-user access decisions move entirely into your MCP server and you must enforce and log them there. It is indefensible where the upstream already enforces per-user visibility you would be flattening.
- A user has linked two of the three SaaS accounts. What should the third tool do?Fail legibly rather than opaquely. Surface a message the host can turn into a link prompt, naming the account that needs authorizing, instead of returning a generic error the model will try to work around. Whether the tool is even listed is a separate call — hiding it avoids confusion, listing it makes the missing link discoverable.
- How do you keep revocation timely when MCP has no session to invalidate?Revocation lives entirely in the token and the validation path, since 2026-07-28 removed sessions. Keep inbound tokens short-lived, and if you cache validation results cache them for seconds rather than minutes, or a revoked token stays usable in your cache after the authorization server disowned it. For upstream delegated grants, treat a rejected refresh as a re-link signal to the user.
- Should all three upstreams really live behind one MCP server?Not automatically. If one is far more sensitive, splitting it into a separate MCP server with its own audience and its own tokens shrinks the blast radius of a compromise and lets a user grant one without the other. The cost is a second deployment and a second linking flow, which is often cheaper than defending a server that holds everything.
saying these in an interview costs you the question
- Forwards the incoming MCP token to the SaaS APIs
- One all-powerful scope for the whole server
- Long-lived static API keys with no rotation plan
- Mirrors three vendors' scope taxonomies to callers
- Logs the caller but not which upstream identity was used