MCP Server for the British Science Museum
Four search tools with identical schemas and minimal differentiation. All tools have basic descriptions (40-50 chars) and proper JSON Schema with required/optional fields. However, descriptions lack context on WHEN to use each tool vs. alternatives, and parameter descriptions are generic. No output schema documented. Error handling returns plain text without recovery guidance. Tool names follow verb_noun pattern but lack semantic distinction, all four are search_* variants operating on the same API with identical parameters, creating LLM disambiguation burden.
Tool to search all categories of the Science Museum API
Tool to search documents in the Science Museum API
Tool to search objects of the Science Museum API
Tool to search people in the Science Museum API
Four nearly identical tools with no semantic differentiation. All named search_* with identical parameter schemas (search_term, limit, offset). LLMs cannot distinguish when to call search_all vs search_objects without trial-and-error.
Tool descriptions are 40-50 characters and lack context. No explanation of WHEN to use each tool, what distinguishes search_all from search_objects, or what data each returns. Descriptions do not answer: 'When should I call this instead of the other search tools?'
No output schema documented. Callers cannot know what fields to expect from the API response. Code returns JSON-stringified dict with 'records', 'message', 'success', 'number_of_records', but LLMs have no schema to plan downstream extraction.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
Error handling returns plain text ('Tool encountered an error {e}. Please report this to the github page.') with no recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal.
Parameter descriptions are generic ('The search term to query', 'Maximum number of results to return'). No guidance on format, constraints, or examples. 'search_term' description does not explain what fields are searched or expected input format.