MCP server for Open Masala — ancestry-adjusted health reference ranges (South Asian biomarker cutoffs, cited).
Six tools with clear, domain-specific names (list_measures, get_reference, evaluate_value, screening_for, search, list_sources) and comprehensive descriptions (100 - 250 chars each). All parameters have type annotations and descriptions. However, output schemas are not explicitly documented in the source, only inferred from docstrings. Tool descriptions are excellent for domain context but lack explicit guidance on when to call each tool vs. alternatives. No error handling guidance visible (e.g., what happens if an analyte is not found). Security is strong (stateless, read-only, no secrets), but parameter validation rules are not documented.
Evaluate a person's own measured value against the SOUTH-ASIAN-adjusted threshold/range for an analyte, returning a status plus the cited rationale and overclaim guard. STATELESS: the value is used only to compute this response; nothing is stored. A reference lookup, not a diagnosis. Pass `sex` for sex-split analytes (HDL, waist) — omitting it returns `ambiguous_needs_sex` rather than guessing. Pass `unit` to catch a mg/dL-vs-mmol/L mismatch. `status` may be: flag / within_reference / category (BMI bands) / screening_applies / caveat / do_not_apply / composite_needs_multiple_inputs / ambiguous_needs_sex / unit_mismatch / no_south_asian_reference.
Get the ancestry-adjusted reference range(s)/threshold(s) for an analyte, each paired with the general-population value, provenance tier, evidence grade, citations, and overclaim guard. Matches a LOINC/internal code, id, or name. The `code_system` field says whether `loinc` is a real LOINC code or an internal `PRAJNA-*` placeholder.
List every analyte / measure in the dataset — what ancestry-adjusted coverage exists. Start here.
List every unique citation backing the dataset (label, url, ref, kind).
Which South-Asian-specific screenings/thresholds apply to a person of this age (and optional sex). Cited. Not a care plan — a prompt to discuss with a clinician.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'status plus cited rationale') but do not specify the JSON structure, field names, or types. LLMs cannot plan downstream operations without knowing response shape.
No error handling guidance. Descriptions do not explain what happens if an analyte is not found, if a value is out of range, or if required parameters (sex, age) are missing. LLMs have no recovery path.
Parameter constraints not formalized. 'sex' accepts 'male' or 'female' but is documented as free-form string. Should be an enum. 'age' has no min/max bounds documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Free-text search across analyte names, notes, overclaim guards, and source labels, with a lay/clinical synonym layer (e.g. "cholesterol", "sugar", "kidney"). Use when you don't know the exact analyte name.
No pagination or result limits documented. list_measures and list_sources return all items; no indication of max result size or whether pagination is supported.
Tool selection guidance missing. Six tools operate on overlapping domains (search vs. get_reference, list_measures vs. search). Descriptions do not explain when to prefer one over another.