MCP App Store
Health-Life-Sciences

SNOMED CT Terminology

by SNOMED International

Overview

SNOMED CT is the world's most comprehensive clinical terminology, used in electronic health records across more than 80 countries. This connector gives Claude direct access to it through SNOMED International's terminology server. Use it to look up concepts by code or name, validate that a code exists and is active, test subsumption between concepts, navigate the hierarchy (ancestors, children, descendants), and expand value sets using Expression Constraint Language (ECL). It works across all SNOMED CT editions available on the connected backend, including the International, US and Australian editions. Every tool is read-only, the connector never modifies terminology data. It runs as a stateless proxy to the configured Snowstorm instance, holding no query content or personal data between requests. Built and maintained by SNOMED International, the owners of SNOMED CT.

Tools

fhir_metadata

Claude
Return a parsed FHIR CapabilityStatement summary for a terminology's backend. Set include_raw=true (default) to also include the raw CapabilityStatement payload. Optionally specify terminology and/or target; defaults to the server's default terminology.

list_terminologies

Claude
List the SNOMED CT editions and branches available on the connected server. WHEN TO USE: before running edition-specific queries to confirm available terminology keys, checking which release version is loaded, or verifying server connectivity.

server_capabilities

Claude
Return backend classification and capabilities for a terminology. Optionally specify terminology and/or target; defaults to the server's default terminology.

server_health

Claude
Return reachability and basic backend capability flags. Optionally specify terminology and/or target; defaults to the server's default terminology.

snomed_expand

Claude
Expand a SNOMED CT value set using FHIR ValueSet/$expand. The primary tool for retrieving concept sets via ECL (Expression Constraint Language) queries. Works on Snowstorm and Lite when FHIR is available. WHEN TO USE: retrieving concepts matching an ECL expression (most common use case), getting members of a reference set, counting concepts in a subhierarchy (use summary_only=true), text-filtering within a concept set, or retrieving attribute values across a concept set (dotted notation). VALUE SET URL FORMAT: Subtype query: http://snomed.info/sct?fhir_vs=ecl/<<CONCEPTID Attribute query: http://snomed.info/sct?fhir_vs=ecl/<<CONCEPTID:ATTR=<<VALUE Refset members: http://snomed.info/sct?fhir_vs=ecl/^REFSETID Full ECL: http://snomed.info/sct?fhir_vs=ecl/<YOUR ECL EXPRESSION> PERFORMANCE RULES (follow on every query): These rules protect the server from overload. Violating them causes timeouts, degraded performance, and may affect other users on shared infrastructure. 1. SCOPE FIRST. Never root a constrained query at a top-level hierarchy concept without narrowing scope first. These roots are TOO BROAD on their own: <<404684003 Clinical finding (~350k concepts) <<71388002 Procedure (~100k concepts) <<105590001 Substance (~70k concepts) <<123037004 Body structure (~40k concepts) Always narrow to a subhierarchy (e.g. <<195967001 Asthma) before adding attribute constraints, filters, or MINUS operations. 2. COUNT BEFORE FETCHING. Always use summary_only=true as the first call to check the total size. If total > 1000, stop and confirm with the user before fetching pages. Never assume a result set is small. 3. DO NOT PAGINATE AUTONOMOUSLY. Fetch the first page, summarise the results, and ask the user whether they need more. Never loop through all pages of a large result set without explicit user instruction. 4. NO TOP-LEVEL MINUS ON LARGE SETS. X MINUS Y at the top level requires materialising both sets in full and will time out on large hierarchies. Always prefer MINUS inside an attribute value expression: GOOD: <<X:{attr=(<<A MINUS <<B)} BAD: (<<X:attr=<<A) MINUS (<<X:attr=<<B) 5. NO WILDCARD QUERIES ON LARGE SETS. Expressions like <<404684003:= or <<71388002:attr= against top-level hierarchies are extremely expensive. Scope to a subhierarchy before using wildcards. 6. NO RECURSIVE CHILDREN CALLS. Never call snomed_get_children in a loop to traverse a hierarchy. Use <<CONCEPTID ECL for transitive closure in one call. 7. NO REPEATED snomed_lookup ACROSS A CONCEPT SET. Use dotted attribute notation (<<X.attrId) to retrieve attribute values across a set in one call instead of calling snomed_lookup for each concept individually. ECL QUICK REFERENCE: Hierarchy operators: <<X Subtype of X (including X) <X Strict subtype of X (excluding X) >>X Supertype of X (including X) >!X Direct parents of X only (ECL 1.4) <!X Direct children of X only (ECL 1.4) ^X Member of reference set X Set operators (use at top level between expressions): X OR Y Union X AND Y Intersection X MINUS Y Difference WARNING: Top-level MINUS between two large expansions will TIME OUT. Prefer MINUS inside an attribute value expression instead. Attribute constraints: <<X : attr=<<Y Ungrouped (attribute may be in any role group) <<X : {attr1=<<Y, attr2=<<Z} Grouped (BOTH attributes in the SAME role group) WARNING: Grouped vs ungrouped returns DIFFERENT results. Always choose deliberately. MINUS inside attribute value (PREFERRED for performance): <<X : {246075003=(<<105590001 MINUS <<410942007), 363698007=<<80891009} Wildcards: <<X : =<<Y Any attribute with value Y <<X : attr= Any value for a specific attribute CARDINALITY (constrain how many times an attribute appears): <<X : [0..0] attr= Concepts with NO instances of attr (content QA) <<X : [1..1] {attr=<<Y} Exactly one instance of attr in the same role group <<X : [2..] {attr=} Two or more instances of attr NOTE: [0..0] does not require braces. [1..*] and above should use grouped syntax { }. DOTTED ATTRIBUTE NOTATION (returns attribute VALUES, not filtered concepts): <<X . attrId Returns the SET OF VALUES of at…

snomed_get_ancestors

Claude
Get ancestor concepts of a SNOMED concept (parents, grandparents, etc. via IS-A hierarchy). Traverses upward through IS-A to find the classification position of a concept. Set direct_only=true to return only immediate parents. Optionally specify terminology and/or target; defaults to the server's default terminology.

snomed_get_children

Claude
Get direct IS-A children of a SNOMED concept (one level down in the hierarchy). More efficient than ECL for simple hierarchy browsing when you only need immediate children. WHEN TO USE: exploring the shape of a subhierarchy before writing an ECL query, understanding how a concept is subdivided at the next level, or lightweight hierarchy browsing without full ECL overhead. NOT FOR: transitive closure (all descendants) — use snomed_expand with <<CONCEPTID. Not for attribute-based queries — use snomed_expand with ECL. Not for filtering by description or metadata — use snomed_expand with filters. Optionally specify terminology and/or target; defaults to the server's default terminology.

snomed_get_descendants

Claude
Get all descendant concepts of a SNOMED concept (children, grandchildren, etc. via IS-A hierarchy). Transitive closure downward, equivalent to <<X in ECL but returned as a hierarchy structure. Use snomed_expand with ECL if you need a flat concept list with attribute constraints instead. Use count and offset to paginate large result sets. Optionally specify terminology and/or target; defaults to the server's default terminology.

snomed_lookup

Claude
Retrieve full concept details via FHIR CodeSystem/$lookup for a known SNOMED CT concept ID. Returns the FSN, synonyms, parent concepts, and all defining attributes with their values. WHEN TO USE: verifying a concept ID before using it in an ECL expression, inspecting the full attribute modelling of a specific concept, retrieving all synonyms and descriptions for a concept, checking whether a concept is active or inactive, or confirming the correct concept ID for a common attribute (e.g. finding site). NOT FOR: searching by text (use snomed_expand with a {{ term = "..." }} filter) or retrieving a concept set (use snomed_expand with ECL). Optionally specify terminology (e.g. 'snomedct-us') and/or target; defaults to the server's default terminology when omitted.

snomed_subsumes

Claude
FHIR CodeSystem/$subsumes for two SNOMED codes. Optionally specify terminology and/or target; defaults to the server's default terminology.

snomed_validate_code

Claude
Validate whether a SNOMED CT concept ID exists and is currently active via FHIR CodeSystem/$validate-code. Returns true/false with the display name if valid and active. WHEN TO USE: confirming a concept ID is valid and active before storing or querying, checking whether a concept has been inactivated (retired/replaced), handling legacy codes from EHR data (check status before using in ECL), or verifying a code belongs to a specific edition or version. Preferred approach when history supplements are unavailable (they are NOT supported on this server). Use this to check individual inactive codes instead. Optionally specify terminology and/or target; defaults to the server's default terminology.

snowstorm_get_concept_native

Claude
Snowstorm-native concept detail by conceptId. Optionally specify terminology and/or target; defaults to the server's default terminology.

snowstorm_list_codesystems

Claude
List Snowstorm code systems with summarized latest version info. Optionally specify terminology and/or target; defaults to the server's default terminology.

snowstorm_list_versions

Claude
List versions for a Snowstorm code system short name. Optionally specify terminology and/or target for routing; defaults to the server's default terminology.

snowstorm_search_concepts

Claude
Snowstorm-native concept search by term. Optionally specify terminology and/or target; defaults to the server's default terminology. Backend may reject very short terms; use at least 3 searchable characters (letters/digits), e.g. prefer a longer phrase for acronyms.

App Stats

15

Tools

Claude

Platforms

Works with

Claude

Data refreshed daily