Skip to content

Commit 19b88f7

Browse files
authored
Merge pull request #242 from buildkite/fix/trace-tool-name-and-otel-service-name
fix(trace): restore mcp.tool_name span attribute and fix OTel service name
2 parents 3852532 + cc9de63 commit 19b88f7

3 files changed

Lines changed: 9 additions & 4 deletions

File tree

pkg/trace/middleware.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ func NewMiddleware() mcp.Middleware {
2222
attribute.String("mcp.session_id", sessionID),
2323
}
2424

25+
if params, ok := req.GetParams().(*mcp.CallToolParamsRaw); ok && params != nil {
26+
attrs = append(attrs, attribute.String("mcp.tool_name", params.Name))
27+
}
28+
2529
var clientName, clientVersion string
2630
if ss, ok := req.GetSession().(*mcp.ServerSession); ok {
2731
if ip := ss.InitializeParams(); ip != nil && ip.ClientInfo != nil && ip.ClientInfo.Name != "" {

pkg/trace/middleware_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func TestNewMiddleware(t *testing.T) {
8080
assert.Contains(attrs, "mcp.session_id", "mcp.session_id attribute should be set")
8181
assert.Equal("test-client", attrs["mcp.client.name"], "mcp.client.name should be captured from initialize handshake")
8282
assert.Equal("v0.0.1", attrs["mcp.client.version"], "mcp.client.version should be captured from initialize handshake")
83+
assert.Equal("ping", attrs["mcp.tool_name"], "mcp.tool_name should be set for tools/call requests")
8384
}
8485

8586
func TestNewMiddlewareHTTP(t *testing.T) {
@@ -109,4 +110,5 @@ func TestNewMiddlewareHTTP(t *testing.T) {
109110
assert.NotEmpty(attrs["mcp.session_id"], "mcp.session_id should be non-empty over HTTP transport")
110111
assert.Equal("test-client", attrs["mcp.client.name"], "mcp.client.name should be captured from initialize handshake")
111112
assert.Equal("v0.0.1", attrs["mcp.client.version"], "mcp.client.version should be captured from initialize handshake")
113+
assert.Equal("ping", attrs["mcp.tool_name"], "mcp.tool_name should be set for tools/call requests")
112114
}

pkg/trace/trace.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import (
1818
"go.opentelemetry.io/otel/trace"
1919
)
2020

21-
// set a default tracer name
22-
var tracerName = "buildkite-mcp-server"
21+
// tracerName is the instrumentation library name, fixed for this package.
22+
const tracerName = "buildkite-mcp-server"
2323

2424
func NewProvider(ctx context.Context, exporter, name, version string) (*sdktrace.TracerProvider, error) {
2525
exp, err := newExporter(ctx, exporter)
@@ -45,8 +45,6 @@ func NewProvider(ctx context.Context, exporter, name, version string) (*sdktrace
4545
),
4646
)
4747

48-
tracerName = name
49-
5048
return tp, nil
5149
}
5250

@@ -100,6 +98,7 @@ func newResource(cxt context.Context, name, version string) (*resource.Resource,
10098
options = append(options, resource.WithHost())
10199
options = append(options, resource.WithFromEnv())
102100
options = append(options, resource.WithAttributes(
101+
semconv.ServiceNameKey.String(name),
103102
semconv.TelemetrySDKNameKey.String("otelconfig"),
104103
semconv.TelemetrySDKLanguageGo,
105104
semconv.TelemetrySDKVersionKey.String(version),

0 commit comments

Comments
 (0)