tracehub-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Logging level: DEBUG, INFO, WARNING, ERROR | INFO |
| BACKEND_URL | No | Backend API endpoint (required) | |
| BACKEND_TYPE | No | Backend type: jaeger, tempo, traceloop, or datadog | jaeger |
| BACKEND_API_KEY | No | API key (required for Traceloop and Datadog) | |
| BACKEND_APP_KEY | No | Application key (required for Datadog, in addition to API key) | |
| BACKEND_TIMEOUT | No | Request timeout in seconds | 30 |
| MAX_TRACES_PER_QUERY | No | Maximum traces to return per query (1-1000) | 100 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_tracesA | Search for OpenTelemetry traces with filters. Supports both simple parameters and advanced generic filter system. Args: service_name: Filter by service name (use filters for advanced queries) operation_name: Filter by operation/span name start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format min_duration_ms: Minimum trace duration in milliseconds max_duration_ms: Maximum trace duration in milliseconds gen_ai_system: Filter by LLM provider (e.g., openai, anthropic) gen_ai_request_model: Filter by requested model name (e.g., gpt-4) gen_ai_response_model: Filter by actual model used (e.g., gpt-4-0613) has_error: Filter traces with errors tags: Additional tag filters as key-value pairs filters: Generic filter conditions (advanced) - list of filter objects with: - field: Field name in dotted notation (e.g., "gen_ai.usage.prompt_tokens") - operator: Comparison operator (equals, not_equals, gt, lt, gte, lte, contains, not_contains, starts_with, ends_with, in, not_in, between, exists, not_exists) - value: Single value for most operators - values: List of values for "in", "not_in", "between" operators - value_type: Type of value(s) - "string", "number", or "boolean" limit: Maximum number of traces to return (1-1000, default: 100) Returns: JSON string with search results Filter Examples: Find expensive traces: {"field": "gen_ai.usage.total_tokens", "operator": "gt", "value": 5000, "value_type": "number"} |
| get_traceB | Get complete trace details by trace ID. Returns all spans with attributes, including parsed Opentelemetry data for LLM operations. Args: trace_id: Trace identifier Returns: JSON string with trace details |
| get_llm_usageB | Get aggregated LLM usage metrics (token counts) for a time period. Provides breakdowns by model and service. Args: start_time: Start time in ISO 8601 format end_time: End time in ISO 8601 format service_name: Filter by service name gen_ai_system: Filter by LLM provider gen_ai_request_model: Filter by requested model name gen_ai_response_model: Filter by actual model used limit: Maximum traces to analyze (default: 1000) Returns: JSON string with usage metrics |
| list_servicesA | List all available services in the OpenTelemetry backend. Returns: JSON string with list of services |
| find_errorsB | Find traces with errors. Including detailed error messages, stack traces, and LLM-specific error information. Args: start_time: Start time in ISO 8601 format end_time: End time in ISO 8601 format service_name: Filter by service name limit: Maximum error traces to return (default: 100) Returns: JSON string with error traces |
| list_llm_modelsB | List all LLM models being used with usage statistics. Discovers what models are deployed and tracks their usage patterns. Args: start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format service_name: Filter by service name gen_ai_system: Filter by LLM provider (e.g., openai, anthropic, cohere) limit: Maximum traces to analyze for model discovery (default: 1000) Returns: JSON string with list of models and their statistics (count, request_count, first_seen, last_seen) |
| get_llm_model_statsB | Get detailed performance statistics for a specific LLM model. Analyzes request count, latency percentiles (p50, p95, p99), token usage statistics, error rates, and finish reason distributions. Args: model_name: Model name to analyze (e.g., "gpt-4", "claude-3-opus", "gpt-3.5-turbo") start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format service_name: Filter by service name Returns: JSON string with comprehensive model statistics including duration/token percentiles |
| get_llm_expensive_tracesA | Find traces with highest LLM token usage. Useful for cost optimization and identifying inefficient prompts. Args: limit: Maximum number of traces to return (default: 10) start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format min_tokens: Minimum token count threshold (only return traces above this) service_name: Filter by service name gen_ai_request_model: Filter by requested model name (e.g., "gpt-4") gen_ai_response_model: Filter by actual model used (e.g., "gpt-4-0613") Returns: JSON string with top N most expensive traces sorted by total token usage |
| get_llm_slow_tracesA | Find slowest LLM traces by duration. Useful for performance optimization and identifying latency bottlenecks. Args: limit: Maximum number of traces to return (default: 10) start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format min_duration_ms: Minimum duration threshold in milliseconds (only return traces above this) service_name: Filter by service name gen_ai_request_model: Filter by requested model name (e.g., "gpt-4") gen_ai_response_model: Filter by actual model used (e.g., "gpt-4-0613") Returns: JSON string with top N slowest traces sorted by duration |
| search_spans_toolA | Search for individual OpenTelemetry spans with optional filters. Unlike search_traces, this returns individual spans rather than grouped traces, which is useful for analyzing specific operations or finding spans with certain characteristics (e.g., LLM tool calls with traceloop.span.kind == tool). Args: service_name: Filter by service name operation_name: Filter by operation/span name start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format min_duration_ms: Minimum span duration in milliseconds max_duration_ms: Maximum span duration in milliseconds gen_ai_system: Filter by LLM provider (e.g., openai, anthropic) gen_ai_request_model: Filter by requested model name (e.g., "gpt-4") gen_ai_response_model: Filter by actual model used (e.g., "gpt-4-0613") has_error: Filter spans with errors tags: Additional tag filters as key-value pairs filters: Generic filter conditions - list of filter objects with: - field: Field name in dotted notation (e.g., "traceloop.span.kind") - operator: Comparison operator - value: Single value for most operators - values: List of values for "in", "not_in", "between" operators - value_type: Type of value(s) - "string", "number", or "boolean" limit: Maximum number of spans to return (1-1000, default: 100) Returns: JSON string with span summaries Example filter to find LLM tool calls: {"field": "traceloop.span.kind", "operator": "equals", "value": "tool", "value_type": "string"} |
| list_llm_tools_toolA | List all LLM tools being used by identifying traceloop.span.kind == tool. Discovers which tools/functions LLM applications are calling, grouped by tool name with usage statistics. Args: start_time: Start time in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) end_time: End time in ISO 8601 format service_name: Filter by service name gen_ai_system: Filter by LLM provider (openai, anthropic, etc.) limit: Maximum spans to analyze (default: 1000) Returns: JSON string with list of tools and their statistics (usage count, services, first/last seen) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Most tools target distinct resources (traces, spans, services, models, tools, errors), and descriptions clarify boundaries. However, find_errors overlaps heavily with search_traces (has_error filter), and get_llm_expensive_traces/get_llm_slow_traces are specialized sorted variants of search_traces, which could cause misselection.
The set largely follows a verb_noun pattern (get_trace, list_services, search_traces, find_errors, get_llm_model_stats, get_llm_expensive_traces). The main deviation is the awkward redundant '_tool' suffix on search_spans_tool and list_llm_tools_tool, breaking the otherwise clean convention.
11 tools is well-scoped for an OpenTelemetry/LLM observability server, with each tool earning a distinct analytical purpose (search, aggregate, rank, discover). Neither thin nor bloated.
Strong read-only coverage across traces, spans, services, LLM usage/models/tools, and errors, which fits the observability domain. Minor gaps exist (no get_span by ID, no operations/dimension listing), but agents can work around them via search.