Medical Terminologies MCP
About
Unified access to global medical terminologies: ICD-11, SNOMED CT, LOINC, RxNorm, MeSH. 27 tools for medical coding, terminology lookup, and crosswalk mappings.
Details
- Transport
- SSE
Explore
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Medical Terminologies MCPCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
icd11_search
Search for medical conditions, diseases, and health problems in ICD-11 (International Classification of Diseases, 11th Revision). Use this tool to: - Find ICD-11 codes for diagnoses - Search for diseases by name or keyword - Look up conditions in multiple languages Returns matching entities with codes, titles, and relevance scores.
icd11_lookup
Get detailed information about a specific ICD-11 entity by code or URI. Use this tool to: - Get the full definition of a disease - Retrieve coding notes and exclusions - Get the official title and synonyms Provide either an ICD-11 code (e.g., "BA00") or a full foundation URI.
icd11_hierarchy
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 Direction 'parents' returns ancestor categories, 'children' returns subcategories.
icd11_chapters
List all ICD-11 chapters (top-level categories). Use this tool to: - Get an overview of ICD-11 structure - Find which chapter covers a body system or condition type - Navigate to specific disease categories ICD-11 has 28 chapters covering all areas of medicine.
icd11_postcoordination
Get postcoordination information for an ICD-11 code. Use this tool to: - Find available axes for building composite codes - Check required vs optional postcoordination - Understand code extension possibilities Postcoordination allows adding severity, laterality, anatomy, etc.
loinc_search
Search for laboratory tests, clinical observations, and measurements in LOINC (Logical Observation Identifiers Names and Codes). Use this tool to: - Find LOINC codes for lab tests (e.g., "glucose", "hemoglobin") - Search for clinical measurements and vital signs - Look up diagnostic observations Returns matching LOINC codes with names, components, and properties.
loinc_details
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).
loinc_answers
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 for data entry validation - Look up standardized answer lists Only applicable to LOINC codes that represent questions with defined answer sets.
loinc_panels
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.
rxnorm_search
Search for drugs in RxNorm (Normalized names for clinical drugs). Use this tool to: - Find drug concepts by brand or generic name - Look up medications for prescribing - Search for drug formulations Returns matching drugs with RxCUI identifiers, names, and term types.
rxnorm_concept
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".
rxnorm_ingredients
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.
rxnorm_classes
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.
rxnorm_ndc
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.
mesh_search
Search for MeSH (Medical Subject Headings) descriptors. Use this tool to: - Find MeSH terms for indexing medical literature - Look up subject headings for PubMed searches - Find controlled vocabulary terms Returns matching descriptors with MeSH IDs and labels.
mesh_descriptor
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).
mesh_tree
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).
mesh_qualifiers
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").
map_icd10_to_icd11
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, retrospec…
map_loinc_to_snomed
This tool looks up a LOINC code in NLM Clinical Tables and returns guidance on where to obtain a LOINC → SNOMED CT mapping. It does not perform the mapping. Direct LOINC → SNOMED CT mappings are not freely available via API. UMLS Metathesaurus contains the relationships but requires an individual UMLS Terminology Services license; the LOINC SNOMED CT Expression Association is published by Regenstrief Institute as part of the LOINC release and requires authenticated download from loinc.org un…
validate_codes
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 dist…
find_equivalent
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, SNOMED CT, 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 c…
atc_classify
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 Coll…
atc_lookup
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 at…
atc_members
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.
cid10_search
Search the Brazilian CID-10 (Classificação Estatística Internacional de Doenças, 10ª Revisão) by Portuguese text. Use this tool to: - Find CID-10 codes for Brazilian SUS / ANVISA contexts ("infarto", "diabetes", "tuberculose") - Look up the official Portuguese (CBCD/USP) translation of a clinical term - Locate codes for billing, epidemiology, and clinical documentation in Brazil Returns matches from CID-10 categories (3-char) and/or subcategories (4-char). Search is diacritic-insensitive: t…
cid10_lookup
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.
cid10_chapters
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.
cid10_chapter
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 - Build hierarchical browsers - Find which group contains a code range Provide a chapter number (1-22).
terminology_versions
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 / SNOMED / 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…
terminology_diff
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…
The server never machine-translates terminology content — but several sources publish official translations, and the tools expose them:
- CID-10 is natively Portuguese:cid10_search/cid10_lookup/cid10_chapter(s)serve the DataSUS V2008 dataset (the CID-10 the Brazilian SUS uses operationally).
- ICD-11 in official Portuguese: passlanguage: "pt"toicd11_search/icd11_lookupto search and read WHO's official pt-BR linearization labels.
- MeSH: passlanguage: "pt"tomesh_search/mesh_descriptorto request NLM's official translations where they exist.
- SNOMED CT(when enabled):languagerequests the descriptions loaded in your Snowstorm edition (e.g. a national extension's pt-BR refset).
If a source has no official translation for an entry, you get the source language back — never a machine translation.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"medical terminologies mcp": {
"server": {
"command": "npx",
"args": [
"-y",
"medical-terminologies-mcp"
],
"env": {
"WHO_CLIENT_ID": "",
"WHO_CLIENT_SECRET": "",
"WHO_ICD11_RELEASE_ID": "",
"ENABLE_SNOMED_TOOLS": "",
"SNOMED_BASE_URL": "",
"SNOMED_LANGUAGE": "",
"LOG_LEVEL": ""
}
}
}
}
}
McpServers
{
"server": {
"command": "npx",
"args": [
"-y",
"medical-terminologies-mcp"
],
"env": {
"WHO_CLIENT_ID": "",
"WHO_CLIENT_SECRET": "",
"WHO_ICD11_RELEASE_ID": "",
"ENABLE_SNOMED_TOOLS": "",
"SNOMED_BASE_URL": "",
"SNOMED_LANGUAGE": "",
"LOG_LEVEL": ""
}
}
}
Transport
"stdio"
Package
"medical-terminologies-mcp"
Registry
"npm"
Unified access to global medical terminologies: ICD-11, SNOMED CT, LOINC, RxNorm, MeSH. 27 tools for medical coding, terminology lookup, and crosswalk mappings.
A Model Context Protocol (MCP) server providing unified access to major global medical terminologies:
- ICD-11- International Classification of Diseases (WHO)
- SNOMED CT- Systematized Nomenclature of Medicine(opt-in; requires self-hosted Snowstorm)
- LOINC- Logical Observation Identifiers Names and Codes
- RxNorm- Normalized names for clinical drugs (NIH)
- MeSH- Medical Subject Headings (NLM)
- ATC- Anatomical Therapeutic Chemical classification (WHO Collaborating Centre, served via NLM RxClass)
- CID-10- Brazilian Portuguese translation of ICD-10 (DataSUS V2008, bundled)
- "What's the ICD-11 code for type 2 diabetes?"→icd11_search
- "Map ICD-10 code E11 to ICD-11."→map_icd10_to_icd11
- "What does LOINC 2339-0 measure?"→loinc_details
- "Qual o código CID-10 para infarto agudo do miocárdio?"→cid10_search
The answers come from authoritative sources (WHO, NLM, NIH, DataSUS) — real codes and mappings, not guesses from training data.
- 31 default tools (37 with SNOMED enabled) for medical terminology lookup
- 3 MCPPromptsthat orchestrate tool calls into named workflows (find-medical-code,drug-info,cid10-portuguese-lookup) — clients render these as one-click user actions
- 4 MCPResourcesfor in-process reference content (info://server,info://cid10/chapters,info://licenses,info://stats) — sub-millisecond reads (exceptinfo://statswhich round-trips to the StatsCounter Durable Object on the hosted endpoint)
- Multi-terminology support in a single server
- Cross-terminology mapping and search
- Provenance on every response(since v1.8.0): each successful tool result carries a machine-readable provenance block — source, canonical URL, data vintage, real extraction instant (cache hits keep the original fetch instant), ready-to-use citation, and license — instructuredContent.provenance+attribution, mirrored in_metaundercom.sidneybissoli.medical/, with a compact text footer for text-only clients. Multi-source responses (find_equivalent,validate_codes) carry one block per source; server-computed ranking fields are flagged as derived
- Built-in caching for improved performance
- Rate limiting to respect API limits
- Detailed responses with rich formatting
- Two transports:stdio(default; for Claude Desktop, IDE clients) andStreamable HTTP(the hosted Cloudflare Worker athttps://medical.sidneybissoli.com/mcp, or your own instance ofworker/)
This server isnota clinical-care decision tool — practicing clinicians have specialized assistants (UpToDate AI, OpenEvidence, EHR-integrated tools) for that. The actual audience is researchers, public-health analysts, clinical informatics developers, and educators who need programmatic access to authoritative terminology data.
A public Cloudflare Workers deployment runs at:
Connect via the MCP Inspector or any Streamable HTTP MCP client:
npx @modelcontextprotocol/inspector --transport streamable-http \ --server-url https://medical.sidneybissoli.com/mcp
Or install via Smithery, which proxies the same endpoint through their gateway:
npx -y smithery mcp add sidneybissoli/medical-terminologies-mcp
The hosted instance has WHO credentials configured, so all 31 default tools work without any setup on your side. For your own deployment (e.g. corporate network, different region, custom WHO credentials), see theInstallationandHosted on Cloudflare Workerssections below.
npm install -g medical-terminologies-mcp
Add to your Claude Desktop configuration file:
macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "medical-terminologies": { "command": "npx", "args": ["-y", "medical-terminologies-mcp"], "env": { "WHO_CLIENT_ID": "your-who-client-id", "WHO_CLIENT_SECRET": "your-who-client-secret" } } } }
¹ Required for ICD-11 tools. Get credentials at:https://icd.who.int/icdapi.
² SeeSNOMED CT setup (advanced)below. LOINC, RxNorm, and MeSH need no configuration.
The server runs over stdio by default — that's what Claude Desktop and IDE clients expect. The Streamable HTTP transport is served by the Cloudflare Worker inworker/(an instance of the maintainer's Fase 0 hosting template). The--httpflag of the Node entry was removed in v1.6.0 — if you need a local HTTP endpoint, run the Worker locally:
npm ci && cd worker && npm ci npm run dev # wrangler dev on http://localhost:8787 # Inspector via HTTP npx @modelcontextprotocol/inspector --transport streamable-http --server-url http://localhost:8787/mcp
Hosted endpoints (production and local alike):
- POST /mcp— JSON-RPC over Streamable HTTP (the MCP protocol). Stateless mode: each request is independent.
- GET /health— liveness probe returning{ status, name, version, tool_count, uptime_s }.
- GET /status— version + deploy metadata.GET /metrics— aggregated per-tool usage.
- GET /statsandGET /stats/badge— public tool-call counter (since 2026-05-13) and its shields.io badge.
- GET /.well-known/mcp/server-card.json— static server card for registry scanners.
- CORS is permissive () so browser clients (e.g. the MCP Inspector web UI) can connect directly.
The production deployment is the Cloudflare Worker inworker/, config inworker/wrangler.jsonc, CI deploy in.github/workflows/deploy-worker.yml(auto-runs on every push tomain).
npm ci && npm run build:worker-lib cd worker && npm ci npx wrangler login # one-time, browser flow npx wrangler deploy # publishes to <name>.<account>.workers.dev # Set ICD-11 secrets so those 5 tools work: npx wrangler secret put WHO_CLIENT_ID npx wrangler secret put WHO_CLIENT_SECRET
Note:worker/wrangler.jsoncpins the maintainer'saccount_idand custom domain route — remove/replace both for your own deployment.
Why Workers: zero cold start at the edge, $5/mo flat for 10M requests (free tier covers up to 100k req/day), and no VMs to size or restart. The template ships per-IP rate limiting and a usage-stats Durable Object; the upstream-facing cache/rate-limiter are per-isolate (PROGRESS.md Phase 11.9 Stage 2 tracks the KV/DO upgrade).
After your Worker is live, register the URL on Smithery:
- Visithttps://smithery.ai→Publish → MCP(orhttps://smithery.ai/new).
- Pick theURLsubmission path (Smithery deprecated container hosting in 2024 — URL is the supported flow now).
- Pastehttps://<your-worker>.workers.dev/mcp. Smithery's gateway scans for compliance and proxies traffic.
Available Tools (31 by default, 37 with SNOMED enabled)
The server never machine-translates terminology content — but several sources publish official translations, and the tools expose them:
- CID-10 is natively Portuguese:cid10_search/cid10_lookup/cid10_chapter(s)serve the DataSUS V2008 dataset (the CID-10 the Brazilian SUS uses operationally).
- ICD-11 in official Portuguese: passlanguage: "pt"toicd11_search/icd11_lookupto search and read WHO's official pt-BR linearization labels.
- MeSH: passlanguage: "pt"tomesh_search/mesh_descriptorto request NLM's official translations where they exist.
- SNOMED CT(when enabled):languagerequests the descriptions loaded in your Snowstorm edition (e.g. a national extension's pt-BR refset).
If a source has no official translation for an entry, you get the source language back — never a machine translation.
SNOMED CT Tools (5, disabled by default)
These are only registered whenENABLE_SNOMED_TOOLS=true. SeeSNOMED CT setup (advanced).
Crosswalk Tools (5 —map_snomed_to_icd10requires SNOMED)
WHO Anatomical Therapeutic Chemical classification, served through NLM RxClass (free, no auth). The WHOCC base itself requires a paid subscription, but RxClass envelopes the same code/name pairs.
Brazilian Portuguese translation of ICD-10 (DataSUS V2008). Bundled as a static dataset — no HTTP calls. The Brazilian SUS uses CID-10 V2008 operationally; for the international ICD-11 (current WHO revision), use the ICD-11 tools above.
Surface what version of each terminology this server queries against today — useful when running batch validation against a pinned release or when investigating an unexpected lookup miss after an upstream update.
The samples below are the actual formatted output the tools produce — the text body of theCallToolResult. Tools also return astructuredContentobject matching each tool'soutputSchemafor programmatic consumers.
loinc_search— query: "glucose", max_results: 3
## LOINC Search Results for "glucose" Found 1024 total results (showing 3): 1. 74790-7 - Glucose challenge (hydrogen breath test) panel - Exhaled gas Component: Glucose challenge panel | Method: - 2. 104708-3 - Deprecated Estimated average glucose [Moles/volume] in Blood Component: Estimated average glucose | Property: SCnc 3. 97510-2 - Glucose measurements in range out of Total glucose measurements during reporting period Component: Glucose measurements in range/Total glucose measurements | Property: NFr | Method: Calculated
total_count(1024) reflects every match in the NLM Clinical Tables index, not just the page returned. Bumpmax_results(max 50) to see canonical codes like2339-0(Glucose [Mass/volume] in Blood); the API's relevance ranking puts panels and derived measurements above plain blood-glucose at small page sizes.
rxnorm_ingredients— rxcui: "6809" (metformin)
# Ingredients for RxCUI 6809 Found 18 ingredient(s): | RxCUI | Name | Type | |-------|------|------| | 6809 | metformin | Single Ingredient | | 1007411 | chlorpropamide / metformin | Multiple Ingredient | | 1043562 | metformin / saxagliptin | Multiple Ingredient | | 1243019 | linagliptin / metformin | Multiple Ingredient | | 1486436 | dapagliflozin / metformin | Multiple Ingredient | | 1545149 | canagliflozin / metformin | Multiple Ingredient | | 1664314 | empagliflozin / metformin | Multiple Ingredient | | 729717 | metformin / sitagliptin | Multiple Ingredient | | ... | (10 more combinations) | Multiple Ingredient |
For an RxCUI that is itself an ingredient (TTY=IN), the tool returns that ingredient plus every multi-ingredient (TTY=MIN) concept that includes it. Use this to enumerate combination products built around a substance.
mesh_descriptor— mesh_id: "D006973" (Hypertension)
# Hypertension MeSH ID: D006973 ## Scope Note Persistently high systemic arterial BLOOD PRESSURE. Based on multiple readings (BLOOD PRESSURE DETERMINATION), hypertension is currently defined as when SYSTOLIC PRESSURE is consistently greater than 140 mm Hg or when DIASTOLIC PRESSURE is consistently 90 mm Hg or more. ## Tree Numbers - C14.907.489 ## Concepts - Hypertension (preferred) ## Allowed Qualifiers 35 qualifier(s) allowed. Use mesh_qualifiers for details.
The scope note comes from the descriptor'spreferred concept, not its annotation field (which is an indexer-facing note). Tree numbers are the navigable path into MeSH's controlled hierarchy —C14.907.489places Hypertension under Cardiovascular Diseases → Vascular Diseases.
- ICD-11 lookup:icd11_searchwith a clinical term → pick the result →icd11_lookupwith the code for full details, oricd11_hierarchyto walk parents/children.
- Drug pipeline:rxnorm_searchfor a brand or generic name →rxnorm_conceptfor the canonical record →rxnorm_ingredientsandrxnorm_classesfor downstream analysis.
- Cross-terminology scaffolding:find_equivalentwith a clinical term searches ICD-11, LOINC, RxNorm, MeSH, and (when enabled) SNOMED in one call. Use it to bootstrap mappings; the pairwisemap_tools refine them.
- ICD-10 → ICD-11 (text search, not authoritative):map_icd10_to_icd11does honest text search against WHO ICD-11. Real WHO transition tables are tracked inPROGRESS.md Phase 13.1.
The 5 SNOMED tools (snomed_search,snomed_concept,snomed_hierarchy,snomed_descriptions,snomed_ecl) plus the SNOMED-dependent crosswalk tool (map_snomed_to_icd10) aredisabled by default. With them disabled, the server registers 31 tools instead of 37;find_equivalentstill works and skips the SNOMED branch with an explanatory note.
The reason: as of 2026-05-08, the public IHTSDO Snowstorm endpoint that this project historically called (https://browser.ihtsdotools.org/snowstorm/snomed-ct/...) returns HTTP 410 Gone for every path. Without a working backend, registering these tools surfaces 6 guaranteed-broken tools to every client.
-
Confirm your SNOMED CT license.SNOMED CT use requires an SNOMED International (IHTSDO) license. Member country residents typically have one through their national release center; non-members can obtain an Affiliate license. Seehttps://www.snomed.org/snomed-ct/get-snomed.
Run a Snowstorm instance.SNOMED International publishes Snowstorm as open source (IHTSDO/snowstorm) and as a Docker image (snomedinternational/snowstorm). Self-hosting requires importing an RF2 release file (provided to license holders).
{ "mcpServers": { "medical-terminologies": { "command": "npx", "args": ["-y", "medical-terminologies-mcp"], "env": { "WHO_CLIENT_ID": "...", "WHO_CLIENT_SECRET": "...", "ENABLE_SNOMED_TOOLS": "true", "SNOMED_BASE_URL": "https://my-snowstorm.example.com/snowstorm/snomed-ct", "SNOMED_LANGUAGE": "en" } } } }
SNOMED_BASE_URLshould point at the base under which Snowstorm exposes its/MAIN/conceptsand related endpoints.SNOMED_LANGUAGEaccepts standardAccept-Languagetags (e.g.pt,es,pt-BR,en;q=0.8) — Snowstorm returns localized terms when the branch has them and falls back to English otherwise.
Restart the MCP clientso the server picks up the env vars.
If you setENABLE_SNOMED_TOOLS=truewithout configuring a working Snowstorm, the SNOMED tools will register but every call will fail at the network layer.
The MIT license covers the server code and server-maintained metadata only —notthe terminology content served through it, andnotthe two bundled datasets (cid10.json,icd10-to-icd11.json), which remain under their own terms. The consolidated notice ships with the package asNOTICE.md; every tool response carries a per-source provenance block with the applicable license.
ICD-11 content is provided under theCreative Commons Attribution-NoDerivatives 3.0 IGO license (CC BY-ND 3.0 IGO), per theICD-11 Terms of Use and License Agreement.
- Required citation:"International Classification of Diseases, Eleventh Revision (ICD-11), World Health Organization (WHO) 2019https://icd.who.int/browse11. Licensed under the Creative Commons Attribution-NoDerivatives 3.0 IGO licence (CC BY-ND 3.0 IGO)."
- This server always serves ICD-11 codes and titles together with their URIs, verbatim; non-English labels are WHO's own official translations (never machine-translated)
- WHO may terminate the license at any time by notice (§4.7)
- API access requires registration athttps://icd.who.int/icdapi
WHO ICD-10 → ICD-11 transition tables (bundled)
Format conversion (TSV → JSON, content unaltered) of the tables WHO publishes within the ICD-11 release. © World Health Organization, under the ICD-11 Terms of Use — not under this project's MIT license. WHO's guidance: the tables show correspondence between revisions and"are not intended for directly converting data from one revision to the other."*
© World Health Organization; Brazilian Portuguese translation © CBCD / Faculdade de Saúde Pública da USP; electronic files published by DataSUS (Ministério da Saúde do Brasil). DataSUS/CBCD permission: developers may use the fileswith due credit and at no charge— this server serves them free with credit in every response. Not under this project's MIT license.
SNOMED CT use requires an IHTSDO (SNOMED International) license. The SNOMED tools in this server are disabled by default and only enabled by operators with a valid license and a self-hosted Snowstorm instance — seeSNOMED CT setup (advanced).
- Member countries have national licenses
- Affiliate licenses available for others (Brazil is not a member country)
- More info:https://www.snomed.org/get-snomed
This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license athttp://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.
- Served via the free NLM Clinical Tables API; every code comes with its official display name
- Terms with third-party copyright are served with their notice passed through verbatim
RxNorm is produced by the U.S. National Library of Medicine; the RxNav APIs serve non-proprietary, public-domain RxNorm content free of charge.
This product uses publicly available data from the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services; NLM is not responsible for the product and does not endorse or recommend this or any other product.
ATC classification © WHO Collaborating Centre for Drug Statistics Methodology (https://atcddd.fhi.no/), retrieved via NLM RxClass and served verbatim. This server never redistributes the WHOCC ATC/DDD index.
MeSH is a U.S. government work served under theNLM Terms and Conditions. Courtesy of the U.S. National Library of Medicine.
This server implements rate limiting to respect API providers:
git clone https://github.com/SidneyBissoli/medical-terminologies-mcp.git cd medical-terminologies-mcp npm install npm run build
npx @modelcontextprotocol/inspector node dist/index.js
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (git checkout -b feature/AmazingFeature)
- Commit your changes (git commit -m 'Add some AmazingFeature')
- Push to the branch (git push origin feature/AmazingFeature)
- Open a Pull Request
This project is licensed under the MIT License - see theLICENSEfile for details.
Note: While this software is MIT licensed, the medical terminologies accessed through it have their own licenses (seeTerminology Licensesabove).
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



