@@ -83,6 +83,8 @@ async def main():
8383from typing_extensions import TypeVar
8484
8585import mcp .types as types
86+ from mcp .server .auth .middleware .auth_context import auth_context_var
87+ from mcp .server .auth .middleware .bearer_auth import AuthenticatedUser
8688from mcp .server .experimental .request_context import Experimental
8789from mcp .server .lowlevel .experimental import ExperimentalHandlers
8890from mcp .server .lowlevel .func_inspection import create_call_wrapper
@@ -723,6 +725,7 @@ async def _handle_request(
723725 logger .debug ("Dispatching request of type %s" , type (req ).__name__ )
724726
725727 token = None
728+ auth_token = None
726729 try :
727730 # Extract request context and close_sse_stream from message metadata
728731 request_data = None
@@ -743,6 +746,14 @@ async def _handle_request(
743746 task_metadata = None
744747 if hasattr (req , "params" ) and req .params is not None :
745748 task_metadata = getattr (req .params , "task" , None )
749+ if request_data is not None :
750+ scope = getattr (request_data , "scope" , None )
751+ if isinstance (scope , dict ):
752+ scope_dict = cast (dict [str , Any ], scope )
753+ user = scope_dict .get ("user" )
754+ if isinstance (user , AuthenticatedUser ):
755+ auth_token = auth_context_var .set (user )
756+
746757 token = request_ctx .set (
747758 RequestContext (
748759 message .request_id ,
@@ -775,6 +786,8 @@ async def _handle_request(
775786 response = types .ErrorData (code = 0 , message = str (err ), data = None )
776787 finally :
777788 # Reset the global state after we are done
789+ if auth_token is not None :
790+ auth_context_var .reset (auth_token )
778791 if token is not None : # pragma: no branch
779792 request_ctx .reset (token )
780793
0 commit comments