OBSERVABILITY / CNCF Jaeger Project
Jaeger Telemetry MCP Server
In-tree Jaeger query service MCP server exposing OpenTelemetry distributed tracing queries over Streamable HTTP and SSE.
“Jaeger telemetry MCP server providing distributed tracing inspection tools directly from jaeger-query.”
01 / THE REASONING
Why this made the selection.
- Official CNCF OpenTelemetry tracing server exposing 9 dedicated read tools (search_traces, get_services, get_span_details, get_trace_errors, get_trace_topology, get_critical_path, get_dependencies) with zero write or mutation methods.
- Mounts natively on jaeger-query's mux under /api/ai/mcp/ via Streamable HTTP without requiring an external proxy or container shim.
- The pinned file is Jaeger's telemetry MCP adapter over an existing QueryService, served as streamable HTTP when a caller mounts the handler.
- Search results are summaries, and the topology tool omits span attributes, events, and links.
02 / THE REVIEW RECORD
What we actually inspected.
Source review has boundaries.
A clear record is more useful than a “safe” badge.
Material inspected
- cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/server.go
- cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/mcptools-config.go
- LICENSE
- 2026-10-14 reread of retained pinned setup/configuration evidence for the specific operational details added in this batch.
- cmd/jaeger/internal/extension/jaegerquery/internal/server.go
- cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/config.go
Our findings
- Source files declare Copyright (c) 2026 The Jaeger Authors, SPDX-License-Identifier: Apache-2.0.
- Tool handlers call in-process QueryService read methods directly and mount no file-write or mutating tools.
- Additional query-server integration mounts MCP whenever ai.mcp is configured, independently of ai.agent_url. The shared handler owns sessions and a five-minute idle timeout; stopping a client is not an authentication boundary.
- The tools wrap a QueryService and are exposed over streamable HTTP. NewHandler does not bind a listener; the caller mounts the handler.
- search_traces returns lightweight summaries without individual spans or attributes. get_trace_topology does not include attributes, events, or links.
- get_trace_errors may truncate to the server limit. read_skill serves embedded playbooks and is not a trace query.
Not established by this review
- Server compilation and live trace query RPCs were not run.
- Authentication bearer token forwarding was not tested.
- No authenticated session, installation, permission bypass or package-to-source parity test was performed.
- The server was not started and its tools were not called.
- A pin does not verify transitive dependencies.
The review applies to the material and revision named here. A newer upstream release can change its behavior.
03 / PUT IT TO WORK
Connect a server deliberately.
- Use a Jaeger build containing the reviewed query MCP integration and a configured trace store; no compatibility with the old 2.0.0 image is established here.
- Configure ai.mcp under the jaeger_query extension, then connect to the query-server base path plus /api/ai/mcp/.
- Protect the query endpoint and tenant identity, then begin with bounded trace search and progressively fetch details.
Before you start
- Docker or a compiled Jaeger v2 binary
- Active trace store containing OpenTelemetry span data
Documented configuration example
Use the client and authentication context described in the setup guidance. Configuration formats vary between hosts.
{
"mcpServers": {
"jaeger": {
"type": "http",
"url": "http://127.0.0.1:16686/api/ai/mcp/"
}
}
} 04 / FOLLOW THE EVIDENCE
The source trail.
Our notes are separate from the original resource.
Check upstream before adopting a new version.
https://github.com/jaegertracing/jaeger/blob/2dbe46862ac14ecfb3b1ea9f511f3d9a83ac7b0d/cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/server.go
Supports: summary, transports, whySelected, bestFor, limitations, install, configExample, access, review, compatibility
- Jaeger repository license ↗Checked
https://github.com/jaegertracing/jaeger/blob/2dbe46862ac14ecfb3b1ea9f511f3d9a83ac7b0d/LICENSE
Supports: license
https://github.com/jaegertracing/jaeger/blob/2dbe46862ac14ecfb3b1ea9f511f3d9a83ac7b0d/cmd/jaeger/internal/extension/jaegerquery/internal/server.go
Supports: summary, install, configExample, access, limitations, bestFor, review, compatibility, transports
https://github.com/jaegertracing/jaeger/blob/2dbe46862ac14ecfb3b1ea9f511f3d9a83ac7b0d/cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/config.go
Supports: summary, install, configExample, access, limitations, bestFor, review, compatibility, transports
https://github.com/jaegertracing/jaeger/blob/2dbe46862ac14ecfb3b1ea9f511f3d9a83ac7b0d/cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/server.go
Supports: summary, transports, whySelected, bestFor, limitations