MCP server for OpenTelemetry trace analysis during development
This OpenTelemetry MCP server has solid tool naming and descriptions, but lacks structured output documentation, parameter validation rules, and error handling guidance. All 6 tools are properly named with action verbs and have reasonable descriptions (60-100 chars each). Input schemas are present and mostly complete with type definitions. However, the server provides no documented output schemas, missing parameter format constraints, and error responses return generic JSON without recovery guidance. The tools are READ_ONLY (low risk) and well-composed for trace analysis, but the implementation falls short of production-grade definition quality expected at 70+.
Find traces containing errors.
Find slowest traces for a service.
Get complete trace details by ID.
List all operations for a specific service.
List all available services in Jaeger.
Search for traces with filters.
Output schemas are not documented. Tools return JSON strings but LLMs cannot predict the structure of trace objects, span details, or error responses. This forces agents to parse unstructured output and limits downstream tool chaining.
Parameter format constraints are missing. 'start_time' and 'end_time' are documented as ISO 8601 format strings, but no regex pattern or format specification is provided in the schema. 'trace_id' has no documented format or length constraints. LLMs may pass invalid values.
Error responses lack recovery guidance. The `_json_response({'error': str(e)})` pattern returns bare exception messages (e.g., 'Connection refused', 'Invalid service name') with no actionable next steps for the LLM. No distinction between retryable and user-fixable errors.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
Numeric parameter constraints are incomplete. 'limit' is capped at 100 for search_traces and 20 for find_errors, but no minimum is specified in the schema. Default values (20, 10) are not marked as defaults in all schemas. 'min_duration_ms' and 'max_duration_ms' lack range documentation.
Pagination is not explicitly offered. search_traces accepts a 'limit' but does not document a cursor or offset mechanism for retrieving results beyond the limit. Long result sets may exceed context windows without a documented pagination strategy.