diff --git a/.changesets/feat_trace_session_id.md b/.changesets/feat_trace_session_id.md new file mode 100644 index 00000000..35c10b2b --- /dev/null +++ b/.changesets/feat_trace_session_id.md @@ -0,0 +1,3 @@ +### feat: Add mcp-session-id header to HTTP request trace attributes - @swcollard PR #421 + +Includes the value of the [Mcp-Session-Id](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#session-management) HTTP header as an attribute of the trace for HTTP requests to the MCP Server \ No newline at end of file diff --git a/crates/apollo-mcp-server/src/server/states/starting.rs b/crates/apollo-mcp-server/src/server/states/starting.rs index c377da5a..681b8dec 100644 --- a/crates/apollo-mcp-server/src/server/states/starting.rs +++ b/crates/apollo-mcp-server/src/server/states/starting.rs @@ -222,6 +222,7 @@ impl Starting { "mcp_server", method = %request.method(), uri = %request.uri(), + session_id = tracing::field::Empty, status_code = tracing::field::Empty, ) }) @@ -229,7 +230,17 @@ impl Starting { |response: &axum::http::Response<_>, _latency: std::time::Duration, span: &tracing::Span| { - span.record("status", tracing::field::display(response.status())); + span.record( + "status_code", + tracing::field::display(response.status()), + ); + if let Some(session_id) = response + .headers() + .get("mcp-session-id") + .and_then(|v| v.to_str().ok()) + { + span.record("session_id", tracing::field::display(session_id)); + } }, ), );