Skip to content

Commit 73b43a9

Browse files
ref(mcp): Inline _prepare_handler_data() (#6758)
Remove unnecessary indirection by inlining `_prepare_handler_data()`.
1 parent 3cf7b59 commit 73b43a9

1 file changed

Lines changed: 43 additions & 82 deletions

File tree

sentry_sdk/integrations/mcp.py

Lines changed: 43 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -391,15 +391,6 @@ def _set_span_output_data(
391391
# Handler data preparation and wrapping
392392

393393

394-
def _is_v2_context(original_args: "tuple[Any, ...]") -> bool:
395-
"""Check if original_args contains a v2 ServerRequestContext as the first element."""
396-
return (
397-
ServerRequestContext is not None
398-
and bool(original_args)
399-
and isinstance(original_args[0], ServerRequestContext)
400-
)
401-
402-
403394
def _extract_handler_data_from_params(
404395
handler_type: str,
405396
params: "Any",
@@ -477,50 +468,6 @@ def _extract_handler_data_from_args(
477468
return handler_name, arguments
478469

479470

480-
def _prepare_handler_data(
481-
handler_type: str,
482-
original_args: "tuple[Any, ...]",
483-
original_kwargs: "Optional[dict[str, Any]]" = None,
484-
params: "Optional[Any]" = None,
485-
) -> "tuple[str, dict[str, Any], str, str, str, Optional[str]]":
486-
"""
487-
Prepare common handler data for both v1 and v2 MCP SDK.
488-
489-
Args:
490-
handler_type: "tool", "prompt", or "resource"
491-
original_args: Original positional args (v1 path)
492-
original_kwargs: Original keyword args (v1 path)
493-
params: Typed params object from v2 ServerRequestContext path
494-
495-
Returns:
496-
Tuple of (handler_name, arguments, span_data_key, span_name, mcp_method_name, result_data_key)
497-
"""
498-
if params is not None:
499-
handler_name, arguments = _extract_handler_data_from_params(
500-
handler_type, params
501-
)
502-
elif _is_v2_context(original_args):
503-
handler_name = "unknown"
504-
arguments = {}
505-
else:
506-
handler_name, arguments = _extract_handler_data_from_args(
507-
handler_type, original_args, original_kwargs
508-
)
509-
510-
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
511-
handler_type, handler_name
512-
)
513-
514-
return (
515-
handler_name,
516-
arguments,
517-
span_data_key,
518-
span_name,
519-
mcp_method_name,
520-
result_data_key,
521-
)
522-
523-
524471
async def _tool_handler_wrapper(
525472
func: "Callable[..., Awaitable[Union[CallToolResult, InputRequiredResult]]]",
526473
original_args: "tuple[Any, ...]",
@@ -550,16 +497,20 @@ async def _tool_handler_wrapper(
550497
and isinstance(original_args[0], ServerRequestContext)
551498
):
552499
ctx = original_args[0]
553-
params = original_args[1] if len(original_args) > 1 else None
500+
if len(original_args) > 1:
501+
params = original_args[1]
502+
handler_name, arguments = _extract_handler_data_from_params("tool", params)
503+
else:
504+
handler_name = "unknown"
505+
arguments = {}
506+
else:
507+
handler_name, arguments = _extract_handler_data_from_args(
508+
"tool", original_args, original_kwargs
509+
)
554510

555-
(
556-
handler_name,
557-
arguments,
558-
span_data_key,
559-
span_name,
560-
mcp_method_name,
561-
result_data_key,
562-
) = _prepare_handler_data("tool", original_args, original_kwargs, params=params)
511+
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
512+
"tool", handler_name
513+
)
563514

564515
# Get request ID, session ID, and transport from context
565516
request_id, session_id, mcp_transport = _get_request_context_data(ctx=ctx)
@@ -639,23 +590,27 @@ async def _prompt_handler_wrapper(
639590

640591
# Detect v1 vs v2: MCP SDK v2 passes (ServerRequestContext, params) to handlers
641592
ctx: "Optional[Any]" = None
642-
params: "Optional[Any]" = None
643593
if (
644594
ServerRequestContext is not None
645595
and original_args
646596
and isinstance(original_args[0], ServerRequestContext)
647597
):
648598
ctx = original_args[0]
649-
params = original_args[1] if len(original_args) > 1 else None
599+
if len(original_args) > 1:
600+
handler_name, arguments = _extract_handler_data_from_params(
601+
"prompt", original_args[1]
602+
)
603+
else:
604+
handler_name = "unknown"
605+
arguments = {}
606+
else:
607+
handler_name, arguments = _extract_handler_data_from_args(
608+
"prompt", original_args, original_kwargs
609+
)
650610

651-
(
652-
handler_name,
653-
arguments,
654-
span_data_key,
655-
span_name,
656-
mcp_method_name,
657-
result_data_key,
658-
) = _prepare_handler_data("prompt", original_args, original_kwargs, params=params)
611+
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
612+
"prompt", handler_name
613+
)
659614

660615
# Get request ID, session ID, and transport from context
661616
request_id, session_id, mcp_transport = _get_request_context_data(ctx=ctx)
@@ -740,16 +695,22 @@ async def _resource_handler_wrapper(
740695
and isinstance(original_args[0], ServerRequestContext)
741696
):
742697
ctx = original_args[0]
743-
params = original_args[1] if len(original_args) > 1 else None
744-
745-
(
746-
handler_name,
747-
arguments,
748-
span_data_key,
749-
span_name,
750-
mcp_method_name,
751-
result_data_key,
752-
) = _prepare_handler_data("resource", original_args, original_kwargs, params=params)
698+
if len(original_args) > 1:
699+
params = original_args[1]
700+
handler_name, arguments = _extract_handler_data_from_params(
701+
"resource", params
702+
)
703+
else:
704+
handler_name = "unknown"
705+
arguments = {}
706+
else:
707+
handler_name, arguments = _extract_handler_data_from_args(
708+
"resource", original_args, original_kwargs
709+
)
710+
711+
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
712+
"resource", handler_name
713+
)
753714

754715
# Get request ID, session ID, and transport from context
755716
request_id, session_id, mcp_transport = _get_request_context_data(ctx=ctx)

0 commit comments

Comments
 (0)