Skip to content

Conversation

dwreeves
Copy link

Motivation and Context

Accessing the ctx.request_context.request.user is a simple way to retrieve the scopes available to a user (as well as access token and client ID, albeit client ID is already available as an attr to the Context class), which is useful for some request handling. E.g. in some MCP clients (OpenAI's DeepResearch MCP implementations), scopes cannot necessarily be handled at the middleware level because everything needs to hit a specific fetch tool, so scopes need to be handled within the request callback. This means scopes need to be available within that callback. Adding a user property to the ctx makes it easier for a developer to discern where they might get access to the user's scopes.

How Has This Been Tested?

I have been able to access the user attribute via ctx.request_context.request.user in my own code.

Breaking Changes

No

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

gspencergoog pushed a commit to gspencergoog/mcp-python-sdk that referenced this pull request Jul 29, 2025
…/add-codeowners-file

Add CODEOWNERS file for repository governance
Copy link
Contributor

@felixweinberger felixweinberger left a comment

Choose a reason for hiding this comment

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

Hi again @dwreeves thanks for this coontribution!

Given we chatted elsewhere about OpenAI APIs having changed significantly, curious whether this is still something you would want?

I'm not deeply opposed as it's a minor convenience enhancement, but confirming the motivation still stands and goes beyond a specific usecase would be valuable as it's currently possible to access this information already via request_context.request even if it's slightly more verbose.

@property
def user(self) -> AuthenticatedUser | None:
"""Get the authenticated user if available."""
return self.request_context.request.user if isinstance(self.request_context.request, Request) else None
Copy link
Contributor

Choose a reason for hiding this comment

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

Not a huge fan of having a helper that depends on introspecting the type of the Request as we can't guarantee .user is available.

Maybe we can use the same pattern as in client_id instead with getattr?

    @property
    def user(self) -> AuthenticatedUser | None:
        """Get the authenticated user if available."""
        return getattr(self.request_context.request, "user", None)

Also would be good to update the README at

- `ctx.request_id` - Unique ID for the current request

@felixweinberger felixweinberger added needs confirmation Needs confirmation that the PR is actually required or needed. needs more eyes Needs alignment among maintainers whether this is something we want to add labels Sep 17, 2025
@dwreeves
Copy link
Author

Hi @felixweinberger,

I'm open to closing this one. I don't know that it is really necessary.

@felixweinberger
Copy link
Contributor

Hi @felixweinberger,

I'm open to closing this one. I don't know that it is really necessary.

Cool thank you for the response! In the interest of keeping changes contained I'll close this one in that case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs confirmation Needs confirmation that the PR is actually required or needed. needs more eyes Needs alignment among maintainers whether this is something we want to add

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants