Skip to main content
Glama

Server Details

Diagnoses, drugs & lab codes: ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10. 33 tools, MIT.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
SidneyBissoli/medical-terminologies-mcp
GitHub Stars
16
Server Listing
Medical Terminologies MCP
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 33 tools

Disambiguation4/5

Each terminology has a clean, well-separated tool family (search/lookup/hierarchy/details), and descriptions include explicit 'Which tool' routing guidance. Minor overlap remains between find_equivalent, harmonize_terms, and per-terminology search tools, and between validate_codes' replaced_by, map_icd10_to_icd11, and terminology_diff, but the docs mostly disambiguate these.

Naming Consistency4/5

Overwhelmingly consistent terminology-prefixed snake_case (atc_classify, icd11_hierarchy, loinc_panels, mesh_tree, rxnorm_ndc, cid10_search) with predictable verb/noun structure. The only deviations are the bare Deep Research contract names search/fetch and cross-cutting names like find_equivalent and validate_codes, which are deliberate but break the prefix pattern.

Tool Count3/5

33 tools is heavy relative to the 3-15 sweet spot, though the surface genuinely spans seven terminologies plus mapping and batch utilities. Each tool earns a place, but the count is at the upper edge of what an agent can navigate without routing help.

Completeness4/5

Strong lifecycle coverage: search, lookup, hierarchy, details, and panels/answers for each terminology, plus cross-terminology mapping, batch harmonization, validation, and version metadata. Gaps are minor-to-moderate: no postcoordination composite builder, no drilling from CID-10 groups into their codes except via search/lookup, and no SNOMED or other common vocabularies.

Available Tools

33 tools
atc_classifyATC Classification for a DrugA
Read-onlyIdempotent
Inspect

Look up the WHO ATC (Anatomical Therapeutic Chemical) classification(s) for a drug by name.

Use this tool to:

  • Find the ATC code for a medication (e.g., "metformin" → A10BA02)

  • Identify the therapeutic and pharmacological class hierarchy

  • Cross-reference drugs with their international ATC codes

Returns one entry per ATC code the drug belongs to. A single-ingredient drug typically maps to one substance-level code; combination products map to multiple. ATC codes are international (WHO Collaborating Centre); this tool retrieves them via NLM RxClass.

Input is a drug NAME (brand or generic, English/US naming as in RxNorm). A name RxNorm does not recognize, or a drug without an ATC mapping, returns an empty matches list with an explanatory note — not an error; try the generic name, or resolve the name first with rxnorm_search.

Which ATC tool: start here when you have a drug name; use atc_lookup when you already have a class code (level 1-4, e.g. "A10BA") and want its name; use atc_members to list the drugs inside a class.

Inputs: drug_name (required). Returns: matches, drug_name, provenance, attribution

atc_lookupATC Code DetailsA
Read-onlyIdempotent
Inspect

Look up an ATC code at level 1-4 to get its name and hierarchy level.

Use this tool to:

  • Resolve an ATC code (e.g., "A10BA") to its class name ("Biguanides")

  • Confirm a code exists in the current ATC index

  • Identify the level (anatomical / therapeutic / pharmacological / chemical)

Accepts codes 1-5 characters long: "A" (anatomical), "A10" (therapeutic), "A10B" (pharmacological), "A10BA" (chemical). Substance-level codes (7 chars, e.g., "A10BA02") are not exposed by this endpoint — use atc_classify with the drug name to retrieve the substance code.

Inputs: atc_code (required). Returns: found, details, atc_code, provenance, +1 more

atc_membersATC Class MembersA
Read-onlyIdempotent
Inspect

List the drugs (substances) that belong to an ATC class.

Use this tool to:

  • Enumerate all members of a therapeutic class (e.g., "A10BA" → metformin, phenformin)

  • Build a list of drugs sharing a pharmacological mechanism

  • Explore an ATC subtree at any level

Each member includes its substance-level (7-char) ATC code via source_atc_code, useful for disambiguation when the queried class is at level 1-4. RxNorm's catalog is US-centric; the ATC class names and codes themselves are international.

Inputs: atc_code (required). Returns: members, atc_code, provenance, attribution

cid10_chapterCapítulo da CID-10A
Read-onlyIdempotent
Inspect

Get one CID-10 chapter and its constituent groups (e.g., "Chapter IX → I00-I02 Febre reumática aguda, I05-I09 Doenças reumáticas crônicas do coração, ...").

Use this tool to:

  • Drill from a chapter into its groups (code ranges with Portuguese titles)

  • Build hierarchical browsers

  • Find which group contains a code range

Provide the chapter number num as an integer 1-22 (chapter I = 1, IX = 9). Numbers outside 1-22 are rejected with a validation error. Returns the chapter (title and code range) plus ALL its groups in one response — no pagination; the 22 chapters hold 275 groups in total. Answered locally from the bundled CID-10 V2008; no network call.

Which CID-10 tool: use cid10_chapters first if you do not know the chapter number (it lists all 22 with code ranges); use cid10_lookup for one specific code and cid10_search to find codes by Portuguese text. For the international ICD-11, use icd11_chapters.

Inputs: num (required). Returns: num, found, groups, chapter, +2 more

cid10_chaptersCapítulos da CID-10A
Read-onlyIdempotent
Inspect

List the 22 chapters of CID-10 with their code ranges and Portuguese titles.

Use this tool to:

  • See the top-level structure of CID-10 (chapters I-XXII, e.g., "I. Algumas doenças infecciosas e parasitárias", "IX. Doenças do aparelho circulatório")

  • Map a code to its chapter by code range (e.g., I00-I99 → chapter IX)

  • Build a navigable table of contents for downstream tooling

Returns 22 entries — CID-10 V2008 has not been updated since 2008.

Inputs: no named parameters. Returns: chapters, provenance, attribution

cid10_lookupConsultar Código CID-10A
Read-onlyIdempotent
Inspect

Look up a specific CID-10 code and return its Portuguese name.

Use this tool to:

  • Resolve a code to its Brazilian description ("I21" → "Infarto agudo do miocárdio")

  • Confirm a 3-char category or 4-char subcategory exists in CID-10

  • Retrieve gender / cause-of-death restriction flags when applicable

Accepts both dotted ("A00.1") and undotted ("A001") forms; returns the canonical display.

Inputs: code (required). Returns: hit, code, found, provenance, +1 more

fetchDeep Research DocumentA
Read-onlyIdempotent
Inspect

Returns the full document for an id obtained from search, as { id, title, text, url, metadata }: text is the readable content (Markdown) and url the canonical public page to cite.

Companion of search in the OpenAI Deep Research contract, over the medical terminologies (CID-10 categories and chapters, ICD-11, LOINC, RxNorm, MeSH, terminology version records) catalog. Only ids returned by search are valid; an unknown id returns an error. The terminology tools (icd11_*, cid10_*, loinc_*, rxnorm_*, mesh_*, atc_*, map_*, find_equivalent, validate_codes) remain the tools for data queries.

Behavior: read-only and idempotent — a live GET against the public source when the document needs it.

Inputs: id (required). Returns: id, url, text, title, +3 more

find_equivalentFind Equivalents Across TerminologiesA
Read-onlyIdempotent
Inspect

Ranked unified search for equivalent terms across multiple medical terminologies.

Use this tool to:

  • Find the same concept in different coding systems

  • Compare how terminologies represent a concept

  • Support terminology mapping and data integration

Searches across: ICD-11, LOINC, RxNorm, and MeSH. Set target_terminologies to limit which are searched, or set source_terminology to exclude one (e.g. when you already have a code from that terminology and want equivalents elsewhere). The two combine: source is subtracted from targets. limit caps candidates per terminology (default 5, max 10).

Every candidate carries match_score (lexical similarity to the search term, 0-1) and rank (global position across all searched terminologies) — both computed by this server, since upstreams don't expose comparable relevance scores. Candidates from different terminologies whose titles are lexically identical are clustered in groups — a strong same-concept signal (absence of a group is NOT evidence of non-equivalence).

Searches upstreams in English. For official pt-BR content, use the dedicated tools: icd11_search/mesh_search accept language: "pt", and cid10_search is natively Portuguese.

Inputs: term (required), limit, source_terminology, target_terminologies. Returns: term, groups, ranking, results, +4 more

harmonize_termsHarmonize Free-Text Terms to Standard CodesA
Read-onlyIdempotent
Inspect

Map a LIST of free-text clinical terms to standard codes in one call, with ranked candidates and a confidence label for each — the building block of a reviewable crosswalk.

Use this tool to:

  • Harmonize a column of diagnoses, drugs or lab names from a dataset to ICD-11 / RxNorm (+ ATC) / LOINC

  • Triage which terms map cleanly (exact / strong) and which need a person (needs_review)

  • Build a crosswalk you can audit: every row keeps its candidates, scores and sources

Give each term its domain: diagnosis → ICD-11; drug → RxNorm concepts (ingredients first) plus the ATC classes of the term; lab → LOINC. Up to 50 terms per call — a longer list is refused with a validation error: split it into batches of 50. Repeated term+domain pairs are looked up once. max_candidates keeps 1-5 per term (default 3).

Every candidate carries match_score (lexical, 0-1, the find_equivalent formula) and match_type: exact = same words after normalization; strong = every term word is in the title (or the matched synonym) and score ≥ 0.85; needs_review = anything else. A one-word term is exact or needs_review, never strong ("Tylenol" vs "Tylenol PM" is a different product). Synonyms, abbreviations ("MI", "HbA1c") and misspellings land in needs_review or no_candidates — the label errs toward asking a person. Candidates sharing no word with the term are dropped, as are LOINC codes named "Deprecated". For diagnoses, a candidate is also scored against the synonyms WHO matched (e.g. "hypertension NOS" for Essential hypertension), reported in matched_label; postcoordinated clusters (codes with "/" or "&") are left out — build those with icd11_postcoordination. Lab names are ambiguous without specimen and property: "glucose" matches over a thousand LOINC codes, so write "glucose serum" or expect needs_review. One failed lookup does not fail the batch: that row comes back with status "error".

Terms are searched in English and sent to the WHO and NLM APIs — de-identify the list first. For Brazilian Portuguese diagnoses use cid10_search; to check codes you already have, use validate_codes; for one term across every terminology, use find_equivalent. Record the vocabulary versions with the provenance blocks (one per source) and terminology_versions.

Inputs: terms (required), max_candidates. Returns: total, counts, ranking, results, +3 more

icd11_chaptersList ICD-11 ChaptersA
Read-onlyIdempotent
Inspect

List all ICD-11 chapters (top-level categories) of the pinned WHO release.

Use this tool to:

  • Get an overview of ICD-11 structure

  • Find which chapter covers a body system or condition type

  • Get chapter URIs to drill down with icd11_hierarchy (direction 'children')

Returns 28 entries in one response, no pagination — chapters 01-26 plus the supplementary sections V (functioning) and X (extension codes) — each with number, code, title and URI. Each chapter is fetched separately from WHO; if one fetch fails, that entry keeps its URI and carries an error instead of a title, and the rest still come back. Set language for WHO's official translations (e.g. language: "pt"); the result is cached, so repeated calls are cheap.

When NOT to use: to find a specific disease, use icd11_search; for the Brazilian CID-10 (ICD-10) chapters, use cid10_chapters.

Inputs: language. Returns: chapters, provenance, attribution

icd11_hierarchyBrowse ICD-11 HierarchyA
Read-onlyIdempotent
Inspect

Navigate the ICD-11 hierarchy to find parent or child entities.

Use this tool to:

  • Find broader categories (parents) of a condition

  • Find specific subtypes (children) of a condition

  • Understand the classification structure

Name the entity by code (a leaf code like "5A11", or a block range like "5A10-5A2Y" — blocks come back from 'parents' with an empty code and a code_range) or by uri (the URI any previous answer returned). Direction 'parents' returns ancestor categories, 'children' returns subcategories. ICD-10 codes (like "E11") are not ICD-11 codes: convert them first with map_icd10_to_icd11.

Inputs: direction (required), uri, code, language. Returns: code, entities, direction, provenance, +1 more

icd11_lookupICD-11 Entity DetailsA
Read-onlyIdempotent
Inspect

Get detailed information about ONE ICD-11 entity you already have a code or URI for.

Use this tool to:

  • Get the full definition of a disease

  • Retrieve coding notes, inclusions and exclusions

  • Get the official title and index terms (synonyms)

Provide code (e.g., "BA00") or uri (any URI a previous answer returned) — at least one is required; calling with neither returns a validation error naming both. Set language for WHO's official translations (e.g. language: "pt" for official Portuguese).

Returns a single entity (no pagination). A code WHO does not know comes back as a "not found" error, never an empty record.

When NOT to use: to find a code from a disease name, use icd11_search first; to walk parents/children, use icd11_hierarchy; for an ICD-10 code (like "E11"), convert it with map_icd10_to_icd11 — ICD-10 codes are not ICD-11 codes.

Inputs: uri, code, language. Returns: uri, code, title, block_id, +12 more

icd11_postcoordinationICD-11 Postcoordination OptionsA
Read-onlyIdempotent
Inspect

List the postcoordination axes WHO allows for one ICD-11 stem code (MMS linearization, pinned release).

Postcoordination means attaching extra detail to a stem code — severity, laterality, anatomy, causing agent, etc. — to build a composite (cluster) code.

Use this tool to:

  • See which axes a stem code accepts before building a composite code

  • Check which axes are REQUIRED vs optional

  • See whether an axis takes one or several values, and how many values it offers

Provide an ICD-11 code (e.g., "BA00"). Returns one entry per axis with axis_name, required, allow_multiple and value_count — the count of allowed values, not the values themselves. A code with no postcoordination, or one WHO does not know, returns an empty axes list (not an error), so check the code with icd11_lookup if the list is unexpectedly empty.

When NOT to use: this does not build or validate a composite code, and it does not list the allowed values; to get a code from a disease name, use icd11_search.

Inputs: code (required). Returns: axes, code, provenance, attribution

loinc_answersLOINC Answer ListsA
Read-onlyIdempotent
Inspect

Get the list of valid answers for a LOINC questionnaire item.

Use this tool to:

  • Find valid response options for survey questions

  • Get answer codes (LA…) for data entry validation

  • Get the item scores of scored instruments (e.g. PHQ-9: "Not at all" = 0 … "Nearly every day" = 3)

Returns each answer with its LOINC answer code (LA…), text, display order and score (null when the list has none). A valid LOINC code without a defined answer list (e.g. a numeric lab such as 2339-0) returns an empty list; a code LOINC does not know returns a "not found" error.

Only applicable to LOINC codes that represent questions with defined answer sets. For the questions of a whole questionnaire, use loinc_panels; to find a code by name, use loinc_search.

Inputs: loinc_num (required). Returns: answers, loinc_num, provenance, attribution

loinc_detailsLOINC Code DetailsA
Read-onlyIdempotent
Inspect

Get detailed information about a specific LOINC code.

Use this tool to:

  • Get the full name and description of a LOINC code

  • Find the component, property, timing, and system

  • Check the scale type and method

Provide a LOINC number in format "XXXXX-X" (e.g., "2339-0" for Glucose).

Inputs: loinc_num (required). Returns: class, status, system, property, +10 more

loinc_panelsLOINC Panel StructureA
Read-onlyIdempotent
Inspect

Get the structure of a LOINC panel or form.

Use this tool to:

  • See all tests included in a panel (e.g., CBC, metabolic panel)

  • Get the structure of assessment forms

  • Find related observations grouped together

Returns the list of LOINC codes that make up the panel.

Inputs: loinc_num (required). Returns: panel, loinc_num, provenance, attribution

map_icd10_to_icd11Map ICD-10 to ICD-11A
Read-onlyIdempotent
Inspect

Authoritative ICD-10 → ICD-11 mapping using WHO transition tables (release 2025-01, bundled with the server).

Returns the primary 1:1 ICD-11 category for the ICD-10 code plus any alternative ICD-11 candidates that WHO documents (some ICD-10 concepts split into multiple ICD-11 entities). For each mapping, includes the ICD-11 code, title, chapter, and the Foundation URI / Linearization URI for navigating to the full entity definition.

Use this for clinical coding, billing migration, retrospective analysis, and any workflow that needs authoritative mapping rather than text-search candidates. Coverage: 11,243 ICD-10 categories (excludes chapters and blocks like "A00-A09" which aren't used in clinical coding).

Provide a code like "E11" (Type 2 diabetes), "I21" (Acute MI), or "A07.8" (4 alternatives in WHO's table). Both dotted ("A07.8") and undotted ("A078") forms are accepted.

Returns "no mapping" when the code isn't in the WHO category-level table — that's the honest answer rather than a fuzzy search fallback.

Inputs: icd10_code (required). Returns: found, icd10, query, source, +4 more

mesh_descriptorMeSH Descriptor DetailsA
Read-onlyIdempotent
Inspect

Get detailed information about a MeSH descriptor by ID.

Use this tool to:

  • Get the full definition (scope note) of a MeSH term

  • View tree numbers showing hierarchy location

  • See related concepts and synonyms

Provide a MeSH Descriptor ID like "D015242" (Ofloxacin). Set language to request NLM's official translations where they exist (e.g. language: "pt").

Inputs: mesh_id (required), language. Returns: id, uri, label, concepts, +5 more

mesh_qualifiersMeSH Allowable QualifiersA
Read-onlyIdempotent
Inspect

Get allowed qualifiers (subheadings) for a MeSH descriptor.

Use this tool to:

  • Find which qualifiers can be combined with a descriptor

  • Build precise MeSH search queries

  • Understand aspects that can be specified

Qualifiers refine descriptors (e.g., "Diabetes Mellitus/drug therapy").

Inputs: mesh_id (required). Returns: mesh_id, provenance, qualifiers, attribution

mesh_treeMeSH Tree LocationsA
Read-onlyIdempotent
Inspect

Get the tree hierarchy location(s) for a MeSH descriptor.

Use this tool to:

  • See where a term fits in the MeSH hierarchy

  • Understand broader/narrower relationships

  • Find related terms in the same branch

MeSH tree numbers show the hierarchical path (e.g., C14.280.647 for Myocardial Infarction).

Inputs: mesh_id (required). Returns: mesh_id, provenance, attribution, tree_numbers

rxnorm_classesRxNorm Drug ClassesB
Read-onlyIdempotent
Inspect

Get therapeutic and pharmacologic classes for a drug.

Use this tool to:

  • Find the drug class (e.g., "Beta-blockers", "NSAIDs")

  • Identify therapeutic categories

  • Look up mechanism of action classifications

Returns class IDs, names, and classification sources.

Inputs: rxcui (required). Returns: rxcui, classes, provenance, attribution

rxnorm_conceptRxNorm Concept DetailsA
Read-onlyIdempotent
Inspect

Get detailed information about a specific RxNorm concept by RxCUI.

Use this tool to:

  • Get the full name and synonyms for a drug

  • Check the concept status (active, remapped, etc.)

  • View related concepts (ingredients, brands, forms)

Provide an RxCUI (RxNorm Concept Unique Identifier) like "161" — as a string of digits or as an integer.

Inputs: rxcui (required), include_related. Returns: tty, name, found, rxcui, +9 more

rxnorm_ingredientsRxNorm Drug IngredientsA
Read-onlyIdempotent
Inspect

Get active ingredients for a drug by RxCUI.

Use this tool to:

  • Find the active ingredients in a medication

  • Check for single vs. multiple ingredient products

  • Identify the generic components of brand drugs

Returns ingredient RxCUIs and names.

Inputs: rxcui (required). Returns: rxcui, provenance, attribution, ingredients

rxnorm_ndcRxNorm / NDC MappingA
Read-onlyIdempotent
Inspect

Map between RxNorm concepts and National Drug Codes (NDC).

Use this tool to:

  • Get all NDC codes for a drug (by RxCUI)

  • Find the RxCUI for an NDC code

  • Cross-reference between coding systems

Provide either an RxCUI to get NDCs, or an NDC to get the RxCUI.

Inputs: ndc, rxcui. Returns: ndc, ndcs, rxcui, provenance, +2 more

terminology_diffTerminology Version DiffA
Read-onlyIdempotent
Inspect

Report what diff data is available between two versions of a terminology.

For most terminologies this is guidance only — the server doesn't ship historical snapshots, so the tool points at the publisher's official changelog and explains the cadence. bundled_versions lists the version(s) this server actually has on hand.

For ICD-10 vs ICD-11 specifically, the tool surfaces a real cross-revision summary from the bundled WHO transition tables (the ICD-10 → ICD-11 case is a structural diff between two WHO revisions). Use terminology: "icd10" with no to_version to get the cross-revision summary: total mapped ICD-10 categories, how many are 1:1 vs split into multiple ICD-11 codes, and the average number of alternatives when split.

Inputs:

  • terminology (required): which terminology to report on.

  • from_version (optional): the version you have data from. If omitted, the tool reports against the currently-bundled version.

  • to_version (optional): the version you want to compare to. If omitted, the tool reports against the publisher's latest known release.

This tool is intentionally a metadata + guidance layer, not a diff engine — for terminologies that change frequently (LOINC, RxNorm, MeSH), the publisher's official changelog is the authoritative source.

Inputs: terminology (required), to_version, from_version. Returns: message, provenance, to_version, attribution, +6 more

terminology_versionsTerminology VersionsA
Read-onlyIdempotent
Inspect

List the current version, release date, publisher, source URL, and update cadence of every terminology this server queries against.

Useful for pipeline maintainers who need to:

  • Confirm which release of ICD-11 / LOINC / RxNorm / MeSH / ATC the server is querying before a batch run.

  • Verify the bundled CID-10 (frozen at V2008) and ICD-10 → ICD-11 transition tables (currently 2025-01) match expectations.

  • Cite the data version in research artifacts.

Pass terminology to filter to a single entry; otherwise the full set of 7 is returned. The ICD-10 → ICD-11 version reads live from the bundled dataset; everything else is metadata maintained alongside the project release.

Inputs: terminology. Returns: total, generated, provenance, attribution, +1 more

validate_codesValidate Medical CodesA
Read-onlyIdempotent
Inspect

Validate a mixed batch of medical codes against their source terminologies. Useful for retrospective analysis of legacy databases — flag codes that no longer exist, surface ICD-10 → ICD-11 replacements, and grade activity status where the terminology exposes it.

For each input { code, terminology }, returns:

  • valid: whether the code exists in the source terminology.

  • active: whether the code is currently active. Null when the source doesn't expose an explicit active/inactive distinction at category level (CID-10, ATC, ICD-11, RxNorm, MeSH all return null today; LOINC returns a real boolean).

  • title: the official label/name when available.

  • replaced_by: a successor code, populated today only for ICD-10 codes that have a primary ICD-11 mapping in the bundled WHO transition tables.

  • source: human-readable provenance of the validation (terminology + release/version).

  • error: non-null only when validation couldn't be performed (network error, upstream outage, etc.). valid: false + error: null means "code not found"; valid: false + error: set means "couldn't validate".

Terminology is required per code — auto-detection isn't supported because category codes like "A00" exist in both ICD-10 and CID-10. Accepted values: icd11, icd10, loinc, rxnorm, mesh, atc, cid10.

Hard cap of 50 codes per call; codes are validated in parallel through their respective clients, so total wall time scales with the slowest upstream + its rate limit (worst case ~10 s for a full batch hitting ICD-11).

Inputs: codes (required). Returns: total, results, provenance, attribution, +3 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Search medical codes including ICD-10, LOINC, and clinical terms for conditions, procedures, and drugs via natural language queries.
      293 npm
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Provides AI agents with instant access to 10M+ OMOP medical vocabulary concepts for searching, mapping, and navigating clinical codes across SNOMED, ICD-10, RxNorm, LOINC, and more.
      11
      118 npm
      6
      MIT
    • F
      license
      A
      quality
      C
      maintenance
      Three composable MCP servers for clinical AI — FHIR R4 read/search/validate, medical terminology (LOINC/SNOMED/RxNorm/ICD-10), and drug safety reasoning (interactions, dose check, allergy). Apache-2.0, production-ready.
      5
      -
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.