← All AI Engineer talks

AI Engineer World's Fair 2025

The State of MCP Observability: Observable.tools — Alex Volkov and Benjamin Eckel, Weights & Biases and Dylibso

Read the talk

Tracing MCP Agents Across the Client–Server Boundary

MCP tools can hide the work behind an agent’s calls. OpenTelemetry context propagation connects those calls to server execution, while shared conventions make the resulting traces portable.

From a talk by Alex Volkov and Benjamin Eckel

Before you start: Familiarity with an AI agent calling tools through an MCP client and server is useful; the article introduces the tracing concepts it uses.

When adding tools makes an agent harder to observe

An agent works in production, but something goes wrong after it gains tools through MCP. Where did the failure happen: in the agent, in the tool call, or inside the remote server? Alex Volkov opens with this loss of visibility. Working on Weights & Biases’ Weave, he is accustomed to observing code he controls from end to end. Adding MCP capabilities pushes some of that execution beyond his instrumentation. Seeing the agent call a tool does not mean seeing what the tool does.

Benjamin Eckel, Dylibso’s co-founder and CTO, brings the perspective of mcp.run, which operates both MCP clients and servers. His team has assembled its own observability machinery, and he sees other teams independently solving the same problems. Each new integration can add another boundary that developers must instrument themselves.

Slide reading “MCPs are black boxes*” with the footnote “*for observability” over a dark blue background.
MCPs are black boxes—for observability.

That gap matters during an incident. Without knowing why, where, and how execution failed, a team has fewer ways to respond quickly. Eckel connects this to enterprise adoption: teams need to identify security and reliability problems before customers encounter them. MCP therefore needs to fit the observability platforms those teams already use.

0:330:58
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:33 · section reference included

A visible tool call can still hide its implementation

Volkov first demonstrates Weave’s MCP integration. The integration presented here is Python-based and assumes the developer controls both client and server. He highlights MCP_TRACE_LIST_OPERATIONS on both sides to include list operations, alongside visibility into MCP call durations. This flag is a list-tracing option within an instrumented application, not a complete setup recipe. In the displayed trace, arrows distinguish client traces from MCP tool calls, including a calculate-BMI tool.

Annotated Weave interface with pink arrows labeled “Client Traces,” turquoise arrows labeled “MCP tool calls,” and an inputs and output panel.
Weave’s trace view highlights client traces and MCP tool calls.

The apparent success immediately exposes the remaining problem: the calculate-BMI call is visible, but its internal work is not. A duration tells the developer how long the call took without explaining which server operation consumed that time or failed. The integration is also specific to Weave’s Python SDK, leaving portability unresolved.

The Observable Tools Manifesto grows out of that limitation. It is a coordination effort among observability providers and tool builders to make MCP observability standardized and vendor-neutral. The next step is to connect MCP with an existing observability standard rather than make every provider invent its own tracing system.

2:392:57
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

2:39 · section reference included

Traces, spans, and a portable destination

MCP-powered agents are distributed systems. Their work crosses process and service boundaries, so the tracing techniques used for other distributed applications apply here. Eckel introduces OpenTelemetry, or OTel, through its basic building blocks. A trace groups the steps of an operation into a tree of spans. Each span records a step’s duration and attributes; the step can be as broad as an HTTP request or as small as a function call.

In the checkout API example, span size represents duration and placement represents the call structure. This lets a developer inspect both the sequence of work and the time spent in each part. The trace turns one overall checkout duration into an account of the operations that produced it.

Those spans need a destination. Eckel calls this a sink: a centralized place to receive telemetry, often packaged with a UI, dashboards, monitoring, and alerting. The useful separation is between producing telemetry and choosing the platform that stores and displays it.

ComponentResponsibility
TraceGroup related work into one operation
SpanRecord a step’s duration and attributes
SinkReceive telemetry for inspection and monitoring

With standard instrumentation and export, changing the destination can largely become a configuration change. Application code need not be rewritten for each observability vendor. Volkov identifies Weave and Logfire among the LLM observability tools supporting OTel.

4:244:36
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

4:24 · section reference included

Following a fetch into the server

The checkout example becomes a distributed trace when the fraud service contributes its own spans. Exporting correlated spans to the same sink allows the platform to reconstruct the larger operation. The same principle applies when an agent calls an MCP server, but there is an additional question: who controls that server?

Eckel distinguishes two administrative domains, meaning ownership and operational control rather than DNS names or physical locations. A server hosted by GitHub or Stripe is outside the agent developer’s control. A server the developer owns in another data center can still be inside the same administrative domain.

Server relationshipVisibility available to the client developer
Third-party serverCall boundary; internals depend on provider cooperation
Owned, instrumented serverInternal spans can join the client’s trace

Consider the prompt, “Read and summarize the top article on Hacker News.” The agent reaches out to a remote fetch server, but when that server is outside the developer’s control, the displayed trace contains a single opaque service span.

If the developer owns the fetch server, its internal work can become visible. The server must produce spans, receive the caller’s trace context, and export its telemetry to the shared destination. A common sink alone is not enough: context propagation preserves the trace identifiers and parent relationships that let the sink connect the work. In Eckel’s illustrated fetch trace, HTTP requests take roughly 350 milliseconds, followed by processing to create Markdown. This is the timing of the example, not a benchmark for MCP.

6:176:33
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:17 · section reference included

Carrying context through MCP metadata

The TypeScript demonstration makes that connection through the MCP request’s _meta payload. When the client calls a tool, it captures the current span context and sends it with the request. The slide shows the context fields traceId, spanId, traceFlags, and isRemote: the identifying information needed to relate remote execution to the caller.

“Context Propagation” slide showing a client tool call with metadata containing traceId, spanId, traceFlags, and isRemote fields.
The client context-propagation example includes trace identifiers in tool-call metadata.

On the server, the receiving code extracts that context and uses it as the parent context for the server’s spans. For the Hacker News operation, the causal chain is:

  1. Capture the active context at the client’s fetch-tool call.
  2. Carry that context in the MCP request metadata.
  3. Extract it on the fetch server and establish the remote parent context.
  4. Create spans for server work under that context and export them to the sink.

The server’s HTTP and Markdown-processing work can then appear beneath the original call instead of as an unrelated trace.

This worked in Eckel’s demonstration, but it required a lower-level protocol interface rather than a convenient high-level SDK hook. His point is about the effort required at the time: developers should not have to work around SDK abstractions to preserve trace context. The working example he points to contains more setup than the slide, including the machinery needed to make the tracing flow run end to end.

8:148:24
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:14 · section reference included

Sending the TypeScript trace to Weave

The portability test is to take Eckel’s TypeScript agent and send its telemetry to Weave. The initial Weave integration was built into a Python SDK, but MCP does not require clients and servers to share a language, environment, or codebase. OTel extends that independence to the telemetry destination. Volkov reports adapting the TypeScript agent with little code change; the resulting Weave view shows green client traces alongside the work performed inside the server calls.

The export configuration has three responsibilities: choose Weave as the OTLP destination, authenticate the sender, and identify the destination project. Volkov gives wandb.ai/otel as the endpoint shorthand in the recording, then describes adding authorization headers and project routing. Treat that as the historical demonstration’s configuration, not a current executable endpoint; the maintained Weave OTLP guide is the setup reference. The architectural result is that the TypeScript agent can use Weave through a standard telemetry interface rather than the bespoke Python integration.

10:0210:16
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:02 · section reference included

A coding agent checks its own instrumentation

While adapting the agent, Volkov encounters a second use for MCP: giving the coding agent access to the observability system itself. He uses Claude Opus 4 to modify Eckel’s agent for Weave. The W&B MCP server, configured in his Windsurf environment, lets the coding agent inspect and summarize trace data. That creates a feedback loop between changing instrumentation and examining what it actually emits.

In Volkov’s account, the agent proceeds through a repair sequence:

  1. Modify the code and run it.
  2. Query Weave to check whether traces arrived.
  3. Discover that the traces exist but an input or output parameter is populated incorrectly.
  4. Find a support bot exposed through the MCP server and ask it for the missing information.
  5. Apply the guidance, then return to Weave to check the fix.

The documentation had not supplied the detail the agent needed. Instead of stopping at the malformed trace, it discovered another agent through a tool interface and used that interaction to continue the repair.

Volkov reports that he did not intervene at the keyboard during this sequence. The anecdote illustrates a useful role for observability in agent development: emitted telemetry can become feedback for the agent doing the implementation, not only a dashboard for the human reviewing it.

11:2311:32
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:23 · section reference included

Extending exports to profiles and tasks

Eckel then announces planned OTel exports from both sides of mcp.run’s offering:

  • Profiles: Combine selected capabilities from multiple MCP servers into a single virtual server.
  • Task: A single-prompt agent that can be triggered through a URL or a schedule and works with profiles.

Both are intended to export telemetry to OTel-compatible sinks, with Weave discussed as a destination. This is forthcoming support in the recording, distinct from the working context-propagation demonstration shown earlier.

13:1013:23
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

13:10 · section reference included

Making traces understandable across platforms

The remaining adoption problem is not whether MCP observability can work. The demonstrations show that it can. It is whether teams can obtain that visibility without becoming tracing experts. OTel provides much of the infrastructure, but convenient SDK instrumentation and shared conventions are still needed. AI engineers can start by examining whether their traces cover the full execution chain; tool builders can make that coverage easier to obtain through higher-level SDKs. Volkov cites Arize’s OpenInference as a starting point for that work.

Transporting attributes does not establish what those attributes mean. A span allows user-defined metadata, but a sink needs a common interpretation to recognize an HTTP request with status 200 or an MCP tool call that ended in an error. Semantic conventions provide that agreement. Without them, telemetry can arrive successfully while each platform still needs its own interpretation of the same operation.

Eckel points builders toward the OTel GenAI semantic-conventions effort and asks platform providers to add OTel support, review RFCs, and contribute implementation experience. These are complementary tasks: instrumentation creates the spans, context propagation connects them, and conventions make their contents understandable across platforms. The ecosystem work is to make those pieces cooperate as a routine part of building an MCP application.

The closing invitation is to learn from people implementing these systems. Volkov emphasizes the practical knowledge gained in conversations with other builders. Eckel invites attendees to try mcp.run, while Volkov points to Weave’s MCP tracing material and the Observable Tools manifesto. Those resources and conversations are ways to turn a working demonstration into tooling that other teams can use without rebuilding the same integration themselves.

14:0114:18
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:01 · section reference included

Resources

From the talk

Updates since the talk

Read the complete timestamped transcript
  1. 0:00

    [upbeat music] Hey, folks.

  2. 0:16

    Um, my name is Alex Volkov. I'm an AI evangelist with Weights & Biases.

  3. 0:20

    I'm Benjamin Eckel. I am co-founder, CTO of Dylibso. We're creators of [REDACTED:url]run.

  4. 0:26

    All right. And we're here to talk to you about MCP observability.

  5. 0:30

    Hey, Ben, I want to ask you a question.

  6. 0:32

    Yeah, sure.

  7. 0:33

    As somebody who worked at Datadog before and somebody who runs multiple MCP servers and, uh, clients on production, uh, something that happened-- advice that happened, something in my agent, uh, in production the other day.

  8. 0:44

    Okay. Uh, yeah, I mean, we've been running MCP clients and servers in production since the beginning. Uh, yeah, but wait, aren't you, like, working at an observability company, Weights & Biases?

  9. 0:55

    And don't you work on, like, what's it called? Weave?

  10. 0:58

    Yep, that's true. I, I work on Weave and-- but since I started adding some powers to my agent via MCP, all that observability that I'm used to from just having my own code run end-to-end has gone a little bit dark.

  11. 1:10

    Gotcha.

  12. 1:11

    So this is what we're here to talk to you guys about. Um, the rise of MCP is creating an observability blind spot. As AI agents become more, uh, prevalent, the problem can compound with more and more tools via MCPs, the less they, the developers can know about the end-to-end ha-happenings within their agent.

  13. 1:28

    Yeah. Um, yeah, so on [REDACTED:url]run, we're running both clients and servers, and because it's a new ecosystem, we've had to, like, cobble together a lot of our own ways to do observability.

  14. 1:38

    And I've been looking around, and it seems like everyone is sort of doing this in isolation. They're sort of solving the same problems. Um, so you know, we wanted to bring the community together on this issue.

  15. 1:48

    And so today we're gonna talk about the state of observability in the MCP ecosystem.

  16. 1:53

    Yep. So why do we care about this, and why do we think that you guys should care about this? So if you don't have the ability to quickly understand why things went wrong on production, where they went wrong, and how, your ability to quickly respond is greatly diminished.

  17. 2:06

    And we care deeply about-- We both build tools that need MCP observability, and we, we support MCP, and we both care deeply about developer experience as well.

  18. 2:16

    Yeah. It's, it's really important to me because enterprise engineering teams don't ship something to production unless they know for sure that they're gonna be able to identify security and reliability problems before their customers do.

  19. 2:27

    Um, and that's why they invest a ton of money in observability platforms. And, uh, so if you're gonna ship MCP to these production environments, you must seamlessly integrate with these ober-observability platforms.

  20. 2:39

    Yep. So because we care deeply about, uh, developer experience at, uh, W&B Weave, uh, I'm happy to announce here on stage that Weave supports [REDACTED:url] Yay. As long as you're a developer of both the client and the server, all you need to do is set this MCP_TRACE_LIST_OPERATIONS environment variable on your client and server, and, uh, we'll show

  21. 2:57

    you the, the list tool calls, and we'll show you the, the, the duration of your m-MCP calls. This works currently with our Python-based clients, and this is how it looks, super quick.

  22. 3:07

    With the red ar-ir-arrows, you can see the client traces, for example, and with the blue arrows, you can see we're pointing to the calculate BMI tool and, and the other tool, and that's it.

  23. 3:17

    Observability solved, right?

  24. 3:18

    Yeah.

  25. 3:18

    Let's, let's get off the stage. We're done.

  26. 3:19

    No, wait a second. [chuckles] So, uh, what about this, like, calculate BMI tool, this, uh, MCP server? Why can't I see into that?

  27. 3:27

    Um, you-- Yeah, we're working on this.

  28. 3:30

    Uh, yeah. Also, this seems like this is specific to Weave, right? Um, is there not, like, a vendor-neutral way to do this that's standardized?

  29. 3:37

    Yeah, that's right. Uh, this is a, uh, bespoke integration that we built into Weave, into our SDKs in Python. And while working on this, while our developers have been building this, like, um, integration within our MCP tooling, I was advocating internally and externally that sh- we should align with the open nature of MCP as a concept and

  30. 3:54

    created Observable.tools. Maybe some of you have seen this. This is a manifesto to drive a conversation that this is a problem that needs solving. And, uh, between observability providers, uh, such as us and other folks that's been on stage before and gonna be on the Evil Shark tomorrow, uh, to do observability in a vendor-neutral and standardized way.

  31. 4:13

    And so while working on Observable tools, I realized, I s-- I did some search, realized that a vendor-neutral, scalable way to add observability exists, uh, and there could be a great way to marry the two open protocols to work together.

  32. 4:24

    Yeah, exactly. Uh, fortunately, MCP-powered agents are really just another distributed system, and we've been doing that for decades. So OpenTelemetry is just the way that's, that we've, like, settled on doing that.

  33. 4:36

    Um, we're gonna talk about OTel a little bit. Uh, if you're not, uh, familiar with it, we need to learn about a few primitives first.

  34. 4:43

    So the main primitive that we need to learn about is the trace. So a trace is kind of like an atomic operation in your system. It's made up of a tree-like structure of steps that we call spans.

  35. 4:53

    And a span represents the duration and some arbitrary metadata for each step. And what this step is exactly is completely up to you to define. It can be as high level as, like, an HTTP request.

  36. 5:04

    It can be as low level as a tiny little function call. Um, here's an example of, like, a checkout experience, an API for a checkout. The size and position of each of these spans correspond to how long it took and where it sits in the call graph, respectively.

  37. 5:18

    And just from this data, you can tell a lot about a system and how to observe it.

  38. 5:23

    Um, the other primitive you need to be aware of is sinks. So a sink is kind of like a centralized database where all your telemetry goes. But often they come in the form of this, like, whole platform with, like, a UI and dashboards and alerting and monitoring and all those things.

  39. 5:37

    So there's a lot of logos here, Ben.

  40. 5:39

    Yeah.

  41. 5:39

    Uh, basically, a sink is an open standard way for folks like collectors to, like, receive those spans. As long as the developer instrumented their application code in a certain standard spec way, everybody can just receive those in, in the same unified way, right?

  42. 5:53

    Exactly, yeah. It's-- If you squint, it's just kind of like a bunch of databases that all support the same schema and wire protocol.

  43. 5:59

    And in fact-

  44. 5:59

    And you could switch them out

  45. 6:00

    ... and in fact, they don't have to change much of their code or even change the code at all.

  46. 6:04

    No, shouldn't need to.

  47. 6:04

    It could be just config, right?

  48. 6:05

    Right.

  49. 6:05

    Uh, by the way, LLM observability tools like W&B Weave and some friends, uh, Simon from Logpraw here, uh, before and some other friends, uh, all have switched to support OTel as well.

  50. 6:14

    OpenTelemetry is becoming, like, this global standard.

  51. 6:17

    Great. Uh, yeah, another great thing about having a centralized sink, uh, is the last concept, distributed tracing. So going back to our checkout endpoint, if the, uh, fraud service sends its span to the same sink, then we can stitch back to- together the traces and show the whole context.

  52. 6:33

    So maybe you're kinda seeing where the MCP server stuff comes in here.

  53. 6:36

    Yeah. So, hey, Ben, i- if it's possible via the o- integration to the open protocol, um, what if I want to use MCP servers that other people host, like GitHub, like Stripe, like other folks?

  54. 6:47

    Yeah, it's a good question. So, um, with MCP-enabled agents, or really just any distributed system, there are kind of two scenarios. There's when the client and server are in different domains, and then there's when they're in the same domain.

  55. 6:59

    And by domain here, I don't necessarily mean the literal definition. I just mean, like, the administration, administrative domain of control, right? Like, do, like, do you own this MCP server?

  56. 7:08

    Do you own this MCP client, or is it a third-party thing? So your GitHub Stripe example is, like, a great example of, like, the different domain scenario. So, um, this is a trace of an agent that is executing the prompt, "Read and summarize the top article on Hacker News."

  57. 7:25

    So it's gonna reach out to this, like, remote fetch server to read Hacker News. But it appears to us in the trace as a single service span because it's ou- it runs outside of our domain of control, so it appears to black box to us. [clears throat]

  58. 7:38

    Um, but suppose we do own the server, like maybe it's running in a da- different data center than the client. Um, how do we get actually the whole context?

  59. 7:46

    Uh, it's pretty simple. So with distributed tracing and context propagation, we can have the remote fetch server send its spans to the same sink as the client, and the sink will just stitch together the missing, uh, parts of the trace back for us.

  60. 7:59

    So in this graphic, you can see that we can now break into that fetch server, and we can see what it's doing. It's making some HTTP requests that's taking roughly three hundred fifty milliseconds, and then it's doing a little, uh, crunching to, to create some markdown.

  61. 8:14

    Okay, so that, that is great in theory, and we ran through this. We could have a whole hour talking about OTel, not that we got an hour. Uh, but how do we can actually marry those two protocols together, right?

  62. 8:24

    Uh, is there a standard way? Did the MCP spec folk deploy a way for us for observability?

  63. 8:29

    Um, not quite. It was, it was, uh, pretty tricky to get, to get working. Um, it does work today, but, uh, it required a little bit more work than it should have.

  64. 8:37

    So in order to do this, we need to, as I said, propagate the trace context from the client to the server. So here's a TypeScript example, and when we call a tool in the client, um, we're gonna extract our current span, and we're going to, uh, pass it along to the server.

  65. 8:54

    And we achieve this by basically just shuttling the data through the protocol's meta payload.

  66. 9:02

    And, uh, now that we're inside the server, uh, this would be like in the fetch server, we can pull that trace context out, inherit it as our current span, and then when we send our spans off to the sink, uh, it, it's as if it came from that parent span, and they-- the sink can stitch it back

  67. 9:18

    together.

  68. 9:18

    Ben, this is awesome. So you basically used an undocumented kind of property of the p- uh, sending the payload, together with the payload between clients and servers, um, to pass along the data that OTel needs to connect those things together, right?

  69. 9:31

    Yeah, sort of. I just kind of had to abuse the lower-level interface reserved for the protocol. But a higher level way should be provided through tooling, and that's something we should talk about a little bit later in the talk.

  70. 9:42

    Yep. And so-

  71. 9:45

    Oh, yeah. So by the way, this is, uh, this is not just, um, a screenshot. This is a, a working demo. So, um, it's a lot more code than what I showed in the slide.

  72. 9:54

    So if you wanna actually go see how this works and adapt this for your needs, uh, go check out this GitHub link. And I think actually you did that to, to get it to work with Weave, right?

  73. 10:02

    Yeah. So now that we know how to pass context after you, you, you showed me the way, uh, let's see how amazing the solution actually is in practice. While Weave MCP, the thing I showed you guys before, was a bespoke solution baked into our Python SDK for Weave.

  74. 10:16

    The huge benefit of MCP, generally, not only observability related, is that servers and clients don't have to run on the same environment or share the same code or be from the same programming language.

  75. 10:26

    So w- while we were working on the Python SDK, you built an agent in TypeScript.

  76. 10:30

    Mm-hmm.

  77. 10:30

    And so because W&Weave-- W&B Weave supports OTel, OpenTelemetry, and it's an open protocol, uh, your TypeScript agent, it took me a few minutes to-- by a f- without changing much code to just send those traces into Weave from a TypeScript agent and not necessarily from a Python agent.

  78. 10:46

    So here, uh, here you could see in the green the, the client traces are in the green, and then the server traces actually show what happens within those calls, uh,

  79. 10:57

    on kind of the, the server side as well.

  80. 11:00

    Yeah, that's really cool. So how did, how did you actually get the traces into Weave?

  81. 11:03

    So this is very, very simple, way simpler than before. Uh, we just define W&B Weave as the OTLP endpoint, a standard that you kind of, like, showed me around, uh, and then folks can send their traces into wandb.ai/otel.

  82. 11:15

    And all you need to do in addition to this is authorize. So add authorization headers and specify which project you wanna go into.

  83. 11:23

    Cool.

  84. 11:23

    Yep. So while we talk to you about observability, while I was working on this, I had a magic moment happening with [REDACTED:url] I wanted to share this with everybody and-

  85. 11:30

    Yeah, okay. I love a good-

  86. 11:30

    -with you as well

  87. 11:31

    ... MCP story.

  88. 11:32

    Yeah. So, um, I used Claude Opus four that just came out to Weave-ify your agent that you built-

  89. 11:39

    Yeah

  90. 11:39

    ... and to add this, uh, uh, MCP observability. And W&B Weave is gonna get a little meta, stay with us, uh, also has an MCP server.

  91. 11:47

    Okay, what, what does it do?

  92. 11:48

    So we have an MCP server that lets your agents or, or chats, et cetera, talk to your traces and see the data and summarize the data for you. Okay, so we have this [REDACTED:url]

  93. 11:56

    It's been configured in my Windsurf, uh, and, and Clau- uh, Code, uh, Opus four [laughs] uh, was able to use this MCP server to kind of work through it. So here you see an example.

  94. 12:06

    Um, the agent basically started working on your code, and then decided, "Okay, I'm gonna run the code," and then said, "Okay, I'm gonna go and actually see if the traces showed up at, at W&B Weave."

  95. 12:18

    Then it noticed that they showed up, but they showed up incorrectly. So some input or output, a specific parameter that it needed to do, it didn't know how to do.

  96. 12:25

    It wasn't part of the documentation. And so, uh, the next moment just absolutely blew my mind. This Opus-4 discovered that our MCP server exposes a support bot. So essentially another agent, uh, decided to write a query for it, uh, received the, the right information after a while, and acted upon this information, learned how to fix the thing

  97. 12:46

    that it needed to fix, fixed it, and then went back to Weave and, uh, uh, to notice whether or not the fix was correct. So my, um, [laughs] my coding agent talked to another agent via support via MCP that it discovered on its own.

  98. 12:59

    I didn't even know that this ability exists to work on your coding agent in, in things. Things got a little bit meta, and my head was like absolute... I was sitting like this while all this happened.

  99. 13:08

    Didn't touch the keyboard once.

  100. 13:10

    That's awesome. Yeah. It's pretty meta. Uh, yeah, before we go, I also wanted to have, uh, take a moment to have an announcement. So, um, mcp run will also be exporting telemetry to O- OTel compatible sinks.

  101. 13:23

    Um, so as I mentioned before, we run both servers and clients. Uh, so for servers, we have this concept called profiles, and these allow you to, like, slice and dice multiple MCP servers into one single virtual server.

  102. 13:37

    And on, on, uh, we also have the, an MCP client called Task, and this is like a single prompt agent that can be triggered via URL or a schedule, and it also just sort of marries with the idea of profiles.

  103. 13:50

    Um, but yeah, soon you'll be able to get OTel out of both of these and hopefully, you know, we'll, uh, connect up to Weights & Biases and have a little party.

  104. 13:57

    Yeah. You can send those to Weave straight from [REDACTED:url]run.

  105. 14:01

    Okay. So, uh, to recap, um, observability is here at, in MCP today, but it's not evenly distributed. Uh, OTel should get you most of the way there, but the community needs to come together, uh, create, creating tooling and conventions to make it smoother.

  106. 14:18

    Um, you shouldn't need to be an expert in observability to, like, get this stuff working.

  107. 14:24

    So how do you get involved? Well, AI engineers, just start thinking about observability via MCP tooling and whether or not you're getting, uh, observability to the end-to-end of, of your execution chain.

  108. 14:36

    Um, for tool builders and, uh, platform providers, we should join and work on higher level SDKs. So, uh, Arize's open inference, for example, is a great start, but all of us should help with the instrumentation for our clients who use bespoke SDKs to work on conventions also together.

  109. 14:51

    Ben, can you explain semantic conventions super quick?

  110. 14:54

    Yeah, sure. So as we learned earlier, um, spans, they carry user-defined attributes, right? So if they're user-defined, how does the sink know that a span is actually, say, an HTTP request with a 200 status code?

  111. 15:07

    Or how does it know that it's an MCP tool call that has an error? Um, that's where semantic co- conventions come in. Um, and you can be a part of defining what the conventions are for agents that all observability platforms agree on.

  112. 15:22

    And if you're interested in this, I would suggest going to check out the, uh, GenAI semantic conventions effort by the OTel team. And, um, yeah, lastly, for platform builders such as mcp run, um, you know, go add OTel support, help review RFCs, and finally, yeah, just come, like, talk to us about ideas because we're just...

  113. 15:42

    Everything's just kinda coming together. Everything's so new and fresh, and we don't really know exactly what to do.

  114. 15:46

    There's an additional track here at, at, uh, AI Engineer that's called the hallway track, and I've learned more about-

  115. 15:52

    Oh, okay. [laughs]

  116. 15:52

    ... the stuff that we're talking about, uh, out there-

  117. 15:54

    Heard of that

  118. 15:55

    ... by actually talking to people who implement this than I learned while preparing, uh, before this talk. It's quite incredible. So, um, and Ben?

  119. 16:02

    Yeah, sure. Um, yeah, so again, I'm Ben. Uh, my call to action here would just be go check out mcp run. You can get a free account, try it out.

  120. 16:12

    Uh, yeah, that's it.

  121. 16:13

    And I'm Alex. Uh, uh, check out W&B Weave MCP OP to learn how to trace MCP, uh, with OTel. Uh, I'm also... I did the Observable Tools Initiative. I would love for you to check out the manifesto to see if this resonates with you, to join forces to talk about observability.

  122. 16:29

    And, uh, we, uh, yeah, pl- please visit us at the booth. We have some very interesting surprises for you. We have a robotic dog right here, uh, that's observable.

  123. 16:36

    I also run the ThursdAI podcast. I wanna send Swix a huge, huge shout-out for, uh, having, uh, uh, giving me the support to show up here and give... If you guys are interested in AI news, we're gonna record a, an episode tomorrow.

  124. 16:49

    That's it. Thank you so much. [outro music]