Skip to content

Commit 9c0e57a

Browse files
committed
add rpc service name for MCP server
1 parent 51aaba9 commit 9c0e57a

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_aws_metric_attribute_generator.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
AWS_STEPFUNCTIONS_STATEMACHINE_ARN,
4242
)
4343
from amazon.opentelemetry.distro._aws_resource_attribute_configurator import get_service_attribute
44+
from amazon.opentelemetry.distro.instrumentation.mcp.semconv import MCPSpanAttributes
4445
from amazon.opentelemetry.distro._aws_span_processing_util import (
4546
LOCAL_ROOT,
4647
MAX_KEYWORD_LENGTH,
@@ -97,6 +98,7 @@
9798
_SERVER_SOCKET_PORT: str = SpanAttributes.SERVER_SOCKET_PORT
9899
_AWS_TABLE_NAMES: str = SpanAttributes.AWS_DYNAMODB_TABLE_NAMES
99100
_AWS_BUCKET_NAME: str = SpanAttributes.AWS_S3_BUCKET
101+
_MCP_METHOD_NAME: str = MCPSpanAttributes.MCP_METHOD_NAME
100102

101103
# Normalized remote service names for supported AWS services
102104
_NORMALIZED_DYNAMO_DB_SERVICE_NAME: str = "AWS::DynamoDB"
@@ -263,6 +265,9 @@ def _set_remote_service_and_operation(span: ReadableSpan, attributes: BoundedAtt
263265
elif is_key_present(span, _GRAPHQL_OPERATION_TYPE):
264266
remote_service = _GRAPHQL
265267
remote_operation = _get_remote_operation(span, _GRAPHQL_OPERATION_TYPE)
268+
elif is_key_present(span, _MCP_METHOD_NAME) and is_key_present(span, _RPC_SERVICE):
269+
remote_service = _normalize_remote_service_name(span, _get_remote_service(span, _RPC_SERVICE))
270+
remote_operation = _get_remote_operation(span, _MCP_METHOD_NAME)
266271

267272
# Peer service takes priority as RemoteService over everything but AWS Remote.
268273
if is_key_present(span, _PEER_SERVICE) and not is_key_present(span, AWS_REMOTE_SERVICE):

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/instrumentation/mcp/instrumentation.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,12 @@ async def async_wrapper():
108108
return await wrapped(*args, **kwargs)
109109

110110
request_id: Optional[int] = getattr(instance, "_request_id", None)
111-
span_name, span_kind = self._DEFAULT_SERVER_SPAN_NAME, SpanKind.SERVER
111+
span_name = self._DEFAULT_SERVER_SPAN_NAME
112+
span_kind = SpanKind.SERVER
112113

113114
if isinstance(message, (ClientRequest, ClientNotification)):
114-
span_name, span_kind = self._DEFAULT_CLIENT_SPAN_NAME, SpanKind.CLIENT
115+
span_name = self._DEFAULT_CLIENT_SPAN_NAME
116+
span_kind = SpanKind.CLIENT
115117

116118
message_json = message.model_dump(by_alias=True, mode="json", exclude_none=True)
117119

@@ -225,6 +227,7 @@ async def _wrap_server_message_handler(
225227
self._DEFAULT_SERVER_SPAN_NAME, kind=SpanKind.SERVER, context=parent_ctx
226228
) as server_span:
227229

230+
server_span.set_attribute(SpanAttributes.RPC_SERVICE, instance.name)
228231
self._generate_mcp_message_attrs(server_span, incoming_msg, request_id)
229232

230233
try:

0 commit comments

Comments
 (0)