Parameter | Required/Optional | Description | Example/Allowed Values |
---|---|---|---|
requested_token_type | REQUIRED | Indicates that an ID Assertion JWT is being requested. | urn:ietf:params:oauth:token-type:id-jag |
audience | REQUIRED | The Issuer URL of the MCP server’s authorization server. | https://auth.chat.example/ |
resource | REQUIRED | The RFC9728 Resource Identifier of the MCP server. | https://mcp.chat.example/ |
scope | OPTIONAL | The space-separated list of scopes at the MCP Server that are being requested. | scope1 scope2 |
subject_token | REQUIRED | The identity assertion (e.g. the OpenID Connect ID Token or SAML assertion) for the target end-user. | (JWT or SAML assertion string) |
subject_token_type | REQUIRED | Indicates the type of the security token in the subject_token parameter, as specified in RFC8693 Section 3. | urn:ietf:params:oauth:token-type:id_token (OIDC)urn:ietf:params:oauth:token-type:saml2 (SAML) |
actor_token
and actor_token_type
) are not used in this specification.
If the IdP requires client authentication when the MCP Client performs OpenID Connect for single sign-on, then client authentication of the Token Exchange request is also required.
The example below illustrates the Token Exchange request, using an OpenID Connect ID Token as the Identity Assertion and a client secret as the client authentication method. The ID token is passed as a Subject Token.
aud
claim of the ID Token) matches the Client Identifier of the MCP client making this request (e.g. by checking the client_id
in the client authentication).
The IdP evaluates administrator-defined policies for the token exchange request and determines if the MCP Client should be granted access to act on behalf of the user for the target MCP Server and scopes.
The IdP may also introspect the authentication context described in the Identity Assertion to determine if step-up authentication is required.
Parameter | Required/Optional | Description | Example/Allowed Values |
---|---|---|---|
issued_token_type | REQUIRED | Indicates the type of token issued. | urn:ietf:params:oauth:token-type:id-jag |
access_token | REQUIRED | The Identity Assertion JWT Authorization Grant. (Note: Token Exchange requires the access_token response parameter for historical reasons, not an OAuth token.) | (JWT string) |
token_type | REQUIRED | The token type. | N_A (because this is not an OAuth access token.) |
scope | OPTIONAL/REQUIRED | OPTIONAL if the scope of the issued token is identical to the requested; otherwise REQUIRED. May be fewer scopes than requested. | scope1 scope2 |
expires_in | RECOMMENDED | The lifetime in seconds of the authorization grant. | 3600 |
Parameter | Required/Optional | Description | Reference / Example |
---|---|---|---|
iss | REQUIRED | The IdP issuer URL. | Section 4.1.1 of RFC7519 |
sub | REQUIRED | The subject identifier (e.g., user ID) of the user at the MCP Server. | Section 4.1.2 of RFC7519 |
aud | REQUIRED | The Issuer URL of the MCP Server’s authorization server. | Section 4.1.3 of RFC7519 |
resource | REQUIRED | The Resource Identifier of the MCP Server. | Section 1.2 of RFC9728 |
client_id | REQUIRED | An identifier of the MCP Client registered at the Authorization Server that this JWT was issued to; SHOULD be a client_id as defined in Section 4.3 of RFC8693. | Section 4.3 of RFC8693 |
jti | REQUIRED | Unique ID of this JWT. | Section 4.1.7 of RFC7519 |
exp | REQUIRED | Expiration time of this JWT (Unix timestamp in seconds). | Section 4.1.4 of RFC7519 |
iat | REQUIRED | Issued-at time of this JWT (Unix timestamp in seconds). | Section 4.1.6 of RFC7519 |
scope | OPTIONAL | A JSON string containing a space-separated list of scopes associated with the token, per Section 3.3 of RFC6749. | ["scope1 scope2"] Section 3.3 of RFC6749 |
typ
claim of the JWT indicated in the JWT header MUST be oauth-id-jag+jwt
.
An example JWT shown with expanded header and payload claims may look like this:
hd
claim for Google) or SAML assertion, and will need to use that if the IdP also has only one client registration for the MCP Server.
sub
should be an opaque ID, as iss+sub
is unique. The IdP might want to also include additional user information, such as an email address, which it should do as a new email
claim. This may allow the MCP Client application to properly link existing user accounts to the sub
identifier used within the enterprise context for SSO.
Parameter | Required/Optional | Description | Example/Allowed Values |
---|---|---|---|
grant_type | REQUIRED | MUST be urn:ietf:params:oauth:grant-type:jwt-bearer | urn:ietf:params:oauth:grant-type:jwt-bearer Section 4.1 of RFC7523 |
assertion | REQUIRED | The Identity Assertion JWT Authorization Grant obtained in the previous token exchange step | (JWT string) |
typ
is oauth-id-jag+jwt
(per RFC8725)aud
claim of the assertion JWT MUST identify the Issuer URL of the MCP Server’s authorization server as the intended audience of the JWT.client_id
claim of the assertion JWT MUST identify the same client as the client authentication in the request (e.g., the client_id
specified in a basic auth header).client_id
in the ID-JAG (described in Section 4.3), the IdP will need to be aware of the MCP Client’s client_id
that it normally uses with the MCP Server. This mapping happens outside of the protocol, such as during the configuration of the feature in the IdP.