Skip to content

Commit 6ddc211

Browse files
ref(mcp): Inline _get_span_config()
1 parent ebf64d3 commit 6ddc211

1 file changed

Lines changed: 19 additions & 54 deletions

File tree

sentry_sdk/integrations/mcp.py

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -158,33 +158,6 @@ def _get_request_context_data(
158158
return request_id, session_id, mcp_transport
159159

160160

161-
def _get_span_config(
162-
handler_type: str, item_name: str
163-
) -> "tuple[str, str, str, Optional[str]]":
164-
"""
165-
Get span configuration based on handler type.
166-
167-
Returns:
168-
Tuple of (span_data_key, span_name, mcp_method_name, result_data_key)
169-
Note: result_data_key is None for resources
170-
"""
171-
if handler_type == "tool":
172-
span_data_key = SPANDATA.MCP_TOOL_NAME
173-
mcp_method_name = "tools/call"
174-
result_data_key = SPANDATA.MCP_TOOL_RESULT_CONTENT
175-
elif handler_type == "prompt":
176-
span_data_key = SPANDATA.MCP_PROMPT_NAME
177-
mcp_method_name = "prompts/get"
178-
result_data_key = SPANDATA.MCP_PROMPT_RESULT_MESSAGE_CONTENT
179-
else: # resource
180-
span_data_key = SPANDATA.MCP_RESOURCE_URI
181-
mcp_method_name = "resources/read"
182-
result_data_key = None # Resources don't capture result content
183-
184-
span_name = f"{mcp_method_name} {item_name}"
185-
return span_data_key, span_name, mcp_method_name, result_data_key
186-
187-
188161
def _set_span_input_data(
189162
span: "Union[StreamedSpan, Span]",
190163
handler_name: str,
@@ -497,10 +470,6 @@ async def _tool_handler_wrapper(
497470
"tool", original_args, original_kwargs
498471
)
499472

500-
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
501-
"tool", handler_name
502-
)
503-
504473
scopes = _get_active_http_scopes(ctx=ctx)
505474

506475
isolation_scope_context: "ContextManager[Any]"
@@ -533,7 +502,7 @@ async def _tool_handler_wrapper(
533502
span_mgr: "Union[Span, StreamedSpan]"
534503
if span_streaming:
535504
span_mgr = sentry_sdk.traces.start_span(
536-
name=span_name,
505+
name=f"tools/call {handler_name}",
537506
attributes={
538507
"sentry.op": OP.MCP_SERVER,
539508
"sentry.origin": MCPIntegration.origin,
@@ -542,7 +511,7 @@ async def _tool_handler_wrapper(
542511
else:
543512
span_mgr = get_start_span_function()(
544513
op=OP.MCP_SERVER,
545-
name=span_name,
514+
name=f"tools/call {handler_name}",
546515
origin=MCPIntegration.origin,
547516
)
548517

@@ -551,8 +520,8 @@ async def _tool_handler_wrapper(
551520
_set_span_input_data(
552521
span,
553522
handler_name,
554-
span_data_key,
555-
mcp_method_name,
523+
SPANDATA.MCP_TOOL_NAME,
524+
"tools/call",
556525
arguments,
557526
request_id,
558527
session_id,
@@ -574,7 +543,9 @@ async def _tool_handler_wrapper(
574543
sentry_sdk.capture_exception(e)
575544
raise
576545

577-
_set_span_output_data(span, result, result_data_key, "tool")
546+
_set_span_output_data(
547+
span, result, SPANDATA.MCP_TOOL_RESULT_CONTENT, "tool"
548+
)
578549

579550
return result
580551

@@ -619,10 +590,6 @@ async def _prompt_handler_wrapper(
619590
"prompt", original_args, original_kwargs
620591
)
621592

622-
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
623-
"prompt", handler_name
624-
)
625-
626593
scopes = _get_active_http_scopes(ctx=ctx)
627594

628595
isolation_scope_context: "ContextManager[Any]"
@@ -655,7 +622,7 @@ async def _prompt_handler_wrapper(
655622
span_mgr: "Union[Span, StreamedSpan]"
656623
if span_streaming:
657624
span_mgr = sentry_sdk.traces.start_span(
658-
name=span_name,
625+
name=f"prompts/get {handler_name}",
659626
attributes={
660627
"sentry.op": OP.MCP_SERVER,
661628
"sentry.origin": MCPIntegration.origin,
@@ -664,7 +631,7 @@ async def _prompt_handler_wrapper(
664631
else:
665632
span_mgr = get_start_span_function()(
666633
op=OP.MCP_SERVER,
667-
name=span_name,
634+
name=f"prompts/get {handler_name}",
668635
origin=MCPIntegration.origin,
669636
)
670637

@@ -673,8 +640,8 @@ async def _prompt_handler_wrapper(
673640
_set_span_input_data(
674641
span,
675642
handler_name,
676-
span_data_key,
677-
mcp_method_name,
643+
SPANDATA.MCP_PROMPT_NAME,
644+
"prompts/get",
678645
arguments,
679646
request_id,
680647
session_id,
@@ -694,7 +661,9 @@ async def _prompt_handler_wrapper(
694661
sentry_sdk.capture_exception(e)
695662
raise
696663

697-
_set_span_output_data(span, result, result_data_key, "prompt")
664+
_set_span_output_data(
665+
span, result, SPANDATA.MCP_PROMPT_RESULT_MESSAGE_CONTENT, "prompt"
666+
)
698667

699668
return result
700669

@@ -741,10 +710,6 @@ async def _resource_handler_wrapper(
741710
"resource", original_args, original_kwargs
742711
)
743712

744-
span_data_key, span_name, mcp_method_name, result_data_key = _get_span_config(
745-
"resource", handler_name
746-
)
747-
748713
scopes = _get_active_http_scopes(ctx=ctx)
749714

750715
isolation_scope_context: "ContextManager[Any]"
@@ -777,7 +742,7 @@ async def _resource_handler_wrapper(
777742
span_mgr: "Union[Span, StreamedSpan]"
778743
if span_streaming:
779744
span_mgr = sentry_sdk.traces.start_span(
780-
name=span_name,
745+
name=f"resources/read {handler_name}",
781746
attributes={
782747
"sentry.op": OP.MCP_SERVER,
783748
"sentry.origin": MCPIntegration.origin,
@@ -786,7 +751,7 @@ async def _resource_handler_wrapper(
786751
else:
787752
span_mgr = get_start_span_function()(
788753
op=OP.MCP_SERVER,
789-
name=span_name,
754+
name=f"resources/read {handler_name}",
790755
origin=MCPIntegration.origin,
791756
)
792757

@@ -795,8 +760,8 @@ async def _resource_handler_wrapper(
795760
_set_span_input_data(
796761
span,
797762
handler_name,
798-
span_data_key,
799-
mcp_method_name,
763+
SPANDATA.MCP_RESOURCE_URI,
764+
"resources/read",
800765
arguments,
801766
request_id,
802767
session_id,
@@ -835,7 +800,7 @@ async def _resource_handler_wrapper(
835800
sentry_sdk.capture_exception(e)
836801
raise
837802

838-
_set_span_output_data(span, result, result_data_key, "resource")
803+
_set_span_output_data(span, result, None, "resource")
839804

840805
return result
841806

0 commit comments

Comments
 (0)