A safe Model Context Protocol server for the CSIRO ASKAP Science Data Archive
CASDA MCP demonstrates solid definition quality with well-structured schemas, comprehensive parameter descriptions, and proper tool annotations. Both tools have complete input schemas with typed fields and detailed descriptions. casda_search_products is particularly strong with 15 well-documented parameters covering spatial, temporal, and spectral filtering. Tool descriptions clearly state read-only semantics and safety constraints. However, output schemas are not explicitly documented in the visible code, and the second tool (casda_get_product) has a minimal description. Error handling is present but recovery guidance is limited. Tool composition is clean, each tool has a single responsibility. Naming follows verb_noun convention appropriately.
Get CASDA product
Search product metadata with a safely generated, bounded TAP/ADQL query. This read-only tool performs no staging, download, filesystem write, source-name resolution, or unrestricted ADQL. Spatial coordinates are ICRS degrees and frequencies are hertz.
casda_get_product has minimal description ('Get CASDA product'). LLM cannot determine when to use this vs search_products or what it returns.
Output schemas not documented in visible code. casda_search_products returns SearchProductsResponse and casda_get_product returns GetProductResponse, but these response structures are not shown in the provided source. LLMs cannot plan downstream tool calls without knowing response fields.
Error handling uses generic ToolError with JSON serialization. While CasdaError.as_dict() is called, the visible code does not show recovery guidance (e.g., 'Try search_products() first' or 'Invalid radius: must be 0-10 degrees'). Errors should guide LLM recovery.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | <=2025-11-25 | v2 |
casda_search_products has 15 parameters, some with complex interdependencies (e.g., spatial params ra_deg/dec_deg/radius_deg vs source_name). Dependencies are not explicitly documented in parameter descriptions, risking LLM confusion about which combinations are valid.
No pagination guidance in visible output. casda_search_products accepts page/page_size/cursor parameters, but the response structure and total count field are not shown. LLMs need to know if results are capped and how to fetch more.