MCP server for extracting audio metadata from Beatport track URLs
Single tool with a reasonable description and basic parameter definition, but incomplete schema documentation. The tool name follows verb_noun convention (get_beatport_metadata). Description is adequate at ~220 chars but lacks explicit output schema definition. Input schema visible with type but missing examples and constraints. Error handling is basic, returns status/message structure but without recovery guidance. No input validation constraints (enums, ranges, patterns) declared in schema. The tool lacks idempotency hints, destructive/read-only markers, and structured error taxonomy.
Extract audio metadata from a Beatport track URL. Args: url: The Beatport track URL (e.g., https://www.beatport.com/track/track-name/123456) Returns: A dictionary containing: - status: "success" or "error" - track: Dictionary with title, url, audio_url, image_url, platform (on success) - message: Error message (on error)
Output schema not documented. The function returns a dict with status/track/message fields, but the return type structure is only described in prose within the docstring, not as a formal JSON Schema. LLMs cannot reliably parse unstructured text-only schema definitions.
URL parameter lacks validation constraints. Description mentions 'valid URLs typically start with https://www.beatport.com/track/' but does not declare this as a regex pattern, enum, or format constraint in the schema. LLMs cannot enforce constraints that are only in prose.
Error responses lack recovery guidance. When is_valid_beatport_url() returns false or extract_audio_metadata() fails, the tool returns a plain error message ('Invalid Beatport URL...' or 'The track might be unavailable...') without suggesting next steps, e.g., 'Try a different URL' or 'Call verify_beatport_track() first.' LLMs cannot infer recovery without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
No tool annotations present. The tool should declare readOnlyHint=true (safe to call repeatedly) and include idempotentHint=true to signal to agents that repeated calls with the same URL are safe. Missing annotations force agents to reason about side effects without explicit guidance.
Error classification absent. Errors from extract_audio_metadata() (network timeouts, HTML parsing failures, missing fields) are bundled into a single 'unavailable or removed' message. Agents cannot distinguish retryable failures (timeout) from fatal ones (invalid URL), leading to wasted retries or premature abort.
Parameter description does not specify format or constraints. The url parameter description mentions example format but includes a literal example URL (https://www.beatport.com/track/track-name/123456). LLMs may treat this as a template and pass invalid variations. Replace with a formal regex or format declaration.