Authorization for multi-tenant MCP servers and gateways: where should per-resource audience binding and policy live? #850
Replies: 1 comment 4 replies
|
I like the split between resource-specific audience binding and a separate per-operation policy layer. One boundary I’m unsure about is device-facing calls, where an operation may depend on more than subject, capability and resource path before it should proceed. For example, if a caller is authorized to invoke start_motor on a particular asset, should current operational state or safety preconditions be inputs to that same policy decision? Or do you see those checks as intentionally belonging behind the MCP authorization boundary, in a separate device/backend safety layer? That seems directly relevant to your third question. In a device-facing deployment, an operation can be authorized for a caller and resource without necessarily being safe to carry out at that moment. |
Uh oh!
There was an error while loading. Please reload this page.
Pre-submission Checklist
Your Idea
What problem does it solve?
Multi-tenant MCP deployments have no agreed pattern for authorization. When a
gateway or broker fronts many MCP servers behind one endpoint, exposed beyond a
trusted network (and increasingly device-facing), every deployment reinvents:
replayed against another (RFC 8707 / RFC 9728);
explicit denies), evaluated per operation;
learn that a backend it is not authorized for exists;
Who would benefit?
Anyone running MCP for many clients and many backends behind one address:
gateway/broker operators, enterprises exposing internal MCP servers, and
hardware/device-facing deployments where the authz boundary is safety-relevant.
How might it be implemented?
The building blocks already exist in OAuth 2.1 + RFC 9728/8707; the open question
is which parts the protocol should recommend or standardize versus leave to
implementations. This is not theoretical: I built and shipped a working reference
that implements all of the above end to end (Apache-2.0), so the "how" is proven,
not hypothetical:
Per the SEP guidance (validate the problem, build a prototype, then write the
SEP), the prototype exists; this post is me validating shared interest before
drafting a SEP.
Open questions
or should more live in the protocol?
existence leak) as a pattern for aggregation?
Disclosure: I am the dev/maintainer of the implementation linked above, and this
post was drafted with AI assistance, as English is not my native language.
Scope
All reactions