Skip to main content
Glama
mshegolev

jaeger-mcp

by mshegolev

jaeger-mcp

PyPI version Python versions License: MIT Tests

MCP server for Jaeger distributed tracing. Give Claude (or any MCP-capable agent) read access to your trace data — search traces, inspect spans, compare traces, compute span statistics, map service dependencies, predict performance issues, and forecast capacity needs — without leaving the conversation.

Why another Jaeger MCP?

The existing Jaeger integrations require a running UI or custom scripts. This server:

  • Speaks the standard Model Context Protocol over stdio — works with Claude Desktop, Claude Code, Cursor, and any MCP client.

  • Is read-only: all 15 tools carry readOnlyHint: true — zero risk of modifying trace data.

  • Returns dual-channel output: structured JSON (structuredContent) for programmatic use + Markdown (content) for human-readable display.

  • Has actionable error messages that name the exact env var to fix and suggest a next step.

  • Supports Bearer token, HTTP Basic auth, or no auth (common for internal deployments).

  • Includes OpenAPI specification documenting the underlying Jaeger Query API (openapi.yaml).

Related MCP server: Kubernetes + Prometheus SRE MCP Server

Tools

Tool

Endpoint

Description

jaeger_list_services

GET /api/services

List all instrumented services

jaeger_list_operations

GET /api/services/{service}/operations

List operation names for a service

jaeger_search_traces

GET /api/traces

Search traces with rich filters

jaeger_get_trace

GET /api/traces/{traceID}

Full trace detail with span tree

jaeger_get_dependencies

GET /api/dependencies

Service-to-service call graph

jaeger_compare_traces

GET /api/traces/{traceID} ×2

Structural diff between two traces

jaeger_span_statistics

GET /api/traces

Per-operation latency and error stats

jaeger_critical_path

GET /api/traces/{traceID}

Longest-duration span chain and bottleneck ranking

jaeger_compare_windows

GET /api/traces ×2

Aggregate trace behavior diff between two time periods

jaeger_detect_anomalies

GET /api/traces ×2

Statistical latency/error-rate spike detection per operation

jaeger_predict_degradation

GET /api/traces

Predict performance degradation 2-24 hours in advance

jaeger_forecast_capacity

GET /api/traces

Forecast throughput demands and resource requirements

jaeger_find_test_traces

GET /api/traces

Correlate a test run to its traces by tag query (Allure/pytest/custom)

jaeger_regression_diff

GET /api/traces ×2

Classify per-operation regressions between two time windows

jaeger_test_profile

GET /api/traces

Per-operation latency hotspots for a tagged test run

Installation

pip install jaeger-mcp

Or run directly without installing:

uvx jaeger-mcp

Configuration

All configuration is via environment variables:

Variable

Required

Default

Description

JAEGER_URL

Yes

Jaeger query service URL, e.g. https://jaeger.example.com

JAEGER_TOKEN

No

Bearer token (takes precedence over Basic auth)

JAEGER_USERNAME

No

HTTP Basic auth username

JAEGER_PASSWORD

No

HTTP Basic auth password

JAEGER_SSL_VERIFY

No

true

Set false for self-signed certificates

JAEGER_TIMEOUT

No

30

HTTP request timeout in seconds

JAEGER_RETRY_ATTEMPTS

No

3

Retry count for transient failures (0 to disable)

JAEGER_CACHE_TTL

No

120

TTL in seconds for discovery endpoint cache (0 to disable)

Copy .env.example to .env and fill in your values.

Claude Desktop / Claude Code setup

Add to your MCP config (claude_desktop_config.json or .claude/mcp.json):

{
  "mcpServers": {
    "jaeger": {
      "command": "jaeger-mcp",
      "env": {
        "JAEGER_URL": "https://jaeger.example.com",
        "JAEGER_TOKEN": "your-token-here"
      }
    }
  }
}

Or with uvx (no install required):

{
  "mcpServers": {
    "jaeger": {
      "command": "uvx",
      "args": ["jaeger-mcp"],
      "env": {
        "JAEGER_URL": "https://jaeger.example.com"
      }
    }
  }
}

Docker

docker run --rm -e JAEGER_URL=https://jaeger.example.com jaeger-mcp

Example queries

Once configured, ask Claude:

  • "What services does Jaeger know about?"

  • "Find traces with HTTP 500 errors in order-service from the last hour"

  • "Show me the slowest traces (over 2 seconds) for GET /checkout"

  • "What caused the error in trace abcdef1234567890?"

  • "Map the service dependency graph for the last 7 days"

  • "Which services call postgres most frequently?"

  • "Compare trace abc123 against trace def456 — what spans changed?"

  • "What are the p95 latencies per operation in order-service?"

Tool usage guide

jaeger_list_services

Returns all service names Jaeger has seen. Start here when you don't know which services are instrumented. Output is capped at 500 services with a truncation hint.

jaeger_list_operations

Returns all operation names for a given service (e.g. HTTP route names, gRPC method names). Use to discover valid operation names before filtering jaeger_search_traces.

jaeger_search_traces

The main search tool. Filters:

  • service (required) — service name from jaeger_list_services

  • operation — narrow to a specific endpoint

  • tags — JSON string of tag filters, e.g. {"http.status_code":"500"} or {"error":"true"}

  • start / end — time range in microseconds UTC

  • min_duration / max_duration — duration strings like "100ms", "1.5s", "2m"

  • limit — default 20, max 1500

Returns trace summaries with trace_id, duration_us, span_count, service_count, root_operation, errors_count.

jaeger_get_trace

Full trace detail. Accepts a trace_id (hex string, 16-32 chars) and returns:

  • All spans with tags, service names, parent/child relationships

  • Per-service statistics (span count, total duration, error count)

  • Execution tree (each node lists its child span IDs)

Error spans are identified by tags["error"] = "true".

jaeger_get_dependencies

Service topology graph. Returns directed edges (parent → child) with call_count. Use lookback_hours (default 24, max 720) to control the window.

jaeger_compare_traces

Structural diff between two traces. Accepts two trace_id hex strings and matches spans by (operationName, serviceName, parentOperation) — not span ID. Reports:

  • Added spans — present in trace B but not trace A

  • Removed spans — present in trace A but not trace B

  • Changed spans — matched but differ in duration or tags (shows deltas)

  • Unchanged count — number of identical spans

Use to compare a slow trace against a fast one, or to see what changed between deployments.

jaeger_span_statistics

Per-operation latency percentiles and error rates. Fetches up to limit traces (default 20, max 100) for a service and aggregates all spans by operation name. Reports per operation:

  • count — total spans observed

  • p50_duration_us, p95_duration_us, p99_duration_us — latency percentiles

  • error_count, error_rate — errors (identified by tags["error"] = "true")

Use to find the slowest or most error-prone operations in a service.

jaeger_critical_path

Identifies the longest-duration span chain from root to leaf in a trace (the critical path) and ranks spans by self-time to find performance bottlenecks.

Reports:

  • Critical path spans with operation, service, duration, and percentage-of-total

  • Bottleneck spans ranked by exclusive duration (self-time)

Use to answer "Why is this trace so slow?" and "Which operations consume the most CPU/self-time?"

jaeger_compare_windows

Compares aggregate trace behavior between two time periods for a service to detect performance regressions or improvements across deployments.

Reports:

  • Per-operation diff summary showing added, removed, faster, slower operations

  • Deviation scoring with numeric scores per operation and overall

  • Latency percentile changes (p50, p95) and error rate deltas

Use to answer "Did our latest deployment affect performance?" and "Which operations got slower after the database upgrade?"

jaeger_detect_anomalies

Scans for statistically significant latency spikes or error-rate increases in a service's recent traces compared to historical baselines.

Reports:

  • Flagged operations with anomaly type (latency or error_rate)

  • Severity classification (low to critical) with z-scores

  • Current vs baseline values for affected metrics

Use to proactively identify performance degradations and reliability issues before they impact users.

Library facade (in-process use)

jaeger-mcp can also be used as a Python library without an MCP server:

from jaeger_mcp import JaegerClient

client = JaegerClient.from_env()  # reads JAEGER_URL from env
trace = client.get_trace("abcdef1234567890abcdef1234567890")

for span in trace.spans:
    if span.error:
        print(f"{span.service_name}: {span.operation} at {span.start_utc}")
        print(f"  tags: {span.tags}")

Available methods: get_trace(), search_traces(), list_services(), get_dependencies(), compare_traces(), span_statistics(), critical_path(), compare_windows(), detect_anomalies(), predict_degradation(), forecast_capacity(), find_test_traces(), regression_diff(), test_profile().

Domain objects: Span, Trace, TraceSummary, ServiceDep, TraceComparison, SpanIdentity, SpanChange, SpanStatisticsResult, OperationStatResult, CriticalPathOutput, CriticalPathSpan, BottleneckSpan, WindowComparisonOutput, OperationDiff, AnomalyDetectionOutput, OperationAnomaly — all with typed fields.

API Documentation

This project includes comprehensive OpenAPI specifications in the docs/ directory:

  1. Jaeger Query Service API (openapi.yaml) - Documents the actual Jaeger API endpoints

  2. MCP Tools API (docs/mcp-tools-openapi.yaml) - Documents the MCP tools as conceptual HTTP endpoints

These specifications are useful for:

  • Understanding the underlying API calls made by each tool

  • Developing alternative integrations

  • Debugging API interactions

  • Generating client libraries or documentation

See docs/README.md for more details on both specifications.

Performance characteristics

  • All tools use a single persistent requests.Session with connection pooling.

  • The session has trust_env = False to bypass environment proxies (Jaeger is typically an internal service).

  • Requests time out after 30 seconds (configurable via JAEGER_TIMEOUT).

  • Transient HTTP errors (429/5xx) are retried with exponential backoff (configurable via JAEGER_RETRY_ATTEMPTS).

  • list_services and list_operations responses are cached for 120 seconds (configurable via JAEGER_CACHE_TTL).

  • jaeger_search_traces passes limit directly to Jaeger — avoid requesting more traces than needed.

  • jaeger_get_trace fetches the full trace in one call — large traces (thousands of spans) may be slow.

  • jaeger_get_dependencies aggregates over the full lookback window; large windows may be slow on busy clusters.

Development

git clone https://github.com/mshegolev/jaeger-mcp
cd jaeger-mcp
pip install -e '.[dev]'
pytest tests/ -v
ruff check src tests
ruff format src tests

License

MIT — see LICENSE.

Available Tools

15 tools
jaeger_compare_tracesA
Read-onlyIdempotent

Compare two traces structurally — find added, removed, and changed spans.

Fetches both traces from Jaeger and performs a structural diff by matching spans on (operationName, serviceName, parentOperation) — not span IDs, which differ across traces. Reports duration deltas and tag differences for changed spans.

Examples: - Use when: "What changed between a fast and slow request?" → pass the trace IDs of both requests; inspect changed_spans for duration deltas. - Use when: "Did a deployment add new service calls?" → compare a pre-deploy trace with a post-deploy trace; check added_spans for new operations. - Use when: "Are these two traces structurally identical?" → if added_spans, removed_spans, and changed_spans are all empty, the traces have the same structure. - Don't use when: You want aggregate statistics across many traces (use jaeger_span_statistics instead, once available). - Don't use when: You only have one trace — use jaeger_get_trace for single-trace inspection.

Returns: dict with trace_id_a / trace_id_b / added_spans / removed_spans / changed_spans (with duration + tag deltas) / unchanged_count.

ParametersJSON Schema
NameRequiredDescriptionDefault
trace_id_aYesFirst trace ID (baseline) as a hex string (16 or 32 hex chars). Obtain from jaeger_search_traces.
trace_id_bYesSecond trace ID (comparison) as a hex string (16 or 32 hex chars). Obtain from jaeger_search_traces.

Output Schema

ParametersJSON Schema
NameRequiredDescription
trace_id_aYes
trace_id_bYes
added_spansYes
changed_spansYes
removed_spansYes
unchanged_countYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false. The description adds behavioral details: it fetches traces, matches on (operationName, serviceName, parentOperation), and reports duration/tag deltas, providing transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with examples and a returns section; front-loaded purpose. Every sentence is useful, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given tool complexity, output schema existence, and rich annotations, the description fully covers matching logic, use cases, and return structure, leaving no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds value by mentioning 'Obtain from jaeger_search_traces' and context on hex format, slightly improving over the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Compare two traces structurally — find added, removed, and changed spans.' It uses specific verbs and resources, and distinguishes from sibling tools by explicitly contrasting with aggregate statistics and single-trace inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples (e.g., 'What changed between a fast and slow request?') and when-not-to-use with alternatives (e.g., 'use jaeger_get_trace'), giving clear context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_compare_windowsA
Read-onlyIdempotent

Compare aggregate trace behavior between two time periods for a service.

Fetches traces from both time windows, aggregates span statistics per operation, then compares the aggregate behavior to detect performance changes.

Examples: - Use when: "Did our latest deployment affect performance?" → compare pre-deploy and post-deploy time windows for the service. - Use when: "Which operations got slower after the database upgrade?" → check the comparison_p95_us and p95_delta_pct columns for increases. - Use when: "Are we seeing new error patterns?" → look for operations with increased error_rate_delta. - Use when: "Did we add or remove any API endpoints?" → check added_count and removed_count in the summary. - Don't use when: You want to compare two specific traces (use jaeger_compare_traces instead). - Don't use when: You want full span detail for a single trace (use jaeger_get_trace instead).

Returns: WindowComparisonOutput with per-operation diffs and summary statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum traces to fetch per window (default 100).
serviceYesService name to compare across time windows.
operationNoOptional operation name filter.
baseline_endYesBaseline window end time (Unix timestamp in microseconds).
baseline_startYesBaseline window start time (Unix timestamp in microseconds).
comparison_endYesComparison window end time (Unix timestamp in microseconds).
comparison_startYesComparison window start time (Unix timestamp in microseconds).

Output Schema

ParametersJSON Schema
NameRequiredDescription
serviceYes
operationsYes
added_countYes
baseline_endYes
faster_countYes
slower_countYes
removed_countYes
baseline_startYes
comparison_endYes
comparison_startYes
total_operationsYes
overall_deviation_scoreYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds context about fetching traces, aggregating per operation, and comparing, without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured: purpose sentence, what it does, bullet-pointed usage scenarios, and exclusions. Front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 params (5 required), 100% schema coverage, output schema present, and rich annotations, the description covers all necessary context without gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning through usage examples that implicitly reference parameters (e.g., pre/post-deploy windows), though it doesn't describe each parameter explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: compare aggregate trace behavior between two time periods for a service. It uses specific verbs and distinguishes from siblings like jaeger_compare_traces and jaeger_get_trace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use (e.g., deployment impact, database upgrade) and when not to use (specific trace comparison, full span detail), with alternative sibling tools mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_critical_pathA
Read-onlyIdempotent

Identify the critical path and top bottlenecks in a trace.

Finds the longest-duration span chain (critical path) from root to leaf, and ranks spans by self-time to find actual performance bottlenecks.

Examples: - Use when: "Why is this trace so slow?" → call with the slow trace ID; examine the critical_path_duration_us and critical_path_percentage to see how much of the total time is spent on the longest path. - Use when: "Which operations are consuming the most CPU/self-time?" → check the bottlenecks list sorted by self_time_us descending. - Use when: Debugging performance regressions — compare critical path percentages before/after changes. - Don't use when: You want aggregate statistics across many traces (use jaeger_span_statistics for that). - Don't use when: You need to compare two traces structurally (use jaeger_compare_traces for that).

Returns: dict with trace metadata, critical path spans, and bottleneck ranking.

ParametersJSON Schema
NameRequiredDescriptionDefault
trace_idYesTrace ID as a hex string (16 or 32 hex chars). Obtain from jaeger_search_traces.

Output Schema

ParametersJSON Schema
NameRequiredDescription
trace_idYes
bottlenecksYes
critical_pathYes
root_operationYes
bottleneck_countYes
total_duration_usYes
critical_path_percentageYes
critical_path_duration_usYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable context: it finds the longest-duration span chain, ranks spans by self-time, and returns a dict with trace metadata, critical path spans, and bottleneck ranking. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the purpose, and structured with bullet points for usage examples, non-usage cases, and return value. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, single parameter, existing output schema, and thorough annotations, the description is complete enough for an agent to understand when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single trace_id parameter, which is well-described in the schema. The tool description adds no extra parameter information beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool identifies the critical path and top bottlenecks in a trace. It distinguishes from siblings by explicitly noting when not to use (e.g., for aggregate statistics or comparing traces) and naming alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Multiple 'Use when' examples are provided, each with a clear scenario and expected action. 'Don't use when' cases specify alternative sibling tools (jaeger_span_statistics, jaeger_compare_traces), offering explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_detect_anomaliesA
Read-onlyIdempotent

Detect latency and error-rate anomalies for a service by comparing recent behavior to historical baseline.

Fetches traces from a historical baseline window and a recent observation window, computes per-operation statistics for both, then identifies statistically significant deviations that may indicate performance issues or reliability problems.

Examples: - Use when: "Are there any new performance issues in order-service?" → service='order-service' (uses default 60-minute baseline, 5-minute current). - Use when: "Be more sensitive to subtle changes" → set sensitivity=1.5 (lower threshold). - Use when: "Check for issues over the last 24 hours against previous week" → baseline_duration_minutes=10080, current_duration_minutes=1440. - Don't use when: You want to compare two specific time periods (use jaeger_compare_windows instead). - Don't use when: You want full span detail for a single trace (use jaeger_get_trace instead).

Returns: AnomalyDetectionOutput with flagged operations and severity scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesService name to detect anomalies for.
sensitivityNoAnomaly sensitivity threshold (1.0-5.0, default 2.0). Lower = more sensitive.
current_duration_minutesNoCurrent observation window in minutes (1-60, default 5).
baseline_duration_minutesNoHistorical baseline duration in minutes (5-1440, default 60).

Output Schema

ParametersJSON Schema
NameRequiredDescription
serviceYes
anomaliesYes
current_endYes
sensitivityYes
baseline_endYes
current_startYes
baseline_startYes
total_anomaliesYes
latency_anomaliesYes
error_rate_anomaliesYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds how it fetches traces and computes statistics, which is useful context. No contradictions or missing disclosures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise with clear sections: purpose, process, examples with usage, returns. No wasted words; front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary aspects: purpose, parameters, examples, alternatives, return type. No unexplained gaps given the tool's complexity and existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by providing concrete examples of using parameters (e.g., sensitivity, duration windows) beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it detects latency and error-rate anomalies for a service by comparing recent behavior to historical baseline. It uses specific verb 'detect' and resource 'anomalies for a service', and distinguishes from siblings like jaeger_compare_windows and jaeger_get_trace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use when' examples with parameter suggestions and 'Don't use when' with alternative tool names, giving clear guidance on when to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_find_test_tracesA
Read-onlyIdempotent

Find Jaeger traces matching the supplied tag query.

Accepts any tag key-value schema (Allure, pytest, custom) without normalization. When service is omitted, searches all known services concurrently (capped at 20). Results are sorted newest-first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTag key-value pairs to filter traces. Any framework tag schema works — e.g. {'allure.id': 'TC-42'} or {'test.run_id': 'abc123'}.
limitNoMaximum traces to return total.
serviceNoJaeger service name. If omitted, all services (up to 20) are searched concurrently.
lookback_hoursNoHours back from now to search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tracesYes
tag_queryYes
total_countYes
service_filterYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: 'Accepts any tag key-value schema without normalization' indicates flexibility and a lack of preprocessing, while 'searches all known services concurrently (capped at 20)' and 'sorted newest-first' disclose performance and ordering traits. These enrich the annotation-provided readOnly and idempotent hints without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main action, and uses three clear sentences. Every sentence earns its place: purpose, tag flexibility, and key behaviors.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema, annotations, and presence of an output schema, the description covers the essential behavioral aspects. It lacks explicit differentiation from the similarly named 'jaeger_search_traces', which could cause selection ambiguity, but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds some context (e.g., tag schema flexibility, service omission behavior) but does not significantly deepen understanding of individual parameters beyond the schema. It is adequate, not outstanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Find Jaeger traces matching the supplied tag query', which is a specific verb+resource. However, it does not explicitly distinguish itself from the sibling tool 'jaeger_search_traces', which may serve a similar purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use it (tag-based query, any tag schema) and notes that service is optional with a fallback to all services. It does not explicitly mention alternatives or exclusions, but the context is clear enough for an agent to infer use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_forecast_capacityA
Read-onlyIdempotent

Forecast future throughput demands and resource requirements for a service.

Provides predictions for the next 7-30 days with confidence intervals to enable infrastructure scaling decisions.

Args: service: Service name to forecast capacity for days_ahead: Number of days to forecast ahead (default: 30 days)

Returns: ForecastResult with throughput predictions and resource requirements

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesService name to forecast capacity for
days_aheadNoNumber of days to forecast ahead (1-90)

Output Schema

ParametersJSON Schema
NameRequiredDescription
service_nameYesName of the service
forecast_period_endYesEnd of forecast period
predicted_throughputYesPredicted throughput (requests per time unit)
forecast_period_startYesStart of forecast period
resource_requirementsNoResource requirements
confidence_interval_lowYesLower bound of confidence interval
confidence_interval_highYesUpper bound of confidence interval

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral details (confidence intervals, 7-30 day range) beyond annotations, but contains an inconsistency: it states 'next 7-30 days' while the schema allows days_ahead from 1-90. This misstatement reduces transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two clear paragraphs: purpose and parameters. It is front-loaded and well-structured, though the range inconsistency could be clarified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description provides adequate context (throughput, resource requirements, confidence intervals). The inconsistency in the forecast range is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description repeats schema info (service name, default days_ahead) but adds no new semantic value beyond what the schema already provides. The mention of 7-30 days could mislead regarding the valid range.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: forecasting future throughput and resource requirements for a service. It uses specific verbs (forecast) and nouns (capacity for a service), and distinguishes it from sibling tools like prediction and anomaly detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for infrastructure scaling decisions, providing context. However, it does not explicitly state when not to use or direct users to alternative tools like jaeger_predict_degradation for degradation-specific predictions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_get_dependenciesA
Read-onlyIdempotent

Retrieve the service-to-service call graph from Jaeger.

Wraps GET /api/dependencies. Returns directed edges (parent → child) with call_count — the number of spans where parent called child in the lookback window.

Use this to understand service topology, find high fan-out services, or verify that a new service is connected as expected.

Examples: - Use when: "What services does order-service call?" → check edges where parent='order-service'. - Use when: "Map the full service dependency graph for the last 7 days" → lookback_hours=168. - Use when: "Which services are called most frequently?" → sort edges by call_count descending. - Don't use when: You want detailed span timings (use jaeger_search_traces + jaeger_get_trace instead). - Don't use when: You need real-time data — Jaeger's dependency graph is aggregated and may lag by minutes.

Returns: dict with end_ts_us / lookback_hours / edge_count / edges (list of {parent, child, call_count}).

ParametersJSON Schema
NameRequiredDescriptionDefault
end_tsNoEnd timestamp in microseconds since Unix epoch UTC (optional). Defaults to now. Example: 1713400000000000.
lookback_hoursNoNumber of hours to look back from end_ts (1-720, default 24).

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesYes
end_ts_usYes
edge_countYes
lookback_hoursYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and idempotentHint; the description adds that the dependency graph is aggregated and may lag by minutes, and that it wraps GET /api/dependencies. It also discloses the return structure including fields like end_ts_us, lookback_hours, edge_count, and edges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: brief intro, clear bullet points for use cases, explicit don't-use cases, and a return format summary. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 parameters, all optional), the description covers all necessary aspects: purpose, usage guidelines, behavioral caveats, and return format. It is fully adequate for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with both parameters well-documented. The description adds value by providing concrete examples of parameter usage (e.g., lookback_hours=168 for 7 days), but the schema alone already explains the parameters adequately, so this is slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve' and specific resource 'service-to-service call graph from Jaeger'. It distinguishes from sibling tools by providing explicit use cases and when not to use it, e.g., 'Don't use when: You want detailed span timings (use jaeger_search_traces + jaeger_get_trace instead)'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool with concrete examples (e.g., 'What services does order-service call?', 'Map the full service dependency graph for the last 7 days'), and when not to use it with alternatives, such as for real-time data or detailed span timings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_get_traceA
Read-onlyIdempotent

Retrieve full trace detail with all spans, service breakdown, and execution tree.

Wraps GET /api/traces/{traceID}. Returns every span in the trace, per-service statistics, and a flat execution tree (each node lists its child span IDs) that summarises the call hierarchy.

Error spans are identified by tags["error"] = "true".

Examples: - Use when: "Why is trace abc123... slow — show me the span breakdown" → trace_id='abc123...'; inspect services for the heaviest service and execution_tree for the call hierarchy. - Use when: "Which service caused the error in trace xyz...?" → check spans where is_error=true. - Use when: You found a slow/failed trace in jaeger_search_traces and need full detail. - Don't use when: You don't have a specific traceID — use jaeger_search_traces to find one first. - Don't use when: You only want aggregate data across many traces (use jaeger_search_traces with filters instead).

Returns: dict with trace_id / span_count / service_count / root_operation / root_service / start_time_us / total_duration_us / errors_count / services (per-service stats) / spans (all spans) / execution_tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
trace_idYesTrace ID as a hex string (16 or 32 hex chars). Example: 'abcdef1234567890abcdef1234567890'. Obtain from jaeger_search_traces.

Output Schema

ParametersJSON Schema
NameRequiredDescription
spansYes
servicesYes
trace_idYes
span_countYes
errors_countYes
root_serviceYes
service_countYes
start_time_usYes
execution_treeYes
root_operationYes
total_duration_usYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, so behavior is well-covered. The description adds useful context like error span identification ('tags["error"] = "true"'), return structure details (services, execution_tree), and API endpoint mapping. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: purpose, API endpoint, return details, examples, and don't-use guidance. Every sentence adds value, and there is no redundancy. The examples are concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with rich annotations and an output schema described in the description (listing all return fields), the description is complete. It covers all necessary information for an agent to correctly invoke and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed constraints (pattern, minLength, maxLength, description). The description repeats the format and examples but does not add significant meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieve full trace detail with all spans, service breakdown, and execution tree.' The verb 'Retrieve' and resource 'full trace detail' are specific. It effectively distinguishes from sibling tools like jaeger_search_traces (which finds traces) and others by explicitly contrasting use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit examples of when to use (e.g., 'Why is trace abc123... slow') and when not to use (e.g., 'Don't use when: You don't have a specific traceID — use jaeger_search_traces to find one first') are provided. Alternatives are named clearly, and the examples demonstrate suitable scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_list_operationsA
Read-onlyIdempotent

List all operation names Jaeger has seen for a given service.

Wraps GET /api/services/{service}/operations. Useful for discovering which operation names to pass as filters to jaeger_search_traces. Output is capped at 500 operations.

Examples: - Use when: "What HTTP endpoints does order-service expose in tracing?" → service='order-service'. - Use when: You want to search for a specific slow operation but need the exact name — list operations first, then pass it to jaeger_search_traces. - Use when: Auditing which gRPC methods a service traces. - Don't use when: You don't have a specific service — start with jaeger_list_services first. - Don't use when: You want to search traces immediately (skip this step if you already know the operation name).

Returns: dict with service / operations_count / truncated / operations (sorted alphabetically).

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesService name exactly as returned by jaeger_list_services.

Output Schema

ParametersJSON Schema
NameRequiredDescription
serviceYes
truncatedYes
operationsYes
operations_countYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnly, idempotent), the description adds that output is capped at 500 operations and details the return dict structure. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficiently structured: summary, API wrap, usage guidance, examples, return format. No superfluous text; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given single parameter and simple operation, description fully explains purpose, usage, constraints (500 cap), output structure, and relationship to sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'service' is described in schema with 100% coverage. Description adds context that the name must match exactly as returned by jaeger_list_services, adding value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and resource 'operation names' for a given service. It distinguishes from siblings like jaeger_list_services and jaeger_search_traces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use examples (discovering operation names for filtering) and when-not-to-use (when service unknown or name already known), with alternatives suggested (jaeger_list_services).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_list_servicesA
Read-onlyIdempotent

List all services that Jaeger has observed traces for.

Wraps GET /api/services. Jaeger returns all services at once — no pagination. Output is capped at 500 services with a truncation hint.

Use this first to discover valid service names before calling jaeger_list_operations or jaeger_search_traces.

Examples: - Use when: "What services does Jaeger know about?" → call with no parameters; read the services list. - Use when: "Is payment-service instrumented?" → check if payment-service appears in the services list. - Use when: Starting a debugging session — list services first, then pick one for jaeger_list_operations or jaeger_search_traces. - Don't use when: You already know the service name and want to search its traces (call jaeger_search_traces directly). - Don't use when: You want the dependency graph between services (call jaeger_get_dependencies).

Returns: dict with keys services_count / truncated / services.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
servicesYes
truncatedYes
services_countYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds context beyond that: no pagination, output capped at 500 services with truncation hint, and wraps a GET endpoint. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening, a technical note, sections for examples and returns. Every sentence is informative, and it is front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema provided), the description covers all necessary aspects: behavior, usage, limitations, and return format. It is complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, and schema description coverage is 100%, so baseline is 3. However, the description adds value by explicitly stating there are no parameters needed and how to call it, making it more helpful than the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all services observed by Jaeger, using a specific verb and resource. It distinguishes itself from sibling tools by explaining when to use it and when not to, such as referencing jaeger_list_operations and jaeger_search_traces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidelines are provided, including when to use (e.g., discovering service names, checking if a service is instrumented) and when not to use (e.g., when service name is known or need dependency graph). It also names alternatives like jaeger_search_traces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_predict_degradationA
Read-onlyIdempotent

Predict potential performance degradation events for a service.

Analyzes historical trace data patterns, critical path trends, and anomaly detection results to forecast likely performance issues 2-24 hours in advance.

Args: service: Service name to analyze for potential degradation hours_back: Number of hours of historical data to analyze (default: 168 hours/1 week)

Returns: PredictionResult with degradation forecast, confidence level, and recommendations

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesService name to analyze for potential degradation
hours_backNoNumber of hours of historical data to analyze (1-720)

Output Schema

ParametersJSON Schema
NameRequiredDescription
service_nameYesName of the service
recommendationsNoRecommended actions
confidence_levelYesConfidence level (0.0 to 1.0)
contributing_factorsNoFactors contributing to prediction
predicted_degradation_timeYesPredicted time of degradation

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, providing a safe profile. The description adds value by detailing the analysis approach (historical trace data, critical path trends, anomaly detection) and the prediction horizon (2-24 hours), which goes beyond the annotations and clarifies behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear structure: purpose sentence, analysis approach, parameter list, and return overview. Every sentence earns its place, and critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no nested objects) and the presence of an output schema, the description is complete. It explains the purpose, input parameters, and return value (degradation forecast, confidence, recommendations), fitting the context well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both 'service' and 'hours_back' having descriptions and constraints. The description repeats these but adds no new semantics beyond the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool predicts potential performance degradation events for a service, using historical trace data. The verb 'predict' and resource 'degradation' are specific, and the content distinguishes it from siblings like jaeger_detect_anomalies or jaeger_forecast_capacity by focusing on forecasting issues 2-24 hours in advance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for predicting degradation but does not explicitly state when to use this tool versus alternatives like anomaly detection or capacity forecasting. No exclusions or when-not-to-use scenarios are mentioned, leaving the agent to infer context from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_regression_diffA
Read-onlyIdempotent

Compare two Jaeger time windows and classify per-operation regressions.

Fetches traces from the baseline and comparison windows, then classifies each operation as regressed, recovered, appeared, or removed. Results are sorted by severity score (0-100) descending for easy triage.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum traces to fetch per window.
serviceYesJaeger service name to analyse for regressions.
baseline_endYesBaseline window end time (Unix microseconds).
baseline_startYesBaseline window start time (Unix microseconds).
comparison_endNoComparison window end time (Unix microseconds). Defaults to now.
comparison_startNoComparison window start time (Unix microseconds). Defaults to now minus 15 minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
serviceYes
operationsYes
baseline_endYes
removed_countYes
appeared_countYes
baseline_startYes
comparison_endYes
recovered_countYes
regressed_countYes
comparison_startYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds behavioral context by explaining that it fetches traces from both windows, classifies operations into four categories, and sorts results by severity score. This goes beyond the annotation hints and helps the agent understand the processing flow and output ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of three sentences with no filler. The first sentence is a clear front-loaded summary; the following sentences add relevant detail about the classification categories and severity sorting. Every sentence contributes to understanding the tool's behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only analysis tool with a rich schema and an output schema available. It explains the core process (fetch, classify, sort) and the classification labels, which covers the main behavior. Some could argue it doesn't mention default window behaviors, but those are already documented in the schema, and the output schema explains return values, so the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters with descriptions, so the baseline is 3. The tool description adds minimal parameter-specific meaning beyond the schema; it implies the time parameters pertain to baseline and comparison windows but does not elaborate on syntax or interactions. The schema already provides sufficient semantic detail for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: comparing two Jaeger time windows and classifying per-operation regressions. It enumerates specific classification outcomes (regressed, recovered, appeared, removed) and mentions sorting by severity score, distinguishing it from siblings like jaeger_compare_windows which may only compare windows without classification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly conveys when to use the tool: when you need to compare two time windows to identify regressions and related operation changes. However, it does not explicitly mention alternative tools or provide exclusions (e.g., when to use jaeger_compare_windows instead). The context is clear but lacks explicit guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_search_tracesA
Read-onlyIdempotent

Search Jaeger traces with rich filters.

Wraps GET /api/traces. Returns a list of trace summaries — use jaeger_get_trace to drill into a specific trace for span details.

The tags parameter accepts a JSON string so the LLM can construct arbitrary tag filters. Durations (min_duration/max_duration) are forwarded as-is to Jaeger (e.g. '100ms', '1.5s').

Examples: - Use when: "Show me recent 500 errors in order-service" → service='order-service', tags='{"http.status_code":"500"}'. - Use when: "Find slow traces (>1s) for checkout endpoint" → service='checkout', operation='POST /checkout', min_duration='1s'. - Use when: "Give me the last 5 traces in the last hour" → limit=5, set start to (now - 3600s) in microseconds. - Don't use when: You already have a traceID and want full details (call jaeger_get_trace directly — one fewer round trip). - Don't use when: You want service dependency topology (call jaeger_get_dependencies).

Returns: dict with service / operation / returned / truncated / traces (list of :class:TraceSummary).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd time in microseconds since Unix epoch UTC (optional). If omitted and start is set, defaults to now.
tagsNoJSON string of tag key-value pairs to filter by (optional). Example: '{"http.status_code":"500"}' to find 5xx errors, or '{"error":"true"}' for any error spans.
limitNoMaximum number of traces to return (1-1500, default 20).
startNoStart time in microseconds since Unix epoch UTC (optional). Example: 1713400000000000 for 2024-04-18 00:00:00 UTC.
serviceYesService name to search traces for (required). Use jaeger_list_services to discover valid names.
operationNoOperation name filter (optional). Use jaeger_list_operations to discover valid names. Example: 'GET /api/orders' or 'grpc.health.v1.Health/Check'.
max_durationNoMaximum trace duration filter (optional). Format: '100ms', '500ms'. Use to find fast traces or exclude outliers.
min_durationNoMinimum trace duration filter (optional). Format: '100ms', '1.5s', '2m'. Use to find slow traces.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tracesYes
serviceYes
returnedYes
operationYes
truncatedYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent behavior. The description adds that it wraps a GET API, returns trace summaries, details on parameter formats (JSON tags, duration strings), and mentions truncation. Does not conflict with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with intro, parameter details, examples, and usage notes. Slightly verbose but every sentence adds value; could be more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, high schema coverage, good annotations, and output schema hinted), the description is comprehensive. It covers usage, parameter formats, examples, and limits, leaving minimal gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema_description_coverage is 100%, the baseline is 3. The description adds value by explaining how tags and durations are interpreted, and provides concrete examples mapping user intents to parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches Jaeger traces with rich filters, uses a specific verb, and distinguishes from sibling tools like jaeger_get_trace and jaeger_get_dependencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-to-use examples (e.g., recent errors, slow traces) and when-not-to-use conditions (if you already have a trace ID or need dependency topology), along with naming alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_span_statisticsA
Read-onlyIdempotent

Compute per-operation latency percentiles and error rates across recent traces.

Fetches up to limit traces for the given service (optionally filtered by operation), then aggregates all spans by operation name. For each operation reports: span count, p50/p95/p99 duration in microseconds, error count, and error rate.

Duration values are in microseconds (integer). Error rate is error_count / span_count (float, 0.0–1.0).

Examples: - Use when: "What are the p95 latencies for each endpoint in order-service?" → service='order-service'; inspect each operation's p95_duration_us. - Use when: "How often does the POST /checkout endpoint error?" → service='checkout-svc', operation='POST /checkout'; check error_rate in the stats. - Use when: "Compare latency distributions across operations" → look at p50 vs p99 spread to identify high-variance operations. - Use when: "Get a larger sample for more accurate stats" → limit=100 for higher confidence percentiles. - Don't use when: You want to compare two specific traces (use jaeger_compare_traces instead). - Don't use when: You want full span detail for a single trace (use jaeger_get_trace instead).

Returns: dict with service / operation / trace_count / stats (list of per-operation stats with count, p50/p95/p99 duration_us, error_count, error_rate).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of traces to fetch and analyze (1-100, default 20).
serviceYesService name to compute statistics for (required). Use jaeger_list_services to discover valid names.
operationNoOperation name filter (optional). When set, only traces matching this operation are fetched. Use jaeger_list_operations to discover valid names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statsYes
serviceYes
operationYes
trace_countYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read. The description adds rich behavioral context: it aggregates spans by operation name, reports p50/p95/p99 in microseconds, error rate formula, and the return structure. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: a one-sentence summary, then calculation details, units, examples, exclusions, and return value. Every section earns its place—no wasted words, and the 'Returns' block clarifies expected output even though an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (aggregation, multiple metrics, parameter combinations) and the presence of an output schema and annotations, the description is thorough. It covers use cases, parameter effects, output format, and explicitly lists sibling tools for alternatives, leaving little ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described, so the baseline is 3. The description adds value by explaining how 'limit' affects sample size/accuracy and that 'operation' filters traces before aggregation. It also gives parameter-specific examples (e.g., service='order-service'), but it doesn't fully replace the schema's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: 'Compute per-operation latency percentiles and error rates across recent traces.' It clearly distinguishes from siblings by stating 'Don't use when: You want to compare two specific traces (use jaeger_compare_traces instead)' and similarly for jaeger_get_trace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' and 'Don't use when' sections provide concrete example queries with parameter settings and alternative tool names. This gives the agent clear decision rules for when to select this tool versus siblings like jaeger_compare_traces and jaeger_get_trace.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jaeger_test_profileA
Read-onlyIdempotent

Aggregate per-operation latency hotspots across all traces matching the supplied tag query.

Operations are ranked by total wall time descending so the most expensive appear first.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTag key-value pairs scoping the test run — e.g. {'test.run_id': 'abc123'} or {'allure.id': 'TC-42'}.
limitNoMaximum traces to aggregate.
serviceNoJaeger service name. If omitted, all services (up to 20) are searched concurrently.
lookback_hoursNoHours back from now to search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tag_queryYes
operationsYes
trace_countYes
service_filterYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, and the description adds useful behavioral context by stating operations are ranked by descending total wall time. This goes beyond what annotations provide and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the main action in the first and ranking behavior in the second—no filler or redundancy. The description is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only aggregation tool with a full schema and an output schema, the description provides the core behavior and ranking detail. It is complete enough, though it could benefit from clarifying when to prefer this over sibling analysis tools, which is already penalized in other dimensions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 100% of parameters with clear explanations (tags, limit, service, lookback_hours), so the description needn't add details. It only references 'tag query' which aligns with the tags parameter, adding no extra value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool aggregates per-operation latency hotspots across traces matching a tag query, using specific terminology ('per-operation', 'latency hotspots', 'ranked by total wall time') that distinguishes it from siblings like jaeger_search_traces or jaeger_span_statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the 14 sibling tools. It does not mention alternatives or exclusions, leaving the agent to infer usage from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.6.2
    • Addedjaeger_find_test_traces
    • Addedjaeger_regression_diff
    • Changedjaeger_span_statistics3 fields changed
      • addedOutput schema / $defs / OperationStats / properties / mean_duration_us
        Added value: +{
        +  "title": "Mean Duration Us",
        +  "type": "integer"
        +}
      • addedOutput schema / $defs / OperationStats / properties / total_duration_us
        Added value: +{
        +  "title": "Total Duration Us",
        +  "type": "integer"
        +}
      • changedOutput schema / $defs / OperationStats / required
        Previous value: -[
        -  "operation",
        -  "count",
        -  "p50_duration_us",
        -  "p95_duration_us",
        -  "p99_duration_us",
        -  "error_count",
        -  "error_rate"
        -]New value: +[
        +  "operation",
        +  "count",
        +  "p50_duration_us",
        +  "p95_duration_us",
        +  "p99_duration_us",
        +  "error_count",
        +  "error_rate",
        +  "total_duration_us",
        +  "mean_duration_us"
        +]
    • Addedjaeger_test_profile
  2. 9 tool updatesv0.1.2
    • Addedjaeger_compare_traces
    • Addedjaeger_compare_windows
    • Addedjaeger_critical_path
    • Addedjaeger_detect_anomalies
    • Addedjaeger_forecast_capacity
    • Changedjaeger_get_trace1 field changed
      • addedInput schema / properties / trace_id / pattern
        Added value: +"^[0-9a-fA-F]+$"
    • Changedjaeger_list_operations1 field changed
      • addedInput schema / properties / service / pattern
        Added value: +"^[a-zA-Z0-9._:\\-]+$"
    • Addedjaeger_predict_degradation
    • Addedjaeger_span_statistics
  3. 5 tool updatesv0.1.1
    • First observedjaeger_get_dependencies
    • First observedjaeger_get_trace
    • First observedjaeger_list_operations
    • First observedjaeger_list_services
    • First observedjaeger_search_traces

TDQS

A3.9/5.0
Disambiguation2/5

Several tools have overlapping purposes. jaeger_search_traces and jaeger_find_test_traces both search traces with tag filters, and jaeger_compare_windows, jaeger_detect_anomalies, and jaeger_regression_diff all compare two time windows to identify performance changes, making it easy for an agent to select the wrong one. The differences between these are subtle and not clearly delineated.

Naming Consistency3/5

All tools share the jaeger_ prefix and use snake_case, but the naming pattern is inconsistent: some are verb_noun (list_services, search_traces) while others are noun_phrase (span_statistics, critical_path, test_profile). This mixed convention is readable but lacks the predictability of a uniform verb_noun scheme.

Tool Count4/5

15 tools is at the upper boundary of a well-scoped set, but the advanced analytics tools (predict_degradation, forecast_capacity, detect_anomalies) expand the server's capability beyond basic tracing. The count is reasonable, though some tools could be merged without losing functionality.

Completeness4/5

The core Jaeger read operations are fully covered: service discovery, operation listing, trace search, trace detail, and dependency graph. Advanced analytics like comparisons, anomaly detection, and predictions provide extra depth, leaving few obvious gaps for a tracing-focused server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Query application logs, traces, and metrics from your AI coding assistant via Foam's MCP server.

  • The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.

  • MCP observability. Query live traffic, errors, duration, and alerts from your AI agent.

  • Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mshegolev/jaeger-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server