Medical Terminologies MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | pino log level (default: info). | |
| WHO_CLIENT_ID | No | WHO ICD-API client ID. Required only for the 5 ICD-11 tools; all other tools work without credentials. | |
| SNOMED_BASE_URL | No | Base URL of a self-hosted Snowstorm instance. | |
| SNOMED_LANGUAGE | No | Default Accept-Language for SNOMED requests. | |
| WHO_CLIENT_SECRET | No | WHO ICD-API client secret (pairs with WHO_CLIENT_ID). | |
| ENABLE_SNOMED_TOOLS | No | Set to 'true' to enable the 6 SNOMED tools. Requires SNOMED_BASE_URL. | |
| WHO_ICD11_RELEASE_ID | No | ICD-11 release ID (default: 2024-01). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| icd11_searchA | Search for medical conditions, diseases, and health problems in ICD-11 (International Classification of Diseases, 11th Revision). Use this tool to:
Set Returns matching entities with codes, titles, and relevance scores. |
| icd11_lookupA | Get detailed information about ONE ICD-11 entity you already have a code or URI for. Use this tool to:
Provide 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. |
| icd11_hierarchyA | Navigate the ICD-11 hierarchy to find parent or child entities. Use this tool to:
Name the entity by |
| icd11_chaptersA | List all ICD-11 chapters (top-level categories) of the pinned WHO release. Use this tool to:
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 When NOT to use: to find a specific disease, use icd11_search; for the Brazilian CID-10 (ICD-10) chapters, use cid10_chapters. |
| icd11_postcoordinationA | 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:
Provide an ICD-11 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. |
| loinc_searchA | Search for laboratory tests, clinical observations, and measurements in LOINC (Logical Observation Identifiers Names and Codes). Use this tool to:
Returns matching LOINC codes with names, components, and properties. |
| loinc_detailsA | Get detailed information about a specific LOINC code. Use this tool to:
Provide a LOINC number in format "XXXXX-X" (e.g., "2339-0" for Glucose). |
| loinc_answersA | Get the list of valid answers for a LOINC questionnaire item. Use this tool to:
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. |
| loinc_panelsA | Get the structure of a LOINC panel or form. Use this tool to:
Returns the list of LOINC codes that make up the panel. |
| rxnorm_searchA | Search for drugs in RxNorm (Normalized names for clinical drugs). Use this tool to:
Returns matching drugs with RxCUI identifiers, names, and term types. |
| rxnorm_conceptA | Get detailed information about a specific RxNorm concept by RxCUI. Use this tool to:
Provide an RxCUI (RxNorm Concept Unique Identifier) like "161" — as a string of digits or as an integer. |
| rxnorm_ingredientsA | Get active ingredients for a drug by RxCUI. Use this tool to:
Returns ingredient RxCUIs and names. |
| rxnorm_classesA | Get therapeutic and pharmacologic classes for a drug. Use this tool to:
Returns class IDs, names, and classification sources. |
| rxnorm_ndcA | Map between RxNorm concepts and National Drug Codes (NDC). Use this tool to:
Provide either an RxCUI to get NDCs, or an NDC to get the RxCUI. |
| mesh_searchA | Search for MeSH (Medical Subject Headings) descriptors. Use this tool to:
Set Returns matching descriptors with MeSH IDs and labels. |
| mesh_descriptorA | Get detailed information about a MeSH descriptor by ID. Use this tool to:
Provide a MeSH Descriptor ID like "D015242" (Ofloxacin). Set |
| mesh_treeA | Get the tree hierarchy location(s) for a MeSH descriptor. Use this tool to:
MeSH tree numbers show the hierarchical path (e.g., C14.280.647 for Myocardial Infarction). |
| mesh_qualifiersA | Get allowed qualifiers (subheadings) for a MeSH descriptor. Use this tool to:
Qualifiers refine descriptors (e.g., "Diabetes Mellitus/drug therapy"). |
| map_icd10_to_icd11A | 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. |
| validate_codesA | 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
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: 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). |
| find_equivalentA | Ranked unified search for equivalent terms across multiple medical terminologies. Use this tool to:
Searches across: ICD-11, LOINC, RxNorm, and MeSH. Set Every candidate carries Searches upstreams in English. For official pt-BR content, use the dedicated tools: |
| harmonize_termsA | 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:
Give each term its Every candidate carries 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. |
| atc_classifyA | Look up the WHO ATC (Anatomical Therapeutic Chemical) classification(s) for a drug by name. Use this tool to:
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 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. |
| atc_lookupA | Look up an ATC code at level 1-4 to get its name and hierarchy level. Use this tool to:
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. |
| atc_membersA | List the drugs (substances) that belong to an ATC class. Use this tool to:
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. |
| cid10_searchA | Search the Brazilian CID-10 (Classificação Estatística Internacional de Doenças, 10ª Revisão) by Portuguese text. Use this tool to:
Returns matches from CID-10 categories (3-char) and/or subcategories (4-char). Search is diacritic-insensitive: typing "infeccoes" matches "infecções". Every word must match (AND), and everyday Portuguese is resolved to the CID-10's own wording (câncer→neoplasia maligna, AVC→acidente vascular cerebral, pressão alta→hipertensão, suicídio→lesão autoprovocada, aids→HIV); when that happens the response says so in vocabulary_notes. This tool searches the Brazilian Portuguese CID-10 V2008 — for the international ICD-11 (current WHO revision, in English by default), use icd11_search. |
| cid10_lookupA | Look up a specific CID-10 code and return its Portuguese name. Use this tool to:
Accepts both dotted ("A00.1") and undotted ("A001") forms; returns the canonical display. |
| cid10_chaptersA | List the 22 chapters of CID-10 with their code ranges and Portuguese titles. Use this tool to:
Returns 22 entries — CID-10 V2008 has not been updated since 2008. |
| cid10_chapterA | 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:
Provide the chapter number 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. |
| terminology_versionsA | 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:
Pass |
| terminology_diffA | 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. 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 Inputs:
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. |
| searchA | Searches the medical terminologies (CID-10 categories and chapters, ICD-11, LOINC, RxNorm, MeSH, terminology version records) catalog and returns up to 10 matching documents as { id, title, url }, ordered by relevance (an empty list means nothing matched). This tool exists for the OpenAI Deep Research contract: ChatGPT deep research, company knowledge and research workflows over the Responses API require exactly the tools Query: natural language or keywords, Portuguese or English; accents and case are ignored. Behavior: read-only and idempotent — the catalog comes from the public source and is cached in memory. |
| fetchA | Returns the full document for an id obtained from Companion of Behavior: read-only and idempotent — a live GET against the public source when the document needs it. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| find-medical-code | Search a clinical condition, symptom, or medical term across all available terminologies (ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10) in parallel and synthesize the matches with their codes and source terminology. |
| drug-info | Compile comprehensive information about a drug — normalized name, RxCUI, active ingredients, therapeutic classes, and WHO ATC classification — by composing RxNorm and ATC tool calls. |
| cid10-portuguese-lookup | Procura um termo médico em português no CID-10 brasileiro (DataSUS V2008), com contexto de capítulo e descrição clínica. Searches a Portuguese medical term in the Brazilian CID-10 with chapter context. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Server info | Version, tool count, supported terminologies, and feature-flag state. Useful for LLMs to ground answers about server capabilities. |
| CID-10 chapters | List of the 22 CID-10 chapters (Brazilian Portuguese ICD-10, DataSUS V2008) with code ranges and Portuguese descriptions. Source: bundled CID-10 dataset. |
| Terminology licenses | Per-terminology license disclaimers and access requirements. Important for downstream redistribution decisions and for surfacing license constraints in LLM answers. |
| Usage stats (hosted endpoint) | Per-tool invocation counts and total successful dispatches recorded by the hosted Cloudflare Workers endpoint. Excludes local stdio installs (those have no shared counter by design). Useful for adoption signal — see top_tool to know which terminology is pulling the most demand. |
TDQS
Scored across 33 tools
Tools are well-partitioned by terminology prefix (icd11_*, cid10_*, loinc_*, rxnorm_*, mesh_*, atc_*), and descriptions explicitly add 'when NOT to use' notes. Minor overlap remains between atc_classify/rxnorm_classes (both describe drug classes) and among the cross-terminology search trio (search, find_equivalent, harmonize_terms), plus the easy-to-swap cid10_chapter vs cid10_chapters pair.
Dominant pattern is {terminology}_{action} (icd11_search, loinc_details, rxnorm_concept, mesh_tree) which is highly predictable. Deviations are the bare 'search'/'fetch' pair and the cross-terminology verbs (find_equivalent, harmonize_terms, validate_codes) that lack a namespace prefix, but overall conventions are coherent.
33 tools is on the heavy side, but the scope spans seven vocabularies plus mapping utilities, and each terminology carries a proportionate 3-5 tool surface (search/lookup/detail/hierarchy). The bolted-on search/fetch pair for the Deep Research contract adds two tools that aren't domain-specific.
Coverage is broad and lifecycle-complete for each terminology (search, lookup, details, hierarchy), plus mapping (map_icd10_to_icd11), validation, harmonization, and cross-terminology equivalence. Minor gaps: no reverse ICD-11→ICD-10 mapping and no standalone international ICD-10 lookup distinct from the Brazilian CID-10 surface.