@pipeworx/mondo
Connect: https://gateway.pipeworx.io/mondo/mcp · Install: one-click buttons
Tools: 1
Resolves free-text condition/disease strings — clinical trial registry “conditions” fields, drug-label indication wording, anything a caller typed by hand — onto the Mondo Disease Ontology (MONDO), with a match-quality label the caller can trust and cross-ontology xrefs for the matched term.
Tools
-
mondo_resolve_condition(conditions, expand?)— batch-resolves 1-25 free-text condition strings. For each, returns the original wording verbatim, the best MONDO id + label, andmatch_quality:exact-label— identical (case/punctuation-insensitive) to the term’s primary Mondo label.exact-synonym— identical to one of the term’s listed exact synonyms.broader/narrower— the string exactly names a parent or child term reached via the Mondo hierarchy, not the top full-text hit itself. This includes a fixed-prefix strip of a LEADING stage/status qualifier a registry stacks onto the front of a disease name — “Stage IV Melanoma”, “Metastatic Breast Cancer”, “Recurrent X” — when the remainder after stripping is an exact label/synonym match, the response isbroader(the input names a subtype/stage of the matched disease) with a note listing what was stripped.fuzzy— the closest full-text match from EBI OLS4, not a confirmed exact term. Never presented as exact.no-match— nothing plausible found. The response says what queries were tried (including relaxed variants — stripped parentheticals, un-inverted “Specific, General” MeSH form, progressively truncated trailing qualifiers like “Stage IV”) and lists nearest candidates when the relaxation surfaced any. Never a bare empty result (docs/silent-zero-policy.md).
Every non-
no-matchresult also carriesxrefs(OMIM, Orphanet, DOID, UMLS, MeSH) for the resolved id, pulled from the MyDisease.info record. Passexpand: trueto also getdescendant_mondo_ids— every subtype under the resolved term, capped at 500 — for building a subtype-inclusive registry filter (e.g. “any subtype of non-small cell lung carcinoma”).The match_quality label is the product. A fuzzy or hierarchical match is never upgraded to “exact” — a caller doing a clinical-safety check or building a registry filter needs to know the difference.
No second tool: term detail, hierarchy walking (ancestors/children) and raw
Mondo search already live in the ebi-ols pack — this pack only adds the
resolution + match-quality layer on top, so it doesn’t duplicate that surface.
Auth
Keyless. Both upstreams are public, unauthenticated APIs.
Data sources
- https://www.ebi.ac.uk/ols4/api/search (EBI Ontology Lookup Service,
restricted to
ontology=mondo) — full-text search over Mondo terms, with primary labels and exact/related synonyms. Same upstream theebi-olspack proxies; called directly here rather than chained through that pack. - https://mydisease.info/v1/disease/{id} (MyDisease.info, BioThings) —
per-term Mondo record: cross-ontology xrefs (
mondo.xrefs.omim/.omimps,.orphanet,.doid,.umls,.mesh) and the full transitivemondo.ancestors/mondo.descendantsid lists, used both for the broader/narrower hierarchy check and theexpandflag. Same upstream themydiseasepack proxies; called directly here rather than chained through that pack.
Matching notes for the next person:
- Normalization is case-insensitive and treats any run of non-alphanumeric
characters (hyphens, commas, punctuation) as a single space, so
“Non-small Cell Lung Cancer” and “non small cell lung cancer” compare
equal. It does not do stemming or synonym expansion beyond what OLS4
already returns as
exact_synonyms— a string that isn’t in that list will not register as exact even if a human would consider it a paraphrase. - MeSH’s inverted “Specific, General” comma form (“Carcinoma, Non-Small-Cell Lung”) is the dominant condition shape in trial registries, so it’s un-inverted (“Non-Small-Cell Lung Carcinoma”) and checked for an exact match alongside the literal string before falling back to fuzzy — a fixed rewrite of a known convention counts as exact, not a guess.
- The leading-qualifier strip (
STAGE_QUALIFIER_RE/STATUS_QUALIFIER_REinsrc/index.ts) is a small, fixed, ordered list — a stage marker (“Stage IV”, “Stage IIIA”) or one ofmetastatic/recurrent/advanced/refractory/unresectable/relapsed/relapsing/progressive/localized/localised— checked BEFORE the trailing- word relaxation ladder, since it applies whether the literal string got zero hits (“Stage IV Melanoma”) or some non-exact hits (“Metastatic Breast Cancer” already surfaces “breast cancer” as its top full-text hit, just not exactly). Deterministic prefix matching only, up to 3 passes, so a stacked “Advanced Metastatic Melanoma” strips both words. - OLS4’s
exact=truesearch param did not reliably restrict results to exact matches when tested live (2026-09) — exactness is instead determined client-side by comparing normalized query text against each candidate’s label and exact synonyms. - The
omimxref sometimes appears asomimps(OMIM phenotypic series) instead ofomimin the MyDisease record; both are merged into the returnedomimarray. - Every OLS4/MyDisease fetch is bounded via
fetchWithTimeout; a MyDisease enrichment failure degrades to empty xrefs rather than failing the whole resolution (the OLS4 match still stands on its own).
Tools
- mondo_resolve_condition — Resolve free-text condition/disease strings — e.g. a clinical trial registry’s “conditions” field (“Carcinoma, Non-Small-Cell Lung”), or a drug label’s Indications and Usage wording — onto the Mondo D
Tools
-
mondo_resolve_condition— Resolve free-text condition/disease strings — e.g. a clinical trial registry's conditions field ( Carcinoma, Non-Small-Cell Lung ), or a drug label's Indications and Usage wording — onto the Mondo Dis