@@ -43,6 +43,14 @@ async def wrapped_initialize_handler(request: InitializeRequest) -> ServerResult
4343 request_context = safe_request_context (server )
4444 identity = identify_session (server , request , request_context )
4545
46+ # Extract clientInfo from InitializeRequest params (MCP protocol provides it here)
47+ client_name , client_version = None , None
48+ if request .params and hasattr (request .params , 'clientInfo' ) and request .params .clientInfo :
49+ client_name = request .params .clientInfo .name
50+ client_version = getattr (request .params .clientInfo , 'version' , None )
51+ if not client_name :
52+ client_name , client_version = get_client_info_from_request_context (server , request_context )
53+
4654 event = UnredactedEvent (
4755 session_id = session_id ,
4856 timestamp = datetime .now (timezone .utc ),
@@ -51,13 +59,13 @@ async def wrapped_initialize_handler(request: InitializeRequest) -> ServerResult
5159 identify_actor_given_id = identity .user_id if identity else None ,
5260 identify_actor_name = identity .user_name if identity else None ,
5361 identify_data = identity .user_data if identity else None ,
62+ client_name = client_name ,
63+ client_version = client_version ,
5464 )
5565
5666 # Call the original handler
5767 result = await original_initialize_handler (request )
5868
59- # TODO: Grab client and server information from the request
60-
6169 # Record the event
6270 event .response = result .model_dump () if result else None
6371 event_queue .publish_event (server , event )
@@ -67,7 +75,7 @@ async def wrapped_list_tools_handler(request: ListToolsRequest) -> ServerResult:
6775 """Intercept list_tools requests to add MCPCat tools and modify existing ones."""
6876 session_id = get_server_session_id (server )
6977 request_context = safe_request_context (server )
70- get_client_info_from_request_context (server , request_context )
78+ client_name , client_version = get_client_info_from_request_context (server , request_context )
7179 identity = identify_session (server , request , request_context )
7280
7381 event = UnredactedEvent (
@@ -80,6 +88,8 @@ async def wrapped_list_tools_handler(request: ListToolsRequest) -> ServerResult:
8088 identify_actor_given_id = identity .user_id if identity else None ,
8189 identify_actor_name = identity .user_name if identity else None ,
8290 identify_data = identity .user_data if identity else None ,
91+ client_name = client_name ,
92+ client_version = client_version ,
8393 )
8494
8595 # Call the original handler to get the tools
@@ -149,7 +159,7 @@ async def wrapped_call_tool_handler(request: CallToolRequest) -> ServerResult:
149159 arguments = request .params .arguments or {}
150160 session_id = get_server_session_id (server )
151161 request_context = safe_request_context (server )
152- get_client_info_from_request_context (server , request_context )
162+ client_name , client_version = get_client_info_from_request_context (server , request_context )
153163 identity = identify_session (server , request , request_context )
154164
155165 write_to_log (
@@ -164,6 +174,8 @@ async def wrapped_call_tool_handler(request: CallToolRequest) -> ServerResult:
164174 identify_actor_given_id = identity .user_id if identity else None ,
165175 identify_actor_name = identity .user_name if identity else None ,
166176 identify_data = identity .user_data if identity else None ,
177+ client_name = client_name ,
178+ client_version = client_version ,
167179 )
168180
169181 # Extract user intent from context (but don't pop yet - we need it for the event)
@@ -237,6 +249,13 @@ async def wrapped_initialize_handler(request: InitializeRequest) -> ServerResult
237249 identity = None
238250 write_to_log (f"Ran into an error in session identification, no identity could be determined: { e } " )
239251
252+ client_name , client_version = None , None
253+ if request .params and hasattr (request .params , 'clientInfo' ) and request .params .clientInfo :
254+ client_name = request .params .clientInfo .name
255+ client_version = getattr (request .params .clientInfo , 'version' , None )
256+ if not client_name :
257+ client_name , client_version = get_client_info_from_request_context (server , request_context )
258+
240259 event = UnredactedEvent (
241260 session_id = session_id ,
242261 timestamp = datetime .now (timezone .utc ),
@@ -245,6 +264,8 @@ async def wrapped_initialize_handler(request: InitializeRequest) -> ServerResult
245264 identify_actor_given_id = identity .user_id if identity else None ,
246265 identify_actor_name = identity .user_name if identity else None ,
247266 identify_data = identity .user_data if identity else None ,
267+ client_name = client_name ,
268+ client_version = client_version ,
248269 )
249270
250271 # Call the original handler
@@ -259,7 +280,7 @@ async def wrapped_list_tools_handler(request: ListToolsRequest) -> ServerResult:
259280 """Intercept list_tools requests to track the event (tool modifications handled by monkey-patch)."""
260281 session_id = get_server_session_id (server )
261282 request_context = safe_request_context (server )
262- get_client_info_from_request_context (server , request_context )
283+ client_name , client_version = get_client_info_from_request_context (server , request_context )
263284 identity = identify_session (server , request , request_context )
264285
265286 event = UnredactedEvent (
@@ -272,6 +293,8 @@ async def wrapped_list_tools_handler(request: ListToolsRequest) -> ServerResult:
272293 identify_actor_given_id = identity .user_id if identity else None ,
273294 identify_actor_name = identity .user_name if identity else None ,
274295 identify_data = identity .user_data if identity else None ,
296+ client_name = client_name ,
297+ client_version = client_version ,
275298 )
276299
277300 # Call the original handler - tool modifications are handled by monkey-patch
0 commit comments