Skip to main content
Glama

Server Details

Offline US medical code lookup and crosswalk — ICD-10-CM/PCS, HCPCS Level II, RxNorm. Keyless.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/medical-codes-mcp-server
GitHub Stars
4
Server Listing
medical-codes-mcp-server
ChatGPT
–
Claude
–

TDQS

A4.6/5.0

Scored across 6 tools

Disambiguation4/5

The six tools each target a distinct operation: search (description→code), get (code→description), check (validity/billability), list systems, browse hierarchy, and map/crosswalk. The only real overlap is between medcode_browse_hierarchy and medcode_map_codes' parents/children directions, but the descriptions explicitly delineate them (browse for orienting without a known code; map for a specific code's depth-1 walk).

Naming Consistency5/5

All tools share the medcode_ prefix and a consistent verb_noun snake_case pattern: browse_hierarchy, check_code, get_code, list_systems, map_codes, search_codes. No mixed conventions or casing.

Tool Count5/5

Six tools is well-scoped for a medical code reference server — one per core operation (search, decode, validate, browse, crosswalk, list) with no redundant or filler tools.

Completeness5/5

The surface covers the full read-only reference lifecycle: discover (browse/search), decode (get), validate/billability (check), crosswalk within and across systems including RxNorm/NDC/RxClass drug mappings (map), and release provenance (list_systems). Since it is a reference dataset, the absence of write operations is appropriate and no obvious gaps remain.

Available Tools

6 tools
medcode_browse_hierarchyBrowse Code HierarchyA
Read-onlyIdempotent
Inspect

Walk a US medical code system's hierarchy for discovery without a search term. With no node, returns the top-level entries (ICD-10-CM categories, HCPCS range buckets, or ICD-10-PCS first-axis values). With a node, returns its immediate children. ICD-10-CM and HCPCS use a prefix hierarchy (a shorter code is the parent of a longer one); ICD-10-PCS is axis-based — each of its 7 characters is an independent axis (section, body system, root operation, body part, approach, device, qualifier), but only the top-level Section axis is browsable (omit node): positions 2–7 are context-dependent on the preceding axis path and are not enumerable from a flat partial code, so list the complete codes in a three-character ICD-10-PCS table row with medcode_map_codes (direction children) instead. Lets an agent orient in an unfamiliar system or enumerate a category's specific codes. A large child set paginates: when the response carries a nextCursor, pass it back as cursor to fetch the next page.

NameRequiredDescriptionDefault
nodeNoA node to expand — or omit / pass an empty string for the top level. For ICD-10-CM/HCPCS, a code whose children to list; ICD-10-PCS supports only top-level Section browsing. Must not be blank or whitespace-only when provided.
limitNoMax entries per page. Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200.
cursorNoOpaque continuation token from a previous response's `nextCursor`, to fetch the next page of children/entries. Omit for the top of the list.
systemYesThe code system to browse.

Output Schema

NameRequiredDescription
capNoThe page size that was applied.
axesNoThe top-level ICD-10-PCS Section axis values (only the Section axis is enumerable). Empty when kind is "codes".
kindNo"codes" for prefix-hierarchy children (ICD-10-CM/HCPCS); "axes" for ICD-10-PCS axis values.
codesNoChild codes under the requested node or top level. Empty when kind is "axes".
errorNoPresent when the call failed. Absent on success.
shownNoNumber of entries returned on this page (codes or axes).
noticeNoGuidance when a node has no children/axes — suggests the top level or a valid node.
truncatedNoTrue when more entries exist beyond this page.
nextCursorNoOpaque token to pass back as `cursor` for the next page. Present only when more entries exist beyond this page.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/closed-world, and the description adds real value on top: the prefix vs axis-based parent relationship per system, the PCS top-level-only constraint and why, and the nextCursor pagination loop. It stops short of stating result shape or depth limits, but the safety and paging profile is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior and the no-node/node split before the system-specific rules, so the agent can stop reading early. Slight cost: the PCS restriction is restated in both the description and the `node` schema, making the paragraph denser than strictly needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter, single-required browse tool with an output schema and full annotation coverage, nothing an agent needs is missing: entry points, child expansion, per-system hierarchy semantics, the PCS fallback, and pagination are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns more by explaining what a `node` actually means in each system (prefix parent vs non-enumerable axes) and how `cursor` is fed back from `nextCursor`. It does not add anything for `limit`, which the schema already documents fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (walk a code system's hierarchy) and immediately scopes it as discovery without a search term, which separates it from medcode_search_codes. It also names the exact return shape per system (ICD-10-CM categories, HCPCS ranges, PCS first-axis values).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (orient in an unfamiliar system, enumerate a category's specific codes) and when not to, routing the PCS positions 2–7 case to medcode_map_codes with direction children. That is a concrete alternative plus the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

medcode_check_codeCheck Medical CodeA
Read-onlyIdempotent
Inspect

Validate whether a US medical code exists, is current, and is billable in the active bundled release. Returns a discriminated status — valid_billable, valid_not_billable, valid_header, valid, or terminated — with a whyNot explaining non-billable and terminated cases (e.g. "valid ICD-10-CM category but not billable — submit a more specific child code"). A HCPCS code is terminated once its last valid date has passed; before then it checks as billable, with that date in whyNot. This is the detail a coder needs before submitting a claim. RxNorm has no billing concept, so a current RxNorm concept is valid with billable: null and no billing verdict. Auto-detects the system from the code's shape, and a code written in ICD-10-CM dotted form (A01.00) resolves to ICD-10-CM; pass an explicit system to disambiguate. A non-billable or terminated code is a successful result with a whyNot, not an error — only a code absent from the named system, or with no system from every bundled system, raises unknown_code, which names the other bundled system that holds the code, or every system the code's shape fits. A dotted all-digit value in ICD-9-CM form (250.00) is never read as an RXCUI, and its miss says ICD-9-CM is not bundled; an ICD-10-PCS section value from medcode_browse_hierarchy (0) checked under system ICD10PCS is named as a section, not a code. A code string that also exists in another bundled system carries alsoInSystems naming it, since the verdict applies only to the system that answered.

NameRequiredDescriptionDefault
codeYesThe code to validate, with or without dots. Must not be blank or whitespace-only.
systemNoForce the lookup into this system. Omit to auto-detect from the code's shape.

Output Schema

NameRequiredDescription
codeNoThe code in display form (ICD-10-CM carries the dot).
errorNoPresent when the call failed. Absent on success.
statusNoValidity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired — its last valid date has passed.
systemNoThe system the code was resolved in, echoed for chaining.
whyNotNoExplanation for non-billable/terminated statuses. On valid_billable, null unless the code is scheduled for termination, when it names the last date the code may be used. Null when valid.
billableNoTrue only when status is valid_billable. Null when status is valid — the system has no billing concept.
alsoInSystemsNoOther bundled systems holding this same code string, present only when there is at least one. The verdict above is for the system this code resolved in; the code is a DIFFERENT code in each system listed here, with its own billability — "B00" is the ICD-10-CM category "Herpesviral [herpes simplex] infections" and also the ICD-10-PCS table row "Imaging, Central Nervous System, Plain Radiography". Re-call with `system` set to one of these values to validate it there.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it enumerates the discriminated status values, explains whyNot content per case, clarifies that non-billable/terminated is a successful result rather than an error, and specifies exactly when unknown_code is raised and what it contains. It also discloses the alsoInSystems caveat and RxNorm's null billing verdict — behavioral detail an agent cannot get anywhere else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and status semantics are front-loaded, but the body is a single dense paragraph mixing core contract with deep edge cases (ICD-9-CM dotted-form miss messaging, PCS section naming). Much of it earns its place, yet the lack of structure makes it hard to scan, and the ICD-9-CM aside is disproportionate to its likelihood.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though an output schema exists, the description still explains the meaningful return semantics (status discrimination, when whyNot is null, error-vs-success boundary), which is what an agent needs to interpret the result correctly. Nothing material about calling or reading the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds genuine semantics the schema lacks: the shape-based auto-detection heuristic, that dotted ICD-10-CM form resolves correctly, that a dotted all-digit ICD-9-CM value is never misread as an RXCUI, and why an explicit system disambiguates. This is disambiguation logic, not restatement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Validate whether a US medical code exists, is current, and is billable') and scopes it to a bundled release. It distinguishes itself from sibling tools by name (medcode_browse_hierarchy for PCS sections) and by framing ('the detail a coder needs before submitting a claim'), so an agent can tell it apart from medcode_get_code or medcode_search_codes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The pre-claim-validation framing gives clear context, and it names one sibling scenario explicitly ('an ICD-10-PCS section value from medcode_browse_hierarchy'). However, it never routes the agent between this and medcode_get_code or medcode_map_codes — no explicit 'use X instead when…' for the closest siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

medcode_get_codeGet Medical CodeA
Read-onlyIdempotent
Inspect

Decode one or more US medical codes to their official descriptions across ICD-10-CM (diagnoses), ICD-10-PCS (inpatient procedures), HCPCS Level II (supplies/drugs/services), and RxNorm (drugs, by RXCUI). Also decodes a National Drug Code (NDC) directly to its RxNorm product offline, tagged source: "NDC" — hyphenated in an FDA segment configuration (4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2) or as bare 10/11 digits; any other segment widths are malformed and stay unresolved. Auto-detects the system from each code's shape, and a code written in ICD-10-CM dotted form (A01.00) resolves to ICD-10-CM; pass an explicit system only when a value is genuinely ambiguous. Accepts 1–50 codes and returns partial success: resolved codes in found, unresolved in notFound with a per-code reason, so one bad code never fails the batch. Each reply holds structuredContent and the text to 24,000 bytes apiece: codes are decoded in request order, and once one has resolved, a code that would carry the reply past that budget is returned unprocessed in deferred, as sent, with every code after it — re-call with codes set to deferred and the same system and includeHierarchy until no deferred comes back. Three kinds of code are never deferred and can carry a reply past the budget: the first code that resolves, returned whole; the codes before it; and the unresolved codes after the last one that resolves, so a re-call always holds a code that resolves. Only a batch where nothing resolves fails: with ambiguous_system and candidateSystems when every code exists in more than one bundled system, otherwise with no_codes_found. Set includeHierarchy to attach each code's parent and immediate children (with a childrenTruncated flag when a code has more children than the cap returns — walk the full set via medcode_map_codes, or medcode_browse_hierarchy outside ICD-10-PCS); an ICD-10-PCS table row's children are the complete codes that begin with it. The resolved system is echoed on every result for chaining into a billability check or a medcode_map_codes parents/children walk; a bare integer that resolves nowhere is named as a possible CPT / HCPCS Level I code, which is out of scope, except a bare 10/11-digit one, which is named as an NDC no bundled drug maps to; a dotted all-digit value in ICD-9-CM form (250.00) is never read as an RXCUI and is named as ICD-9-CM, which is not bundled; an ICD-10-PCS section value from medcode_browse_hierarchy (0) looked up under system ICD10PCS is named as a section, not a code; a code string that also exists in another bundled system carries alsoInSystems naming it, so a single answer to a colliding code is never mistaken for the only one.

NameRequiredDescriptionDefault
codesYesCodes to decode (1–50). Mixed systems are fine — each is detected independently. An NDC decodes to its RxNorm product: hyphenated as 4-4-2, 5-3-2, 5-4-1, or 5-4-2, or as bare 10/11 digits.
systemNoForce every code to be looked up in this system, which also skips the NDC decode. Omit to auto-detect per code.
includeHierarchyNoWhen true, attach each found code's parent and immediate children.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
foundNoSuccessfully decoded codes, in request order.
deferredNoInput codes not processed because the reply reached its byte budget, in request order and as sent. Re-call with these as codes and the same system and includeHierarchy, until no deferred comes back. Absent when every code was processed.
notFoundNoCodes that did not resolve, with per-code reasons.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say read-only, idempotent, closed-world; the description adds a great deal beyond that — partial-success semantics with found/notFound per-code reasons, the 24,000-byte budget and deferral protocol with its three never-deferred exceptions, and the exact failure modes (ambiguous_system with candidateSystems, no_codes_found). The deferral rules are dense enough that an agent may still mis-model edge cases on first read, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, but the body is a single ~350-word paragraph with long em-dash-chained clauses that bury the deferral protocol mid-stream. Nearly every sentence carries needed information, but the lack of structural break-out for the budget/deferral rules hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover safety, yet the tool is genuinely complex (batch, mixed systems, partial success, deferral, ambiguity); the description covers the error contract and chaining of the echoed `system`. Almost nothing an agent needs is missing, though the deferral rules would benefit from tighter organization.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description earns an extra point by adding value-level rules the schema does not state — which NDC segment widths are valid (4-4-2, 5-3-2, 5-4-1, 5-4-2) versus malformed, dotted ICD-10-CM form resolving to ICD-10-CM, and that an ICD-10-PCS table row's children are the complete codes beginning with it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (decode) and resource (US medical codes) with the exact code systems named (ICD-10-CM, ICD-10-PCS, HCPCS Level II, RxNorm, NDC), and distinguishes itself from siblings by pointing at medcode_map_codes and medcode_browse_hierarchy for hierarchy walks and at billability checks downstream.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: pass `system` only when a value is genuinely ambiguous, otherwise rely on auto-detect; re-call with `deferred` codes and the same `system`/`includeHierarchy` until none come back; use medcode_map_codes or medcode_browse_hierarchy when childrenTruncated. It even names what is out of scope (CPT / HCPCS Level I, ICD-9-CM).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

medcode_list_systemsList Code SystemsA
Read-onlyIdempotent
Inspect

List the bundled US medical code systems with their release identifiers, effective dates, and code counts, and the RxClass drug-class layer the class crosswalks read, with each source’s version. Confirms which ICD-10-CM fiscal year, ICD-10-PCS fiscal year, HCPCS Level II release, RxNorm normalized set, and RxClass sources are active before acting on any decode, search, or crosswalk result. The corpus is offline and built at package-build time — this call reports exactly which release is baked into the running server. ICD-10-CM/PCS are the US clinical modifications, not the ICD-10/ICD-11 base.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
systemsNoOne entry per bundled code system, in canonical order — the systems the `system` inputs of the other tools accept.
classLayerNoThe RxClass drug-class layer the rxcui_to_classes and class_to_rxcuis directions of medcode_map_codes read — not a code system, so it has no entry in `systems`. Null when this build carries no class layer.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, and the description reinforces this usefully by explaining the corpus is offline and baked in at package-build time, so the call reflects the running server exactly. It also adds a real scope caveat (ICD-10-CM/PCS are US clinical modifications, not ICD-10/ICD-11 base) that annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first clause is front-loaded with what is returned, followed by the usage trigger and the scoping caveat. It is slightly dense and repetitive ('release identifiers' then 'with each source's version'), but every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value detail is not required, and the description covers purpose, precondition, offline/static nature, and terminology caveats. An agent has everything needed to decide to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. Nothing in the description misleads about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (bundled US medical code systems) plus exactly what is returned: release identifiers, effective dates, code counts, and RxClass source versions. It is clearly distinguished from siblings that decode, search, or crosswalk, which it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage trigger: call this to confirm which fiscal-year/release is active before acting on any decode, search, or crosswalk result. It does not explicitly say when not to use it, but the precondition framing makes the intended context unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

medcode_map_codesMap Medical CodesA
Read-onlyIdempotent
Inspect

Crosswalk a US medical code or drug across systems and within a hierarchy. Hierarchy directions: parents and children walk a code's hierarchy one level per call — immediate parent/children only (depth-1); call iteratively for the full ancestor or descendant path. ICD-10-CM and HCPCS walk the prefix hierarchy, stepping past an ICD-10-CM level padded with the placeholder X that is not itself a code (the parent of S82.66XA is S82.66); an ICD-10-PCS three-character table row's children are the complete codes that begin with it, and a complete code's parent is its table row; RxNorm concepts have no code hierarchy. A resolvable source with no edge in the requested direction is a successful empty result with a notice, not an error. A source code string that also exists in another bundled system carries alsoInSystems naming it, since only the resolved system's hierarchy was walked. Drug directions (RxNorm): name_to_rxcui (drug name → RXCUI; one name matches ingredients, combinations, and products alike, each hit tagged with its conceptType), ndc_to_rxcui and rxcui_to_ndc (NDC ↔ RXCUI; NDCs accepted hyphenated in an FDA segment configuration — 4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2 — or as bare 10/11 digits; ndc_to_rxcui names the product it decoded to and its conceptType), rxcui_to_ingredients and rxcui_to_brands (RXCUI → ingredient/brand RXCUIs, each with the target's RxNorm name and its conceptType — read that before counting a combination product's ingredients). Drug-class directions (RxClass): rxcui_to_classes (RXCUI → its classes: pharmacologic class, mechanism of action, physiologic effect, pharmacokinetics, therapeutic category, chemical structure, the diseases it may treat, prevent, diagnose, or induce or is contraindicated with, VA class, DEA controlled-substance schedule, CDC vaccine code; a drug product also carries its ingredients' classes, naming the ingredient in via, while DEA schedules are recorded only on drug products and VA classes almost only there, so map a product for those) and class_to_rxcuis (class ID → its direct member RXCUIs, each with its RxNorm name and conceptType). Each class hit carries classType, source (the RxClass source asserting it), and relation — a ci_ relation is a contraindication, not an indication; narrow either direction with classType. Every result carries source provenance (which system or edge answered) so a chained call (e.g. into openfda with a resolved NDC) uses the right identifier. The children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, and class_to_rxcuis directions can return large sets and paginate: a nextCursor in the response is passed back as cursor (with an optional limit page size) to walk the full set. A field the direction does not use is rejected with field_not_applicable: limit and cursor on the point directions, classType outside the class directions, and a system other than RXNORM on the drug and class directions.

NameRequiredDescriptionDefault
fromYesThe source value: a code (for parents/children), a drug name, an NDC, an RXCUI, or an RxClass class ID (for class_to_rxcuis). Must not be blank or whitespace-only.
limitNoMax results per page, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Rejected on every other direction.
cursorNoOpaque continuation token from a previous response's `nextCursor`, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis). Omit for the first page; an empty string counts as omitted. A non-empty cursor on any other direction is rejected.
systemNoFor parents/children, force the source code into this system. Omit to auto-detect. The drug and class directions resolve in RxNorm and accept only "RXNORM" (no effect); any other value there is rejected.
classTypeNoFor rxcui_to_classes and class_to_rxcuis only: keep only classes of this RxClass type — EPC (FDA established pharmacologic class), MOA (mechanism of action), PE (physiologic effect), PK (pharmacokinetics), TC (therapeutic category), CHEM (chemical structure), DISEASE (diseases the drug may treat, prevent, diagnose, or induce, or is contraindicated with), VA (VA drug class, recorded almost only on drug products), SCHEDULE (DEA controlled-substance schedule, recorded on drug products only), CVX (CDC vaccine code). Omit for every type. Rejected on every other direction.
directionYesWhat to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks; rxcui_to_classes and class_to_rxcuis are RxClass drug-class crosswalks.

Output Schema

NameRequiredDescription
capNoPaginated directions only: the page size that was applied.
fromNoThe source value, echoed back.
hitsNoCrosswalk results, each tagged with the edge that produced it.
errorNoPresent when the call failed. Absent on success.
shownNoPaginated directions only: number of hits returned on this page.
noticeNoGuidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; an ICD-10-PCS table row has no parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results.
directionNoThe mapping direction that was applied.
truncatedNoPaginated directions (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis) only: true when more results exist beyond this page.
nextCursorNoPaginated directions only: opaque token to pass back as `cursor` for the next page. Present only when more results exist beyond this page.
alsoInSystemsNoOther bundled systems holding the same `from` code string, present only when there is at least one (hierarchy directions only — a drug name, NDC, or RXCUI is not system-scoped). The hits above were walked in `resolvedSystem` alone; the code is a DIFFERENT code with a different hierarchy in each system listed here — "B00" is the ICD-10-CM category "Herpesviral [herpes simplex] infections" and also the ICD-10-PCS table row "Imaging, Central Nervous System, Plain Radiography". Re-call with `system` set to one of these values to walk it there.
resolvedSystemNoThe system the source resolved in, or null when not system-scoped.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: an unresolvable edge returns a successful empty result with a notice rather than an error, `alsoInSystems` signals codes present in multiple bundled systems, every hit carries `source` provenance for chaining, and specific fields are rejected with `field_not_applicable`. It also flags traps an agent would otherwise fall into, e.g. `ci_` relations are contraindications not indications, and `conceptType` must be read before counting a combination product's ingredients.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and information-dense — nearly every clause carries an operational fact and nothing is repeated from the schema. The cost is a single unbroken block of 400+ words with deeply nested parentheticals, which makes targeted re-reading (e.g. confirming the NDC format rules) harder than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with nine directions, an output schema, and non-obvious edge cases, the description covers the behaviors an agent must know: depth-1 iteration, empty-versus-error, pagination, provenance for chained openfda calls, and per-direction field rejection. Nothing material is left to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, yet the description still adds real semantics: accepted NDC formats, which directions paginate and how cursor/limit are threaded back, and which directions reject `classType`, `system`, `limit`, or `cursor`. It explains the meaning of the hierarchy-edge rules (X-padded ICD-10-CM levels, PCS three-character table rows, no RxNorm code hierarchy) that the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Crosswalk a US medical code or drug across systems and within a hierarchy") and then enumerates every direction by name, so an agent knows exactly which capability they are calling. It is clearly not a lookup (medcode_get_code), search, or hierarchy-browse tool — it is a directional mapping tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance per direction: parents/children are depth-1 and must be called iteratively for a full path, classType narrows either class direction, and a product must be mapped for DEA schedules and VA classes because those live on products. It does not explicitly contrast itself with siblings such as medcode_browse_hierarchy (which sounds adjacent to iterative parents/children walking), leaving one routing ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

medcode_search_codesSearch Medical CodesA
Read-onlyIdempotent
Inspect

Find US medical codes whose official descriptions match a described concept, via full-text search over the bundled index. Every search term must appear — matched first as a token prefix, then as a substring so inflected and compound forms are also found (a "neuropathy" search surfaces "mononeuropathy"/"polyneuropathy" siblings too, not only a standalone "neuropathy" token). An RxNorm concept matches on its drug name alone, never its term type (SBD, IN, …) — narrow by type with chapter. Filter by system (ICD10CM/ICD10PCS/HCPCS/RXNORM), billableOnly to exclude headers/categories and terminated HCPCS codes, and chapter. Use when you have a clinical description and need the code — the reverse of medcode_get_code. Results echo the resolved system per row for chaining, rank exact prefix matches ahead of substring-only matches with a deterministic tie-break, and disclose truncation with a nextCursor: pass it back as cursor to page through the full ranked set.

NameRequiredDescriptionDefault
limitNoMax codes per page. Defaults to the server's MEDCODE_MAX_RESULTS (50), ceiling 200.
queryYesClinical description to match, e.g. "type 2 diabetes with neuropathy". Must not be blank or whitespace-only.
cursorNoOpaque continuation token from a previous response's `nextCursor`, to fetch the next page of the same ranked result set. Omit for the first page.
systemNoRestrict results to one system. Omit to search all bundled systems.
chapterNoRestrict to a chapter/range bucket (the value from a code's `chapter` field). Case-insensitive: surrounding whitespace is trimmed and the value is upper-cased to match how chapters are stored, and `appliedFilters.chapter` echoes the upper-cased value that actually ran. A blank or whitespace-only value carries no filtering intent and is treated as omitted, which the response discloses as `appliedFilters.chapter: null`.
billableOnlyNoWhen true, return only billable leaf codes (exclude headers/categories and HCPCS codes whose last valid date has passed). RxNorm has no billing concept, so this excludes every RxNorm concept.

Output Schema

NameRequiredDescription
capNoThe page size that was applied.
codesNoMatching codes, ranked by full-text relevance.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of codes returned on this page.
noticeNoGuidance when nothing matched — echoes the query and suggests how to broaden, or names `billableOnly` as the cause when the searched system has no billing concept.
truncatedNoTrue when more matches exist beyond this page.
nextCursorNoOpaque token to pass back as `cursor` for the next page. Present only when more matches exist beyond this page.
appliedFiltersNoFilters the server applied to the search.
effectiveQueryNoThe query as the server parsed it for matching.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important search behavior: all terms must appear, prefix matches are attempted before substring matches, inflected/compound forms are surfaced, RxNorm matches on drug name alone and never term type, billableOnly excludes all RxNorm concepts and terminated HCPCS codes, and truncation is exposed via nextCursor. These details materially affect how an agent interprets and invokes the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the core purpose and search behavior. It is longer than typical, and some filter details overlap with the schema, but nearly every sentence adds operational information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the description still usefully explains result behavior: per-row resolved system for chaining, exact-prefix ranking, deterministic tie-breaking, and nextCursor pagination. Combined with the schema and annotations, an agent has everything needed to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds meaningful semantics about the query parameter's matching algorithm and about the RxNorm interaction with chapter and billableOnly filtering. It does not add much beyond the schema for cursor and limit, but the added query behavior is valuable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource—find US medical codes by matching official descriptions via full-text search—and clearly distinguishes the tool from medcode_get_code as its reverse operation. An agent can tell exactly what this tool does without inspecting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: 'Use when you have a clinical description and need the code' and explicitly contrasts this with medcode_get_code. However, it does not mention when to prefer other siblings such as medcode_map_codes or medcode_check_code, so the routing guidance is useful but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 2 tool updates
    • Changedmedcode_get_code8 fields changed
      • addedOutput schema / properties / deferred
        Added value: +{
        +  "description": "Input codes not processed because the reply reached its byte budget, in request order and as sent. Re-call with these as codes and the same system and includeHierarchy, until no deferred comes back. Absent when every code was processed.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems, and each ICD-10-PCS section value, bare integer, value in ICD-9-CM form, and NDC among the misses. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / found / items / properties / children / description
        Previous value: -"Immediate child codes (present only when includeHierarchy is true)."New value: +"Immediate child codes (present only when includeHierarchy is true). For an ICD-10-PCS table row, the complete codes that begin with it."
      • changedOutput schema / properties / found / items / properties / children / items / properties / header / description
        Previous value: -"True when the code is a non-billable category/header (ICD-10-CM) rather than a leaf code."New value: +"True when the code is a non-billable header with codes below it — an ICD-10-CM category, a HCPCS range bucket, or a three-character ICD-10-PCS table row — rather than a leaf code."
      • changedOutput schema / properties / found / items / properties / childrenTruncated / description
        Previous value: -"True when the code has more immediate children than `children` carries — the list was capped at the server cap (present only when includeHierarchy is true). Retrieve the full child list with medcode_browse_hierarchy or medcode_map_codes (children) for this code."New value: +"True when the code has more immediate children than `children` carries — the list was capped at the server cap (present only when includeHierarchy is true). Retrieve the full child list with medcode_map_codes (children) for this code, passing its `system`, or medcode_browse_hierarchy outside ICD-10-PCS."
      • changedOutput schema / properties / found / items / properties / header / description
        Previous value: -"True when the code is a non-billable category/header (ICD-10-CM) rather than a leaf code."New value: +"True when the code is a non-billable header with codes below it — an ICD-10-CM category, a HCPCS range bucket, or a three-character ICD-10-PCS table row — rather than a leaf code."
      • changedOutput schema / properties / found / items / properties / parent / description
        Previous value: -"Immediate parent code (present only when includeHierarchy is true). Null at a root."New value: +"Immediate parent code, always one medcode_get_code decodes (present only when includeHierarchy is true): an ICD-10-CM code padded with the placeholder X names the nearest code above the padding (`S82.66XA` → `S82.66`), and a complete ICD-10-PCS code names its three-character table row (`0DTJ4ZZ` → `0DT`). Null at a root — an ICD-10-CM category, a HCPCS range bucket, an ICD-10-PCS table row — and for RxNorm."
      • changedOutput schema / properties / notFound / items / properties / reason / description
        Previous value: -"Why it could not be resolved (absent from every bundled system — for a bare integer, with a note that CPT / HCPCS Level I codes are out of scope — absent from the explicit `system` while another bundled system holds it, which is named, a well-formed NDC nothing maps to, hyphenated or as bare 10/11 digits, an NDC looked up under an explicit `system` that skips the NDC decode, or ambiguous across systems)."New value: +"Why it could not be resolved (absent from every bundled system — for a bare integer, with a note that CPT / HCPCS Level I codes are out of scope, and for a dotted all-digit value in ICD-9-CM form such as \"250.00\", with a note that ICD-9-CM is not bundled — absent from the explicit `system` while another bundled system holds it, which is named, an ICD-10-PCS section value looked up as a code under system ICD10PCS, which is named as that section, a well-formed NDC nothing maps to, hyphenated or as bare 10/11 digits, an NDC looked up under an explicit `system` that skips the NDC decode, or ambiguous across systems)."
    • Changedmedcode_map_codes2 fields changed
      • changedOutput schema / properties / hits / items / properties / conceptType / description
        Previous value: -"The target concept's RxNorm type, present on `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` hits only. A class member may be any drug concept: an ingredient type below, or a drug product — \"SCD\"/\"SBD\" (clinical/branded drug) or \"GPCK\"/\"BPCK\" (generic/branded pack). Otherwise \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases."New value: +"The target concept's RxNorm type, present on `name_to_rxcui`, `ndc_to_rxcui`, `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` hits only. A drug-name match or a class member may be any drug concept: an ingredient type or brand name below, or a drug product — \"SCD\"/\"SBD\" (clinical/branded drug) or \"GPCK\"/\"BPCK\" (generic/branded pack), the four an `ndc_to_rxcui` hit always takes. Otherwise \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results."New value: +"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; an ICD-10-PCS table row has no parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results."
  2. 6 tool updates
    • Changedmedcode_browse_hierarchy1 field changed
      • changedOutput schema / properties / codes / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. Null when the system has no billing concept."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept."
    • Changedmedcode_check_code3 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `unknown_code`: The code does not exist in the named or detected system. `ambiguous_system`: The code is present in more than one bundled system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_code`: The code does not exist in the named system, or with no `system` in any bundled system. `ambiguous_system`: The code is present in more than one bundled system and no `system` was given. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / status / description
        Previous value: -"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired."New value: +"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired — its last valid date has passed."
      • changedOutput schema / properties / whyNot / description
        Previous value: -"Explanation for non-billable/terminated statuses, or null when valid_billable or valid."New value: +"Explanation for non-billable/terminated statuses. On valid_billable, null unless the code is scheduled for termination, when it names the last date the code may be used. Null when valid."
    • Changedmedcode_get_code4 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given (the message then names any other bundled system that holds a code). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_codes_found"
        -]New value: +[
        +  "no_codes_found",
        +  "ambiguous_system"
        +]
      • changedOutput schema / properties / found / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)."
      • changedOutput schema / properties / found / items / properties / children / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)."
    • Changedmedcode_list_systems1 field changed
      • changedOutput schema / properties / systems / items / properties / releaseId / description
        Previous value: -"Release/version identifier baked into this build, e.g. \"ICD-10-CM FY2026\"."New value: +"Release/version identifier baked into this build, e.g. \"ICD-10-CM FY2027\"."
    • Changedmedcode_map_codes1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `classType`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to any bundled code, drug, or class. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables, or a class direction was requested but it carries no RxClass class layer. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `classType`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to a bundled code, drug, or class the direction reads. The rxcui_to_* directions read RxNorm concepts only, and their miss names any other bundled system that holds the value. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables, or a class direction was requested but it carries no RxClass class layer. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."
    • Changedmedcode_search_codes2 fields changed
      • changedInput schema / properties / billableOnly / description
        Previous value: -"When true, return only billable leaf codes (exclude headers/categories). RxNorm has no billing concept, so this excludes every RxNorm concept."New value: +"When true, return only billable leaf codes (exclude headers/categories and HCPCS codes whose last valid date has passed). RxNorm has no billing concept, so this excludes every RxNorm concept."
      • changedOutput schema / properties / codes / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)."
  3. 2 tool updates
    • Changedmedcode_list_systems4 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "systems"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "systems",
        +      "classLayer"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / classLayer
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "classCount": {
        +          "description": "RxClass class nodes bundled, including hierarchy nodes with no direct member.",
        +          "type": "number"
        +        },
        +        "edgeCount": {
        +          "description": "Drug–class edges bundled, across every source.",
        +          "type": "number"
        +        },
        +        "sourceUrl": {
        +          "description": "The RxClass API the layer was fetched from.",
        +          "type": "string"
        +        },
        +        "sources": {
        +          "description": "One entry per bundled RxClass source.",
        +          "items": {
        +            "additionalProperties": false,
        +            "description": "Provenance for one bundled RxClass source.",
        +            "properties": {
        +              "classCount": {
        +                "description": "Classes this source asserts at least one bundled edge to.",
        +                "type": "number"
        +              },
        +              "edgeCount": {
        +                "description": "Drug–class edges this source contributes.",
        +                "type": "number"
        +              },
        +              "fetchedAt": {
        +                "description": "ISO 8601 date the RxClass snapshot was fetched — how current the class edges are.",
        +                "type": "string"
        +              },
        +              "source": {
        +                "description": "The RxClass source, as class hits carry it in `source`: MEDRT, FDASPL, FMTSME, VA, RXNORM (DEA schedules), or CDC (CVX).",
        +                "type": "string"
        +              },
        +              "version": {
        +                "description": "The release RxClass reports for this source, or null when it publishes none.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "required": [
        +              "source",
        +              "version",
        +              "classCount",
        +              "edgeCount",
        +              "fetchedAt"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "classCount",
        +        "edgeCount",
        +        "sourceUrl",
        +        "sources"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The RxClass drug-class layer the rxcui_to_classes and class_to_rxcuis directions of medcode_map_codes read — not a code system, so it has no entry in `systems`. Null when this build carries no class layer."
        +}
      • changedOutput schema / properties / systems / description
        Previous value: -"One entry per bundled code system, in canonical order."New value: +"One entry per bundled code system, in canonical order — the systems the `system` inputs of the other tools accept."
      • changedOutput schema / properties / systems / items / properties / builtAt / description
        Previous value: -"ISO 8601 timestamp when this system was last baked."New value: +"ISO 8601 timestamp of this system’s data. For ICD-10-CM, ICD-10-PCS, and HCPCS, the time the index was built from the release named in `releaseId`. For RxNorm, which publishes no release label, the date the RxNav snapshot was fetched — how current its drug data is, unchanged by a rebuild from the same snapshot."
    • Changedmedcode_map_codes18 fields changed
      • addedInput schema / properties / classType
        Added value: +{
        +  "description": "For rxcui_to_classes and class_to_rxcuis only: keep only classes of this RxClass type — EPC (FDA established pharmacologic class), MOA (mechanism of action), PE (physiologic effect), PK (pharmacokinetics), TC (therapeutic category), CHEM (chemical structure), DISEASE (diseases the drug may treat, prevent, diagnose, or induce, or is contraindicated with), VA (VA drug class, recorded almost only on drug products), SCHEDULE (DEA controlled-substance schedule, recorded on drug products only), CVX (CDC vaccine code). Omit for every type. Rejected on every other direction.",
        +  "enum": [
        +    "EPC",
        +    "MOA",
        +    "PE",
        +    "PK",
        +    "TC",
        +    "CHEM",
        +    "DISEASE",
        +    "VA",
        +    "SCHEDULE",
        +    "CVX"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / cursor / description
        Previous value: -"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc). Omit for the first page; an empty string counts as omitted. A non-empty cursor on any other direction is rejected."New value: +"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis). Omit for the first page; an empty string counts as omitted. A non-empty cursor on any other direction is rejected."
      • changedInput schema / properties / direction / description
        Previous value: -"What to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks."New value: +"What to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks; rxcui_to_classes and class_to_rxcuis are RxClass drug-class crosswalks."
      • changedInput schema / properties / direction / enum
        Previous value: -[
        -  "parents",
        -  "children",
        -  "name_to_rxcui",
        -  "ndc_to_rxcui",
        -  "rxcui_to_ndc",
        -  "rxcui_to_ingredients",
        -  "rxcui_to_brands"
        -]New value: +[
        +  "parents",
        +  "children",
        +  "name_to_rxcui",
        +  "ndc_to_rxcui",
        +  "rxcui_to_ndc",
        +  "rxcui_to_ingredients",
        +  "rxcui_to_brands",
        +  "rxcui_to_classes",
        +  "class_to_rxcuis"
        +]
      • changedInput schema / properties / from / description
        Previous value: -"The source value: a code (for parents/children), a drug name, an NDC, or an RXCUI. Must not be blank or whitespace-only."New value: +"The source value: a code (for parents/children), a drug name, an NDC, an RXCUI, or an RxClass class ID (for class_to_rxcuis). Must not be blank or whitespace-only."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results per page, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Rejected on every other direction."New value: +"Max results per page, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Rejected on every other direction."
      • changedInput schema / properties / system / description
        Previous value: -"For parents/children, force the source code into this system. Omit to auto-detect. The drug directions resolve in RxNorm and accept only \"RXNORM\" (no effect); any other value there is rejected."New value: +"For parents/children, force the source code into this system. Omit to auto-detect. The drug and class directions resolve in RxNorm and accept only \"RXNORM\" (no effect); any other value there is rejected."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to any bundled code. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `classType`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to any bundled code, drug, or class. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables, or a class direction was requested but it carries no RxClass class layer. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / hits / items / properties / classType
        Added value: +{
        +  "description": "The RxClass class type, on `rxcui_to_classes` and `class_to_rxcuis` hits only — the values the `classType` input takes.",
        +  "enum": [
        +    "EPC",
        +    "MOA",
        +    "PE",
        +    "PK",
        +    "TC",
        +    "CHEM",
        +    "DISEASE",
        +    "VA",
        +    "SCHEDULE",
        +    "CVX"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / hits / items / properties / conceptType / description
        Previous value: -"The target concept's RxNorm type, present on `rxcui_to_ingredients` and `rxcui_to_brands` hits only: \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases."New value: +"The target concept's RxNorm type, present on `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` hits only. A class member may be any drug concept: an ingredient type below, or a drug product — \"SCD\"/\"SBD\" (clinical/branded drug) or \"GPCK\"/\"BPCK\" (generic/branded pack). Otherwise \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases."
      • changedOutput schema / properties / hits / items / properties / description / description
        Previous value: -"Description of the target when available: the code description for hierarchy hits, the official RxNorm name for the `name_to_rxcui`, `ndc_to_rxcui`, `rxcui_to_ingredients`, and `rxcui_to_brands` drug concepts. Absent for `rxcui_to_ndc`, whose targets are package identifiers with no description of their own."New value: +"Description of the target when available: the code description for hierarchy hits, the official RxNorm name for the `name_to_rxcui`, `ndc_to_rxcui`, `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` drug concepts, and the class name for `rxcui_to_classes`. Absent for `rxcui_to_ndc`, whose targets are package identifiers with no description of their own."
      • addedOutput schema / properties / hits / items / properties / relation
        Added value: +{
        +  "description": "The RxClass relationship between the drug and the class, on `rxcui_to_classes` and `class_to_rxcuis` hits only: has_epc, has_moa, has_pe, has_pk, site_of_metabolism, has_tc, has_ingredient / has_chemical_structure / has_active_metabolites (CHEM), may_treat / may_prevent / may_diagnose / induces (DISEASE), has_vaclass / has_vaclass_extended, has_schedule, isa_cvx. A `ci_` relation (ci_with, ci_moa, ci_pe, ci_chemclass) is a contraindication: the drug is contraindicated with that disease or class — never an indication, and never class membership.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / hits / items / properties / source / description
        Previous value: -"Which system or relationship edge produced this hit (e.g. \"ICD10CM\", \"has_ingredient\", \"NDC\")."New value: +"Which system or relationship edge produced this hit (e.g. \"ICD10CM\", \"has_ingredient\", \"NDC\"). On the class directions, the RxClass source asserting the drug–class edge: \"MEDRT\" (VA MED-RT), \"FDASPL\" (FDA structured product labels), \"FMTSME\" (Federal Medication Terminologies), \"VA\" (VA National Formulary classes), \"RXNORM\" (DEA schedules as RxNorm records them), or \"CDC\" (CVX vaccine codes)."
      • changedOutput schema / properties / hits / items / properties / system / description
        Previous value: -"The code system of the target value, or null when the target is not a system code (e.g. an NDC)."New value: +"The code system of the target value, or null when the target is not a system code (an NDC, or an RxClass class ID)."
      • changedOutput schema / properties / hits / items / properties / value / description
        Previous value: -"The mapped target value (a code, RXCUI, or NDC)."New value: +"The mapped target value (a code, RXCUI, NDC, or RxClass class ID)."
      • addedOutput schema / properties / hits / items / properties / via
        Added value: +{
        +  "description": "On `rxcui_to_classes` hits only: the ingredient RXCUI a drug product inherits this class through — RxClass attaches most classes to ingredients. Absent when the class attaches to the source RXCUI itself. When several ingredients carry the same class, names an ingredient (\"IN\") over its precise ingredient (\"PIN\"), then the lowest RXCUI.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent; RxNorm concepts have no code hierarchy), or the `cursor` starts past the last page of a direction that does have results."New value: +"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results."
      • changedOutput schema / properties / truncated / description
        Previous value: -"Paginated directions (children, name_to_rxcui, rxcui_to_ndc) only: true when more results exist beyond this page."New value: +"Paginated directions (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis) only: true when more results exist beyond this page."
  4. 5 tool updates
    • Changedmedcode_browse_hierarchy2 fields changed
      • changedOutput schema / properties / codes / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf."New value: +"True when the code is a billable leaf. Null when the system has no billing concept."
      • changedOutput schema / properties / codes / items / properties / billable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
    • Changedmedcode_check_code5 fields changed
      • changedOutput schema / properties / billable / description
        Previous value: -"True only when status is valid_billable."New value: +"True only when status is valid_billable. Null when status is valid — the system has no billing concept."
      • changedOutput schema / properties / billable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / status / description
        Previous value: -"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; terminated = retired."New value: +"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired."
      • changedOutput schema / properties / status / enum
        Previous value: -[
        -  "valid_billable",
        -  "valid_not_billable",
        -  "valid_header",
        -  "terminated"
        -]New value: +[
        +  "valid_billable",
        +  "valid_not_billable",
        +  "valid_header",
        +  "valid",
        +  "terminated"
        +]
      • changedOutput schema / properties / whyNot / description
        Previous value: -"Explanation for non-billable/terminated statuses, or null when valid_billable."New value: +"Explanation for non-billable/terminated statuses, or null when valid_billable or valid."
    • Changedmedcode_get_code13 fields changed
      • changedInput schema / properties / system / description
        Previous value: -"Force every code to be looked up in this system. Omit to auto-detect per code."New value: +"Force every code to be looked up in this system, which also skips the NDC decode. Omit to auto-detect per code."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes exist in any bundled system. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given (the message then names any other bundled system that holds a code). Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / found / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes."New value: +"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."
      • changedOutput schema / properties / found / items / properties / billable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / found / items / properties / chapter / description
        Previous value: -"Chapter/range bucket the code belongs to, or null when not applicable."New value: +"Chapter/range bucket the code belongs to, or null when not applicable. For RxNorm, the concept term type (IN, PIN, MIN, BN, SCD, SBD, GPCK, BPCK)."
      • changedOutput schema / properties / found / items / properties / children / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes."New value: +"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."
      • changedOutput schema / properties / found / items / properties / children / items / properties / billable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / found / items / properties / children / items / properties / chapter / description
        Previous value: -"Chapter/range bucket the code belongs to, or null when not applicable."New value: +"Chapter/range bucket the code belongs to, or null when not applicable. For RxNorm, the concept term type (IN, PIN, MIN, BN, SCD, SBD, GPCK, BPCK)."
      • changedOutput schema / properties / found / items / properties / children / items / properties / shortDescription / description
        Previous value: -"Official short/abbreviated description, or null when none is on record."New value: +"Official short/abbreviated description, or null when none is on record. Always null for RxNorm, which publishes a single name."
      • changedOutput schema / properties / found / items / properties / children / items / properties / system / description
        Previous value: -"The system that answered, echoed for chaining: \"ICD10CM\", \"ICD10PCS\", \"HCPCS\", or \"RXNORM\"."New value: +"The system that answered: \"ICD10CM\", \"ICD10PCS\", \"HCPCS\", or \"RXNORM\". Pass it as `system` to medcode_check_code, or to medcode_map_codes on a parents/children walk; the map_codes drug directions accept only \"RXNORM\", which they need no `system` to reach."
      • changedOutput schema / properties / found / items / properties / shortDescription / description
        Previous value: -"Official short/abbreviated description, or null when none is on record."New value: +"Official short/abbreviated description, or null when none is on record. Always null for RxNorm, which publishes a single name."
      • changedOutput schema / properties / found / items / properties / system / description
        Previous value: -"The system that answered, echoed for chaining: \"ICD10CM\", \"ICD10PCS\", \"HCPCS\", or \"RXNORM\"."New value: +"The system that answered: \"ICD10CM\", \"ICD10PCS\", \"HCPCS\", or \"RXNORM\". Pass it as `system` to medcode_check_code, or to medcode_map_codes on a parents/children walk; the map_codes drug directions accept only \"RXNORM\", which they need no `system` to reach."
      • changedOutput schema / properties / notFound / items / properties / reason / description
        Previous value: -"Why it could not be resolved (absent from every bundled system, a well-formed NDC nothing maps to, or ambiguous across systems)."New value: +"Why it could not be resolved (absent from every bundled system — for a bare integer, with a note that CPT / HCPCS Level I codes are out of scope — absent from the explicit `system` while another bundled system holds it, which is named, a well-formed NDC nothing maps to, hyphenated or as bare 10/11 digits, an NDC looked up under an explicit `system` that skips the NDC decode, or ambiguous across systems)."
    • Changedmedcode_map_codes6 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions (children, name_to_rxcui, rxcui_to_ndc). Omit for the first page."New value: +"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc). Omit for the first page; an empty string counts as omitted. A non-empty cursor on any other direction is rejected."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results per page for the paginated directions (children, name_to_rxcui, rxcui_to_ndc). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Ignored by the point directions."New value: +"Max results per page, for the paginated directions only (children, name_to_rxcui, rxcui_to_ndc). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Rejected on every other direction."
      • changedInput schema / properties / system / description
        Previous value: -"For parents/children, force the source code into this system. Omit to auto-detect."New value: +"For parents/children, force the source code into this system. Omit to auto-detect. The drug directions resolve in RxNorm and accept only \"RXNORM\" (no effect); any other value there is rejected."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `no_mapping`: The source value did not resolve to any bundled code. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to any bundled code. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_mapping",
        -  "direction_unavailable",
        -  "ambiguous_system"
        -]New value: +[
        +  "field_not_applicable",
        +  "no_mapping",
        +  "direction_unavailable",
        +  "ambiguous_system"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent), or the `cursor` starts past the last page of a direction that does have results."New value: +"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent; RxNorm concepts have no code hierarchy), or the `cursor` starts past the last page of a direction that does have results."
    • Changedmedcode_search_codes6 fields changed
      • changedInput schema / properties / billableOnly / description
        Previous value: -"When true, return only billable leaf codes (exclude headers/categories)."New value: +"When true, return only billable leaf codes (exclude headers/categories). RxNorm has no billing concept, so this excludes every RxNorm concept."
      • changedOutput schema / properties / codes / items / properties / billable / description
        Previous value: -"True when the code is a billable leaf."New value: +"True when the code is a billable leaf. Null when the system has no billing concept (RxNorm)."
      • changedOutput schema / properties / codes / items / properties / billable / type
        Previous value: -"boolean"New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / codes / items / properties / chapter / description
        Previous value: -"Chapter/range bucket, or null."New value: +"Chapter/range bucket, or null. For RxNorm, the concept term type (IN, PIN, MIN, BN, SCD, SBD, GPCK, BPCK)."
      • changedOutput schema / properties / codes / items / properties / shortDescription / description
        Previous value: -"Official short description, or null when none is on record."New value: +"Official short description, or null when none is on record. Always null for RxNorm, which publishes a single name."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when nothing matched — echoes the query and suggests how to broaden."New value: +"Guidance when nothing matched — echoes the query and suggests how to broaden, or names `billableOnly` as the cause when the searched system has no billing concept."
  5. 6 tool updates
    • Changedmedcode_browse_hierarchy6 fields changed
      • removedOutput schema / properties / codes / items / properties / chapter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / chapter / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / codes / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / codes / items / properties / shortDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / shortDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmedcode_check_code2 fields changed
      • removedOutput schema / properties / whyNot / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / whyNot / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmedcode_get_code14 fields changed
      • removedOutput schema / properties / found / items / properties / chapter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / chapter / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / children / items / properties / chapter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / children / items / properties / chapter / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / children / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / children / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / children / items / properties / shortDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / children / items / properties / shortDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / parent / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / parent / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / found / items / properties / shortDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / found / items / properties / shortDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmedcode_list_systems6 fields changed
      • removedOutput schema / properties / systems / items / properties / effectiveEnd / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / systems / items / properties / effectiveEnd / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / systems / items / properties / effectiveStart / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / systems / items / properties / effectiveStart / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / systems / items / properties / sourceUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / systems / items / properties / sourceUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmedcode_map_codes4 fields changed
      • removedOutput schema / properties / hits / items / properties / system / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / hits / items / properties / system / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / resolvedSystem / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / resolvedSystem / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmedcode_search_codes10 fields changed
      • removedOutput schema / properties / appliedFilters / properties / chapter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / appliedFilters / properties / chapter / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / appliedFilters / properties / system / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / appliedFilters / properties / system / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / codes / items / properties / chapter / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / chapter / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / codes / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / codes / items / properties / shortDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / codes / items / properties / shortDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  6. 6 tool updates
    • Changedmedcode_browse_hierarchy6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "kind",
        +      "codes",
        +      "axes",
        +      "truncated",
        +      "shown",
        +      "cap"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `unknown_node`: The node does not exist in the system — for ICD-10-PCS, also when it uses a character outside the axis alphabet or begins no bundled code. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "unknown_node"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "kind",
        -  "codes",
        -  "axes",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]
    • Changedmedcode_check_code6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "system",
        +      "code",
        +      "status",
        +      "billable",
        +      "whyNot"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `unknown_code`: The code does not exist in the named or detected system. `ambiguous_system`: The code is present in more than one bundled system and no `system` was given. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "unknown_code",
        +            "ambiguous_system"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "system",
        -  "code",
        -  "status",
        -  "billable",
        -  "whyNot"
        -]
    • Changedmedcode_get_code6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "found",
        +      "notFound"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes exist in any bundled system. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_codes_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "found",
        -  "notFound"
        -]
    • Changedmedcode_list_systems6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "systems"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "systems"
        -]
    • Changedmedcode_map_codes6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "from",
        +      "direction",
        +      "resolvedSystem",
        +      "hits"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_mapping`: The source value did not resolve to any bundled code. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_mapping",
        +            "direction_unavailable",
        +            "ambiguous_system"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "from",
        -  "direction",
        -  "resolvedSystem",
        -  "hits"
        -]
    • Changedmedcode_search_codes6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "codes",
        +      "effectiveQuery",
        +      "appliedFilters",
        +      "truncated",
        +      "shown",
        +      "cap"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "codes",
        -  "effectiveQuery",
        -  "appliedFilters",
        -  "truncated",
        -  "shown",
        -  "cap"
        -]
  7. 4 tool updates
    • Changedmedcode_check_code1 field changed
      • addedOutput schema / properties / alsoInSystems
        Added value: +{
        +  "description": "Other bundled systems holding this same code string, present only when there is at least one. The verdict above is for the system this code resolved in; the code is a DIFFERENT code in each system listed here, with its own billability — \"B00\" is the ICD-10-CM category \"Herpesviral [herpes simplex] infections\" and also the ICD-10-PCS table row \"Imaging, Central Nervous System, Plain Radiography\". Re-call with `system` set to one of these values to validate it there.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedmedcode_get_code3 fields changed
      • changedInput schema / properties / codes / description
        Previous value: -"Codes to decode (1–50). Mixed systems are fine — each is detected independently. An NDC (hyphenated or 10/11-digit) decodes to its RxNorm product."New value: +"Codes to decode (1–50). Mixed systems are fine — each is detected independently. An NDC decodes to its RxNorm product: hyphenated as 4-4-2, 5-3-2, 5-4-1, or 5-4-2, or as bare 10/11 digits."
      • addedOutput schema / properties / found / items / properties / alsoInSystems
        Added value: +{
        +  "description": "Other bundled systems holding this same code string, present only when there is at least one. The result above is the system this code resolved in; the code is a DIFFERENT code in each system listed here — \"B00\" is the ICD-10-CM category \"Herpesviral [herpes simplex] infections\" and also the ICD-10-PCS table row \"Imaging, Central Nervous System, Plain Radiography\". Re-call with `system` set to one of these values to decode it there.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / notFound / items / properties / reason / description
        Previous value: -"Why it could not be resolved (unknown shape, not in the bundled release, or ambiguous)."New value: +"Why it could not be resolved (absent from every bundled system, a well-formed NDC nothing maps to, or ambiguous across systems)."
    • Changedmedcode_map_codes7 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions (children, name_to_rxcui). Omit for the first page."New value: +"Opaque continuation token from a previous response's `nextCursor`, for the paginated directions (children, name_to_rxcui, rxcui_to_ndc). Omit for the first page."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results per page for the paginated directions (children, name_to_rxcui). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Ignored by the point directions."New value: +"Max results per page for the paginated directions (children, name_to_rxcui, rxcui_to_ndc). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Ignored by the point directions."
      • addedOutput schema / properties / alsoInSystems
        Added value: +{
        +  "description": "Other bundled systems holding the same `from` code string, present only when there is at least one (hierarchy directions only — a drug name, NDC, or RXCUI is not system-scoped). The hits above were walked in `resolvedSystem` alone; the code is a DIFFERENT code with a different hierarchy in each system listed here — \"B00\" is the ICD-10-CM category \"Herpesviral [herpes simplex] infections\" and also the ICD-10-PCS table row \"Imaging, Central Nervous System, Plain Radiography\". Re-call with `system` set to one of these values to walk it there.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / hits / items / properties / conceptType
        Added value: +{
        +  "description": "The target concept's RxNorm type, present on `rxcui_to_ingredients` and `rxcui_to_brands` hits only: \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / hits / items / properties / description / description
        Previous value: -"Description of the target when available."New value: +"Description of the target when available: the code description for hierarchy hits, the official RxNorm name for the `name_to_rxcui`, `ndc_to_rxcui`, `rxcui_to_ingredients`, and `rxcui_to_brands` drug concepts. Absent for `rxcui_to_ndc`, whose targets are package identifiers with no description of their own."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when a resolvable code has no edge in the requested direction (e.g. a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent)."New value: +"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent), or the `cursor` starts past the last page of a direction that does have results."
      • changedOutput schema / properties / truncated / description
        Previous value: -"Paginated directions (children, name_to_rxcui) only: true when more results exist beyond this page."New value: +"Paginated directions (children, name_to_rxcui, rxcui_to_ndc) only: true when more results exist beyond this page."
    • Changedmedcode_search_codes1 field changed
      • changedInput schema / properties / chapter / description
        Previous value: -"Restrict to a chapter/range bucket (the value from a code's `chapter` field)."New value: +"Restrict to a chapter/range bucket (the value from a code's `chapter` field). Case-insensitive: surrounding whitespace is trimmed and the value is upper-cased to match how chapters are stored, and `appliedFilters.chapter` echoes the upper-cased value that actually ran. A blank or whitespace-only value carries no filtering intent and is treated as omitted, which the response discloses as `appliedFilters.chapter: null`."
  8. 5 tool updates
    • Changedmedcode_browse_hierarchy3 fields changed
      • addedInput schema / properties / node / anyOf
        Added value: +[
        +  {
        +    "const": "",
        +    "type": "string"
        +  },
        +  {
        +    "description": "A code whose children to list (ICD-10-CM/HCPCS). ICD-10-PCS supports only top-level Section browsing — a partial PCS code does not expand to next-position axis values.",
        +    "minLength": 1,
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / node / description
        Previous value: -"A node to expand. For ICD-10-CM/HCPCS, a code whose children to list. ICD-10-PCS supports only top-level Section browsing (omit `node`) — a partial PCS code does not expand to next-position axis values. Omit for the top level."New value: +"A node to expand — or omit / pass an empty string for the top level. For ICD-10-CM/HCPCS, a code whose children to list; ICD-10-PCS supports only top-level Section browsing. Must not be blank or whitespace-only when provided."
      • removedInput schema / properties / node / type
        Removed value: -"string"
    • Changedmedcode_check_code1 field changed
      • changedInput schema / properties / code / description
        Previous value: -"The code to validate, with or without dots."New value: +"The code to validate, with or without dots. Must not be blank or whitespace-only."
    • Changedmedcode_get_code1 field changed
      • changedInput schema / properties / codes / items / description
        Previous value: -"A single code to decode (with or without dots), an RXCUI, or an NDC."New value: +"A single code to decode (with or without dots), an RXCUI, or an NDC. Must not be blank or whitespace-only."
    • Changedmedcode_map_codes1 field changed
      • changedInput schema / properties / from / description
        Previous value: -"The source value: a code (for parents/children), a drug name, an NDC, or an RXCUI."New value: +"The source value: a code (for parents/children), a drug name, an NDC, or an RXCUI. Must not be blank or whitespace-only."
    • Changedmedcode_search_codes1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Clinical description to match, e.g. \"type 2 diabetes with neuropathy\"."New value: +"Clinical description to match, e.g. \"type 2 diabetes with neuropathy\". Must not be blank or whitespace-only."
  9. 4 tool updates
    • Changedmedcode_browse_hierarchy6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation token from a previous response's `nextCursor`, to fetch the next page of children/entries. Omit for the top of the list.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max entries to return. Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200."New value: +"Max entries per page. Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200."
      • changedOutput schema / properties / cap / description
        Previous value: -"The limit that was applied."New value: +"The page size that was applied."
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Opaque token to pass back as `cursor` for the next page. Present only when more entries exist beyond this page.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / shown / description
        Previous value: -"Number of entries returned (codes or axes)."New value: +"Number of entries returned on this page (codes or axes)."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when the returned list was capped at the limit."New value: +"True when more entries exist beyond this page."
    • Changedmedcode_get_code1 field changed
      • addedOutput schema / properties / found / items / properties / childrenTruncated
        Added value: +{
        +  "description": "True when the code has more immediate children than `children` carries — the list was capped at the server cap (present only when includeHierarchy is true). Retrieve the full child list with medcode_browse_hierarchy or medcode_map_codes (children) for this code.",
        +  "type": "boolean"
        +}
    • Changedmedcode_map_codes6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation token from a previous response's `nextCursor`, for the paginated directions (children, name_to_rxcui). Omit for the first page.",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Max results per page for the paginated directions (children, name_to_rxcui). Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. Ignored by the point directions.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "Paginated directions only: the page size that was applied.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Paginated directions only: opaque token to pass back as `cursor` for the next page. Present only when more results exist beyond this page.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Paginated directions only: number of hits returned on this page.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "Paginated directions (children, name_to_rxcui) only: true when more results exist beyond this page.",
        +  "type": "boolean"
        +}
    • Changedmedcode_search_codes6 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation token from a previous response's `nextCursor`, to fetch the next page of the same ranked result set. Omit for the first page.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Max codes to return. Defaults to the server's MEDCODE_MAX_RESULTS (50), ceiling 200."New value: +"Max codes per page. Defaults to the server's MEDCODE_MAX_RESULTS (50), ceiling 200."
      • changedOutput schema / properties / cap / description
        Previous value: -"The limit that was applied."New value: +"The page size that was applied."
      • addedOutput schema / properties / nextCursor
        Added value: +{
        +  "description": "Opaque token to pass back as `cursor` for the next page. Present only when more matches exist beyond this page.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / shown / description
        Previous value: -"Number of codes returned."New value: +"Number of codes returned on this page."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when results were capped at the limit."New value: +"True when more matches exist beyond this page."
  10. 2 tool updates
    • Changedmedcode_get_code4 fields changed
      • changedInput schema / properties / codes / description
        Previous value: -"Codes to decode (1–50). Mixed systems are fine — each is detected independently."New value: +"Codes to decode (1–50). Mixed systems are fine — each is detected independently. An NDC (hyphenated or 10/11-digit) decodes to its RxNorm product."
      • changedInput schema / properties / codes / items / description
        Previous value: -"A single code to decode, with or without dots."New value: +"A single code to decode (with or without dots), an RXCUI, or an NDC."
      • changedOutput schema / properties / found / items / description
        Previous value: -"A decoded code, optionally with its parent and immediate children."New value: +"A decoded code, optionally with its parent/children and resolution source."
      • addedOutput schema / properties / found / items / properties / source
        Added value: +{
        +  "description": "Resolution provenance when the input was not a direct code: \"NDC\" when an NDC was decoded to its RxNorm product via the NDC↔RxNorm map. Omitted for direct code lookups.",
        +  "type": "string"
        +}
    • Changedmedcode_map_codes1 field changed
      • changedInput schema / properties / direction / description
        Previous value: -"What to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks (phase 2)."New value: +"What to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks."
  11. 2 tool updates
    • Changedmedcode_browse_hierarchy2 fields changed
      • changedInput schema / properties / node / description
        Previous value: -"A node to expand. For ICD-10-CM/HCPCS, a code whose children to list. For ICD-10-PCS, a partial code whose next-position axis values to list. Omit for the top level."New value: +"A node to expand. For ICD-10-CM/HCPCS, a code whose children to list. ICD-10-PCS supports only top-level Section browsing (omit `node`) — a partial PCS code does not expand to next-position axis values. Omit for the top level."
      • changedOutput schema / properties / axes / description
        Previous value: -"Valid next-position axis values for a partial PCS code. Empty when kind is \"codes\"."New value: +"The top-level ICD-10-PCS Section axis values (only the Section axis is enumerable). Empty when kind is \"codes\"."
    • Changedmedcode_map_codes2 fields changed
      • changedInput schema / properties / direction / description
        Previous value: -"What to map to. parents/children walk the code hierarchy; the rxcui/ndc/name directions are RxNorm drug crosswalks (phase 2)."New value: +"What to map to. parents/children return the immediate parent or children only (depth-1) — call iteratively to walk a full path; the rxcui/ndc/name directions are RxNorm drug crosswalks (phase 2)."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when a resolvable code has no edge in the requested direction (e.g. a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent).",
        +  "type": "string"
        +}
  12. 6 tool updates
    • First observedmedcode_browse_hierarchy
    • First observedmedcode_check_code
    • First observedmedcode_get_code
    • First observedmedcode_list_systems
    • First observedmedcode_map_codes
    • First observedmedcode_search_codes

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Offline MCP server for ICD medical code lookup, search, and crosswalk translation with 124K codes and 102K mappings, all local with zero network calls.
    5
    3
    MIT
  • 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.
    469 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables local-first lookup of ICD-10-CM codes and diagnosis phrases, returning official descriptions, hierarchy, index references, and applicable Tabular instructions. It also supports conservative synthetic-note candidate suggestions and structural validation of selected code sets for coder review.
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for automated ICD-10 medical coding. Code clinical text to ICD-10-CM diagnoses, search 74,000+ codes, and de-identify PHI via the AutoICD API.
    6
    19 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.