BitDive monitoring and tracing MCP server. Proxies tool calls to BitDive monitoring API endpoints (/mcp/*) using X-BitDive-MCP-Token for authentication.
BitDive MCP server provides 11 tools for distributed tracing and performance monitoring. Tools are well-named with clear verb prefixes (get_, list_, find_, compare_), and descriptions are substantive (average ~150 chars). However, critical gaps undermine production readiness: (1) input schemas lack type declarations for most parameters, parameters are documented in description text but not formalized as JSON Schema with 'type' fields; (2) no output schema documentation, callers cannot know what fields to expect from responses, forcing LLMs to guess at response structure; (3) no error handling guidance, tools raise HTTP exceptions but provide no recovery instructions or error classification; (4) mcp_token parameter exposed in every tool despite being a secret (should be server-injected); (5) parameter constraints (e.g., limit ranges, format specs) stated informally in descriptions rather than as formal schema constraints (minItems, maxItems, pattern, enum). These gaps are systematic and affect all 11 tools, keeping the server in the 'Fair' category despite good naming and descriptions.
Compares two traces (before/after) identified by their call_ids and returns a normalized diff highlighting structural and data differences.
Compares a chronological series of traces identified by call_ids and returns a normalized diff showing changes over time.
Fetches historical call_ids for a specific method identified by className and methodName.
Returns a heatmap of traced methods within a specific module, showing call counts and performance data.
Returns a CURL or PowerShell command that reproduces the original request from a traced call, ready to execute from the host machine.
Returns a system-wide heatmap of all traced methods grouped by module/class, with call counts and performance statistics.
Input schemas lack formal type declarations. Parameters documented in descriptions (e.g., 'Optional BitDive MCP token') but not registered as JSON Schema with 'type', 'required', 'properties' structure. FastMCP may infer types from Python type hints, but source code does not show explicit schema definitions passed to @mcp.tool() decorators.
No output schema documentation. Tools return JSON responses (via resp.json()) but do not document expected response structure, field names, or types. LLMs cannot know what fields to expect (e.g., does get_trace_overview return 'trace_tree' or 'execution_tree'? is 'call_count' an integer or string?). This forces LLMs to infer schema from first response and risks misinterpretation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 28 | - | v1 |
Returns the full de-noised trace tree for a call_id, filtering out noise while preserving execution structure.
Returns a readable, high-level tree view of a trace execution for a given call_id, suitable for quick understanding.
Returns the untouched, raw trace dump for a call_id with all captured details (including sensitive data that is redacted for output).
Returns a subtree of a trace for a specific class.method call within a larger execution context (call_id).
Returns the latest call_ids for a module or service, sorted by recency.
mcp_token parameter exposed as a tool input in all 11 tools. This is a credential and should NEVER appear in tool parameters, agent logs and prompt history will capture it. Must be injected server-side via BITDIVE_MCP_TOKEN environment variable only, with no per-call override option in the MCP tool schema.
No error handling guidance. Tools call resp.raise_for_status() and _resolve_mcp_token() which raise RuntimeError, but MCP tool responses do not include error classification (retryable, user-fixable, fatal) or recovery hints. An LLM seeing 'BitDive MCP token missing' cannot determine what to do next without explicit guidance.
Parameter constraints stated informally. Examples: 'Maximum number of call IDs to return (default: 100)' and 'Maximum number of call IDs to return (default: 50)', no formal minItems, maxItems, or enum constraints in schema. 'Optional BitDive MCP token', no minLength or pattern validation. This prevents JSON Schema validators from enforcing constraints and leaves LLMs to guess.
No pagination metadata in list responses. Tools like list_recent_calls and find_calls_by_method accept a 'limit' parameter but do not document whether they return a total_count, next_cursor, or has_more flag. Large result sets could exhaust context windows without pagination awareness.
Tool names lack noun specificity. 'get_trace_overview', 'get_trace', 'get_trace_raw' are semantically close but distinctions are subtle (overview = readable tree; trace = full de-noised; raw = untouched dump). An LLM may conflate these. Consider renaming to 'get_trace_tree_summary', 'get_trace_de_noised', 'get_trace_unfiltered' for clarity.