Skip to main content
Glama
jsamuel1

otel-analyzer-mcp

by jsamuel1
README.md
# OTEL Analyzer MCP Server

MCP server for analyzing OpenTelemetry traces with performance and error diagnosis.

## Features

- Load traces from files, strings, AWS X-Ray, or CloudWatch GenAI observability
- Auto-detect format (OTLP JSON, Jaeger, Protobuf, X-Ray)
- Performance analysis: latency breakdown, slow spans, critical path
- Error analysis: error detection, exception extraction, context
- GenAI trace analysis: Bedrock AgentCore, token usage, model latency
- MCP sampling for LLM-assisted deep analysis

## Installation

```bash
uv tool install otel-analyzer-mcp
```

Or for development:

```bash
uv sync
```

## Usage

Run the server:

```bash
otel-analyzer-mcp
```

Or add to your MCP client config:

```json
{
  "mcpServers": {
    "otel-analyzer-mcp": {
      "command": "otel-analyzer-mcp"
    }
  }
}
```

## Tools

| Tool | Description |
|------|-------------|
| `load_trace` | Load from file, JSON, X-Ray trace ID, or CloudWatch |
| `search_xray` | Search X-Ray with filter expressions |
| `search_genai_traces` | Search CloudWatch aws/spans for GenAI traces |
| `list_traces` | List all loaded traces |
| `analyze_perf` | Performance analysis (latency, slow spans, critical path) |
| `analyze_errs` | Error analysis (errors, exceptions, context) |
| `summarize_trace` | High-level trace overview |
| `deep_analyze` | LLM-assisted analysis via MCP sampling |

## Examples

Load a trace file:

```text
load_trace(path="/path/to/trace.json")
```

Search X-Ray:

```text
search_xray(filter_expression='service("my-api") AND responseTime > 5', region="us-east-1")
```

Search GenAI traces:

```text
search_genai_traces(filter_query='name like /bedrock/', region="us-east-1")
```

Load from CloudWatch:

```text
load_trace(trace_id="abc123", source="cloudwatch", region="us-east-1")
```

Analyze performance:

```text
analyze_perf(trace_id="abc123")
```

## License

MIT

TDQS

B3/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct aspect of trace management and analysis. No two tools have overlapping purposes; descriptions clearly differentiate ingestion, listing, summarizing, error analysis, performance analysis, LLM-assisted analysis, and searching by source.

Naming Consistency4/5

Tool names follow a consistent verb_noun snake_case pattern (e.g., load_trace, list_traces, summarize_trace). Minor deviations: analyze_errs and analyze_perf use abbreviations (errs, perf) and deep_analyze uses an adjective prefix, but these are still readable and fit the general pattern.

Tool Count5/5

With 8 tools, the server provides a comprehensive but focused set of operations for trace analysis: ingestion, listing, summarization, error analysis, performance analysis, LLM-assisted analysis, and source-specific searches. Each tool earns its place without redundancy.

Completeness4/5

The tool set covers the main lifecycle of trace analysis: loading, listing, summarizing, error and performance analysis, and advanced LLM analysis. It also includes source-specific search. A minor gap is the lack of a query/filter capability on loaded traces beyond the static listing, but overall the surface is well-rounded for typical observability tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues