Skip to content

SEP-2207: OIDC-flavored refresh token guidance#2207

Merged
mcp-commander[bot] merged 18 commits intomodelcontextprotocol:mainfrom
ArcadeAI:doc/oidc-refresh
Mar 29, 2026
Merged

SEP-2207: OIDC-flavored refresh token guidance#2207
mcp-commander[bot] merged 18 commits intomodelcontextprotocol:mainfrom
ArcadeAI:doc/oidc-refresh

Conversation

@wdawson
Copy link
Copy Markdown
Contributor

@wdawson wdawson commented Feb 5, 2026

This PR introduces guidance for MCP implementations using OIDC-flavored Authorization Servers regarding refresh token issuance and handling of the offline_access scope.

Motivation and Context

MCP builds on OAuth 2.1, which doesn't require special scopes for refresh tokens—the AS decides based on client capabilities. However, many OIDC Authorization Servers require the offline_access scope.

This creates a gap: MCP clients interacting with OIDC-flavored servers may not receive refresh tokens, resulting in a poor UX (frequent re-authentication). This SEP clarifies:

  • How clients can request refresh tokens from OIDC servers
  • That MCP servers should not include offline_access in their responses

Discord discussion: MCP Authorization channel (Jan 2026)

How Has This Been Tested?

This is a specification/documentation change. The guidance has been reviewed by OAuth experts in the MCP community.

SDK updates:

We also implemented this guidance for the Authorization Server and MCP server at Arcade.dev for MCP Gateways. You can sign up and create one for free to test with any MCP-compatible client.

Breaking Changes

None. This is additive guidance that does not change existing behavior.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Sponsor: @pcarleton

AI Disclosure: AI helped to create the structure of the SEP document. I reviewed and edited the text by hand afterward and manually contributed the specification change itself.

@wdawson wdawson requested a review from a team as a code owner February 5, 2026 00:37
@wdawson wdawson changed the title SEP-0000: OIDC-flavored refresh token guidance SEP-2207: OIDC-flavored refresh token guidance Feb 5, 2026
Copy link
Copy Markdown
Contributor

@localden localden left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In docs/specification/draft/basic/authorization.mdx (line 509):

- **MAY** add offline_access to scopes when the AS metadata contains it in scopes_supported

This is a bit vague on timing and mechanism - does the client add offline_access to the scope parameter in the authorization request? The token request? Both? Let's make this explicit, e.g.:

- **MAY** add `offline_access` to the `scope` parameter of the authorization request when the AS metadata contains it in `scopes_supported`

@localden
Copy link
Copy Markdown
Contributor

localden commented Feb 6, 2026

@wdawson also, the spec change also provides quite a bit of normative guidance to Authorization Servers, but in most real MCP deployments the AS is a third-party system (Auth0, Okta, Keycloak, Entra ID, etc.) that MCP implementers don't control. I am not sure to what degree we want to go in depth around AS behavior design here.

The AS bullets are largely unactionable for the typical MCP developer. It might be worth framing these as "when building a custom Authorization Server for MCP" or acknowledging that these describe ideal AS behavior that existing providers may or may not follow.

@github-actions github-actions bot removed the approved label Mar 13, 2026
@github-actions github-actions bot dismissed their stale review March 13, 2026 20:09

New commits pushed — approval invalidated.

@github-actions
Copy link
Copy Markdown
Contributor

New commits were pushed — removed the approved label. Re-approve with /lgtm.

@wdawson
Copy link
Copy Markdown
Contributor Author

wdawson commented Mar 13, 2026

@kurtisvg, my bad. I just merged main here, trying to clear the failing status check earlier, and it looks like that canceled your approval

@kurtisvg
Copy link
Copy Markdown
Contributor

/lgtm

github-actions[bot]
github-actions bot previously approved these changes Mar 13, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved on behalf of @kurtisvg via /lgtm.

@localden
Copy link
Copy Markdown
Contributor

/lgtm

mcp-commander[bot]
mcp-commander bot previously approved these changes Mar 29, 2026
Copy link
Copy Markdown

@mcp-commander mcp-commander bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved on behalf of @localden via /lgtm.

@mcp-commander mcp-commander bot enabled auto-merge (squash) March 29, 2026 01:51
@localden
Copy link
Copy Markdown
Contributor

@wdawson @nbarbettini looks like I can't resolve the conflict because I do not have permissions to the fork. Do you mind resolving the conflicts and pushing the changes so we can merge this?

auto-merge was automatically disabled March 29, 2026 05:07

Head branch was pushed to by a user without write access

@mcp-commander mcp-commander bot removed the accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. label Mar 29, 2026
@mcp-commander
Copy link
Copy Markdown

mcp-commander bot commented Mar 29, 2026

New commits were pushed — removed the accepted label. Re-approve with /lgtm.

@localden
Copy link
Copy Markdown
Contributor

/lgtm

@mcp-commander mcp-commander bot added the accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. label Mar 29, 2026
@mcp-commander mcp-commander bot moved this to Accepted in SEP Review Pipeline Mar 29, 2026
Copy link
Copy Markdown

@mcp-commander mcp-commander bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved on behalf of @localden via /lgtm.

@mcp-commander mcp-commander bot enabled auto-merge (squash) March 29, 2026 05:15
@mcp-commander mcp-commander bot merged commit 9c021b3 into modelcontextprotocol:main Mar 29, 2026
8 checks passed
@wdawson wdawson deleted the doc/oidc-refresh branch March 29, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accepted SEP accepted by core maintainers, but still requires final wording and reference implementation. approved auth security SEP

Projects

Status: Accepted

Development

Successfully merging this pull request may close these issues.

6 participants