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 with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/medical-codes-mcp-server
GitHub Stars
2
Server Listing
medical-codes-mcp-server

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: browse hierarchy, validate a code, decode descriptions, list systems, crosswalk codes, and search by concept. There is no meaningful overlap—even the hierarchy-walking in browse_hierarchy vs map_codes is differentiated by discovery vs. targeted lookup.

Naming Consistency5/5

All tools follow the medcode_ verb_noun pattern in snake_case: browse_hierarchy, check_code, get_code, list_systems, map_codes, search_codes. The naming is perfectly uniform and predictable.

Tool Count5/5

Six tools is an ideal scope for a medical code reference server. Each tool earns its place and the count feels neither thin nor bloated.

Completeness5/5

The server covers the full read-only lifecycle for medical codes: system discovery, search, decode, validate, crosswalk, and hierarchy browsing. There are no obvious dead ends for common workflows like finding a code, confirming billability, or mapping across systems.

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. 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.

ParametersJSON Schema
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

ParametersJSON 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
Behavior5/5

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

Annotations already mark this read-only and idempotent, so the description earn extra credit by disclosing hierarchy semantics: prefix vs axis-based structure, which positions are browsable, the fact that positions 2–7 are context-dependent, and pagination via `nextCursor`/`cursor`. This goes well beyond the annotations and prevents incorrect calls.

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

Conciseness5/5

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

The description is dense but every sentence earns its place. The core purpose and no-search-term qualifier are front-loaded, and the lengthy ICD-10-PCS explanation is necessary to prevent invalid browsing attempts. There is no fluff or repetition of the schema.

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?

Given the tool's complexity, the description is nearly complete: it covers purpose, node semantics, hierarchy models, special ICD-10-PCS constraints, and pagination. The output schema exists, so return-value details are not required. The only substantive gap is the lack of any mention of what `system=RXNORM` returns, even though RXNORM is a valid enum value.

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 schema already documents all 4 parameters, so the baseline is 3. The description adds meaningful context for `node` (top-level vs immediate children), `cursor` (round-trip pagination), and system-specific top-level behaviors. However, the schema allows `RXNORM`, but the description's examples only cover ICD-10-CM, HCPCS, and ICD-10-PCS, leaving RXNORM behavior undocumented.

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 uses a specific verb ('Walk') and a specific resource ('a US medical code system's hierarchy'), and it clearly distinguishes itself from search tools by emphasizing 'without a search term.' It also explains the top-level forms for ICD-10-CM, HCPCS, and ICD-10-PCS, so an agent can immediately tell what this tool is for.

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 explicit invocation variants: with no `node` returns top-level entries, with a `node` returns immediate children System-specific usage is explained, including the ICD-10-PCS axis limitation. It does not explicitly name a sibling alternative like medcode_search_codes for term-based lookup, but the 'without a search term' phrase strongly implies the boundary.

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"). 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; 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 or detected system raises unknown_code, which names the other bundled system when one holds the 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.

ParametersJSON Schema
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

ParametersJSON 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.
systemNoThe system the code was resolved in, echoed for chaining.
whyNotNoExplanation for non-billable/terminated statuses, or null when valid_billable or 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.4/5.0
Behavior5/5

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

Beyond readOnly/idempotent annotations, it discloses error semantics (unknown_code only for absent code), successful non-billable results, whyNot, RxNorm null billable behavior, and alsoInSystems cross-system behavior. These are non-obvious behavioral traits an agent could not infer from annotations or schema.

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 definition is dense but front-loaded: core purpose first, then return statuses, then usage, then edge cases. Every sentence adds meaningful operational detail, but several clauses are packed into long sentences and some explanations add complexity that could be streamlined.

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 read-only validation tool with an output schema, the description covers invocation, system resolution, error behavior, and special cases completely. No critical operational fact needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes both parameters, including 'Omit to auto-detect from the code's shape.' The description adds helpful behavioral context around system detection and cross-system results, but it does not substantially redefine parameter meanings beyond what the schema gives.

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?

First sentence uses a specific action ('Validate whether') against a specific resource ('US medical code') with three concrete criteria: exists, current, billable. The rest details the discriminated statuses in a way that distinguishes it from sibling tools like search_codes or browse_hierarchy without needing to see their schemas.

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 clear use context: 'detail a coder needs before submitting a claim.' It also explains when auto-detection is sufficient versus when to pass an explicit system to disambiguate. However, it does not explicitly name sibling tools or state when not to use this tool versus medcode_get_code or medcode_map_codes.

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; 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. 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_browse_hierarchy or medcode_map_codes). 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 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.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
foundNoSuccessfully decoded codes, in request order.
notFoundNoCodes that did not resolve, with per-code reasons.

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses rich behavioral traits beyond the read-only/idempotent annotations: partial success with found/notFound and per-code reasons, malformed NDC codes staying unresolved, cross-system collision handling via alsoInSystems, hierarchy attachment with childrenTruncated, and system echoing for chaining. No contradiction with annotations; it enriches them with precise resolution semantics.

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 core purpose is front-loaded and the text flows logically from decoding to hierarchy to collision handling, with every sentence adding substantive information. However, the long multi-clause, comma-packed sentences require careful parsing, so the efficient density sacrifices some readability and structure.

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 full parameter coverage, an output schema, and annotations, the description still adds all needed behavioral context: batch limits, partial-success semantics, malformed-code resolution, hierarchy truncation, and cross-system collision notes. Nothing an agent needs to invoke this tool correctly is missing or ambiguous.

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?

Although the input schema already documents all three parameters at 100% coverage, the description adds operational meaning: codes can be mixed and independently detected, NDC formats are enumerated, forcing the system parameter skips NDC decode, and includeHierarchy attaches parent/children with a truncation flag. This materially improves an agent's ability to choose correct parameter values.

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 opens with a specific verb ('Decode') and names the resource (US medical codes) plus the exact systems covered, including the NDC offline decoding edge case. It distinguishes itself from sibling tools by explicitly referencing medcode_browse_hierarchy/medcode_map_codes for hierarchy walking and a billability check, so an agent can identify it without opening 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 Guidelines5/5

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

It explicitly tells the agent to omit the system parameter for auto-detection and to pass it only for genuinely ambiguous values. It also names alternatives for walking a full hierarchy (medcode_browse_hierarchy or medcode_map_codes) and for chaining into a billability check, providing clear when-to-use and when-not-to-use guidance.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON 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.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true, and the description adds valuable behavioral context: the corpus is offline, built at package-build time, and the call reports exactly which release is baked into the running server. It also clarifies the ICD-10-CM/PCS scope to prevent confusion with base ICD-10/ICD-11. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states what is listed, the second states when to use the result, and the third adds the offline/build-time behavior and the ICD-10 scope clarification. It is dense but not bloated.

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, the description does not need to detail return values. It fully covers the tool's purpose, the systems involved, versioning semantics, offline behavior, and the relationship to sibling operations, so an agent has enough context to select and invoke it 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?

The tool takes zero parameters and schema description coverage is 100%, so there are no parameter semantics for the description to clarify. The description instead usefully explains what the returned report contains, which is the relevant semantic content for a no-argument call.

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 uses a specific verb and resource: 'List the bundled US medical code systems' with their release identifiers, effective dates, and code counts, plus the RxClass layer. It also distinguishes this metadata/version-reporting tool from sibling decode/search/crosswalk tools by saying it confirms which releases are active before acting on those operations.

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 description explicitly frames when to use this tool: 'before acting on any decode, search, or crosswalk result.' It gives clear contextual guidance for version verification, though it does not explicitly name alternative tools or state when not to use it beyond that implied scope.

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 prefix hierarchy one level per call — immediate parent/children only (depth-1); call iteratively for the full ancestor or descendant path (ICD-10-CM/HCPCS; ICD-10-PCS codes have no prefix parent, and RxNorm concepts 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), 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), 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.

ParametersJSON Schema
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

ParametersJSON 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; 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.
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.8/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds substantial extra behavior: successful empty results with notices, `alsoInSystems` labeling, `field_not_applicable` rejections, pagination cursors, provenance on every result, and caveats like DEA schedules existing only on drug products. No statement contradicts the annotations.

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

Conciseness5/5

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

The description is long but every section earns its place: it is organized by hierarchy, drug, and class directions, with edge cases placed next to the relevant direction. It front-loads the core purpose and uses compact, structured prose rather than repetition.

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 tool with nine directions and meaningful error/edge-case behavior, the description covers all major contexts: hierarchy depth, pagination, rejected fields, empty results, provenance, and class-type semantics. The presence of an output schema means return-value details are not needed here, so nothing essential 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?

Schema coverage is 100%, and the description goes well beyond it by expanding classType abbreviations, enumerating accepted NDC formats, explaining `via`, `relation`, `source`, and `nextCursor`, and clarifying how `system` behaves differently across direction families. An agent gets far more than the schema alone provides.

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 opens with a specific action, 'Crosswalk a US medical code or drug across systems and within a hierarchy,' and then enumerates the nine mapping directions by family. This clearly distinguishes `map_codes` from the sibling browse/check/get/list/search tools, which are lookup-oriented rather than crosswalk-oriented.

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 description gives rich when-to-use details per direction family, including iterative calls for full hierarchy paths, pagination via cursor, and which directions accept which fields. It does not explicitly name alternative sibling tools or state when not to use this tool, so it falls just short of full guidance.

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 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.

ParametersJSON Schema
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). RxNorm has no billing concept, so this excludes every RxNorm concept.

Output Schema

ParametersJSON 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.9/5.0
Behavior5/5

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

The description goes far beyond the readOnly/idempotent annotations by disclosing token-prefix-then-substring matching, the neuropathy example, RxNorm's drug-name-only matching, ranking order, deterministic tie-break, truncation via nextCursor, and echoed resolved system. It adds substantial behavioral context without contradicting the annotations.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, matching semantics, parameter guidance, usage context, and pagination/ranking behavior. The core purpose is front-loaded in the first sentence, and there is no filler or repetition of schema details.

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?

Given the tool's complexity, the description covers matching semantics, filter behavior, ranking, pagination, and output echoes. An output schema exists, so not explaining return shape is acceptable. The only external nuance, chapter values, is available via sibling tools and the schema, so nothing critical is missing.

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 3 applies, but the description adds meaning beyond the schema: billableOnly excludes all RxNorm concepts, chapter can narrow term-type matches, and cursor should receive nextCursor from a prior response. This enriches the parameter semantics.

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 opens with a specific verb and resource: 'Find US medical codes whose official descriptions match a described concept...' It also states the search mechanism (full-text over bundled index). It clearly distinguishes itself from medcode_get_code by framing this as the reverse operation.

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?

It explicitly says 'Use when you have a clinical description and need the code — the reverse of medcode_get_code,' providing an explicit when-to-use and naming the key alternative. It also explains how to narrow with system, billableOnly, and chapter, giving actionable selection guidance.

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_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."
  2. 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."
  3. 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"
        +]
  4. 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"
        -]
  5. 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`."
  6. 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."
  7. 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."
  8. 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."
  9. 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"
        +}
  10. 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
    B
    maintenance
    Search medical codes including ICD-10, LOINC, and clinical terms for conditions, procedures, and drugs via natural language queries.
    0
    MIT
  • 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
    10 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI agents with instant access to 10M+ OMOP medical vocabulary concepts for searching, mapping, and navigating clinical codes across SNOMED, ICD-10, RxNorm, LOINC, and more.
    11
    102 npm
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.