Model Context Protocol API Server that creates MCP tools from Bruno API collections
Three tools with significant definition gaps. 'echo' and 'list_environments' have minimal descriptions (under 50 chars). 'dynamic_bruno_api_tools' has a generic description that doesn't explain when/why to use it. Parameter descriptions are present but sparse. No output schemas documented. No error handling guidance. Tool names lack clear action verbs for discovery tools. Schema definitions exist but lack constraints (enums, ranges, patterns).
Dynamically created tools from Bruno API collection requests. Tool names are generated from request names and descriptions include HTTP method and URL.
Echo back a message
List all available environments in the Bruno API collection
Tool descriptions are too short and lack context. 'Echo back a message' (24 chars) and 'List all available environments in the Bruno API collection' (60 chars) do not explain WHEN to use these tools or what the LLM should do with results. Baseline: 194 chars average for A+ tools.
No output schemas documented. Callers cannot predict response structure. 'echo' returns what? 'list_environments' returns what fields? 'dynamic_bruno_api_tools' returns status/headers/data but no field types or constraints. LLMs cannot plan downstream calls without knowing output shape.
'list_environments' has a dummy parameter 'random_string' with description 'Dummy parameter for no-parameter tools'. This is a code smell, the tool should accept zero required parameters. Dummy params confuse LLMs and waste tokens.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | <=2025-11-25 | v2 |
Parameter descriptions lack constraints. 'environment' (string) has no enum of valid values. 'variables' and 'query' accept any string but no format/length guidance. 'body' accepts any additionalProperties with no schema. LLMs will pass invalid values; no validation guidance in descriptions.
No error handling guidance. Handler code catches errors and returns {success: false, message: '...'} but does not categorize errors (retryable vs fatal) or suggest recovery steps. LLMs cannot decide whether to retry, ask user, or abort.