BBOT MCP server has significant definition quality gaps. Tool descriptions are present but generic (avg ~40 chars, well below 194-char baseline). Input schemas exist but lack parameter descriptions entirely, critical violation of pattern:tool-description. No output schemas documented. Error handling is minimal; tools return raw exceptions rather than actionable recovery guidance. No tool annotations (readOnlyHint/destructiveHint). The start_scan tool modifies state but description does not warn of side effects. Parameter relationships (e.g., modules vs presets) are undocumented. No pagination support despite tools returning potentially large result sets.
Get results from a completed scan
Get the status of a running or completed scan
List all active scans
List all available bbot modules
List all available bbot presets
Start a new bbot security scan
No parameter descriptions in any tool. Input schemas define types (array, string, integer) but omit descriptions explaining what each parameter controls, expected format, or constraints. LLMs cannot infer parameter meaning from names alone.
No output schemas documented. Tools return results but LLMs have no formal specification of response structure, field types, or which fields are present. Blocks downstream tool chaining and forces LLMs to guess field names.
start_scan modifies state (creates scan, runs security operations) but description does not warn of side effects or irreversibility. LLMs cannot determine if the tool is safe to retry or has destructive consequences.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Clients cannot distinguish read-only discovery tools from write operations. start_scan should be marked destructiveHint=true.
Error handling returns raw exceptions without recovery guidance. Example: _run_scan catches Exception and logs it, but tool response to LLM is bare error string. Should categorize as retryable/user-fixable/fatal and suggest next steps.