Skip to content

Commit b54c22a

Browse files
authored
fix(mcp): do not override meta pydantic types (#3179)
1 parent cfe309d commit b54c22a

File tree

1 file changed

+11
-20
lines changed
  • packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp

1 file changed

+11
-20
lines changed

packages/opentelemetry-instrumentation-mcp/opentelemetry/instrumentation/mcp/instrumentation.py

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
from opentelemetry import context, propagate
1111
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
1212
from opentelemetry.instrumentation.utils import unwrap
13-
from opentelemetry.trace import get_tracer
13+
from opentelemetry.trace import get_tracer, Tracer
1414
from wrapt import ObjectProxy, register_post_import_hook, wrap_function_wrapper
1515
from opentelemetry.trace.status import Status, StatusCode
1616
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
17-
from opentelemetry.trace.propagation import set_span_in_context
1817
from opentelemetry.semconv_ai import SpanAttributes
1918
from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
2019

@@ -159,38 +158,30 @@ def traced_method(
159158

160159
return traced_method
161160

162-
def patch_mcp_client(self, tracer):
161+
def patch_mcp_client(self, tracer: Tracer):
163162
@dont_throw
164163
async def traced_method(wrapped, instance, args, kwargs):
165-
import mcp.types
166-
167-
if len(args) < 1:
168-
return
169164
meta = None
170165
method = None
171166
params = None
172-
if hasattr(args[0].root, "method"):
167+
if len(args) > 0 and hasattr(args[0].root, "method"):
173168
method = args[0].root.method
174-
if hasattr(args[0].root, "params"):
169+
if len(args) > 0 and hasattr(args[0].root, "params"):
175170
params = args[0].root.params
176-
if params is None:
177-
args[0].root.params = mcp.types.RequestParams()
178-
meta = mcp.types.RequestParams.Meta()
179-
else:
171+
if params:
180172
if hasattr(args[0].root.params, "meta"):
181173
meta = args[0].root.params.meta
182-
if meta is None:
183-
meta = mcp.types.RequestParams.Meta()
184174

185175
with tracer.start_as_current_span(f"{method}.mcp") as span:
186176
span.set_attribute(
187177
SpanAttributes.TRACELOOP_ENTITY_INPUT, f"{serialize(args[0])}"
188178
)
189-
ctx = set_span_in_context(span)
190-
parent_span = {}
191-
TraceContextTextMapPropagator().inject(parent_span, ctx)
192-
meta.traceparent = parent_span["traceparent"]
193-
args[0].root.params.meta = meta
179+
180+
if meta and len(args) > 0:
181+
carrier = {}
182+
TraceContextTextMapPropagator().inject(carrier)
183+
meta.traceparent = carrier["traceparent"]
184+
args[0].root.params.meta = meta
194185
try:
195186
result = await wrapped(*args, **kwargs)
196187
span.set_attribute(

0 commit comments

Comments
 (0)