diff --git a/src/fastmcp/client/mixins/resources.py b/src/fastmcp/client/mixins/resources.py index 5622f5bc4..3cc845d50 100644 --- a/src/fastmcp/client/mixins/resources.py +++ b/src/fastmcp/client/mixins/resources.py @@ -205,7 +205,7 @@ class ClientResourcesMixin: """ uri_str = str(uri) with client_span( - f"resources/read {uri_str}", + "resources/read", "resources/read", uri_str, session_id=self.transport.get_session_id(), diff --git a/src/fastmcp/server/providers/proxy.py b/src/fastmcp/server/providers/proxy.py index 2bb877c93..4876d7d30 100644 --- a/src/fastmcp/server/providers/proxy.py +++ b/src/fastmcp/server/providers/proxy.py @@ -238,7 +238,7 @@ class ProxyResource(Resource): backend_uri = self._backend_uri or str(self.uri) with client_span( - f"resources/read {backend_uri}", + "resources/read", "resources/read", backend_uri, resource_uri=backend_uri, diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index fd4cbdac0..74f8a3e71 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -1362,7 +1362,7 @@ class FastMCP( # Core logic: find and read resource (providers queried in parallel) with server_span( - f"resources/read {uri}", + "resources/read", "resources/read", self.name, "resource", diff --git a/tests/client/telemetry/test_client_tracing.py b/tests/client/telemetry/test_client_tracing.py index 8f5ae5316..54c4c08f3 100644 --- a/tests/client/telemetry/test_client_tracing.py +++ b/tests/client/telemetry/test_client_tracing.py @@ -128,8 +128,8 @@ class TestClientResourceTracing: spans = trace_exporter.get_finished_spans() span_names = [s.name for s in spans] - # Client should create "resources/read data://config" span - assert "resources/read data://config" in span_names + # Client should create "resources/read" span (URI in attributes, not name) + assert "resources/read" in span_names async def test_read_resource_span_attributes( self, trace_exporter: InMemorySpanExporter @@ -151,7 +151,7 @@ class TestClientResourceTracing: ( s for s in spans - if s.name.startswith("resources/read data://") + if s.name == "resources/read" and s.attributes is not None and "fastmcp.server.name" not in s.attributes ), @@ -420,7 +420,7 @@ class TestClientErrorTracing: ( s for s in spans - if s.name.startswith("resources/read data://fail") + if s.name == "resources/read" and s.attributes is not None and "fastmcp.server.name" not in s.attributes ), @@ -431,7 +431,7 @@ class TestClientErrorTracing: ( s for s in spans - if s.name.startswith("resources/read data://fail") + if s.name == "resources/read" and s.attributes is not None and "fastmcp.server.name" in s.attributes ), diff --git a/tests/server/telemetry/test_server_tracing.py b/tests/server/telemetry/test_server_tracing.py index 5abeb01b2..2b98ae6cc 100644 --- a/tests/server/telemetry/test_server_tracing.py +++ b/tests/server/telemetry/test_server_tracing.py @@ -104,7 +104,7 @@ class TestResourceTracing: assert len(spans) == 1 span = spans[0] - assert span.name == "resources/read config://app" + assert span.name == "resources/read" assert span.kind == SpanKind.SERVER assert span.attributes is not None # Standard MCP semantic conventions @@ -135,7 +135,7 @@ class TestResourceTracing: assert len(spans) == 1 span = spans[0] - assert span.name == "resources/read users://123/profile" + assert span.name == "resources/read" assert span.kind == SpanKind.SERVER assert span.attributes is not None # Standard MCP semantic conventions @@ -163,7 +163,7 @@ class TestResourceTracing: assert len(spans) == 1 span = spans[0] - assert span.name == "resources/read nonexistent://resource" + assert span.name == "resources/read" assert span.status.status_code == StatusCode.ERROR