medical-codes-mcp-server
Server Details
Offline US medical code lookup and crosswalk — ICD-10-CM/PCS, HCPCS Level II, RxNorm. Keyless.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/medical-codes-mcp-server
- GitHub Stars
- 4
- Server Listing
- medical-codes-mcp-server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 6 tools
The six tools each target a distinct operation: search (description→code), get (code→description), check (validity/billability), list systems, browse hierarchy, and map/crosswalk. The only real overlap is between medcode_browse_hierarchy and medcode_map_codes' parents/children directions, but the descriptions explicitly delineate them (browse for orienting without a known code; map for a specific code's depth-1 walk).
All tools share the medcode_ prefix and a consistent verb_noun snake_case pattern: browse_hierarchy, check_code, get_code, list_systems, map_codes, search_codes. No mixed conventions or casing.
Six tools is well-scoped for a medical code reference server — one per core operation (search, decode, validate, browse, crosswalk, list) with no redundant or filler tools.
The surface covers the full read-only reference lifecycle: discover (browse/search), decode (get), validate/billability (check), crosswalk within and across systems including RxNorm/NDC/RxClass drug mappings (map), and release provenance (list_systems). Since it is a reference dataset, the absence of write operations is appropriate and no obvious gaps remain.
Available Tools
6 toolsmedcode_browse_hierarchyBrowse Code HierarchyARead-onlyIdempotentInspect
Walk a US medical code system's hierarchy for discovery without a search term. With no node, returns the top-level entries (ICD-10-CM categories, HCPCS range buckets, or ICD-10-PCS first-axis values). With a node, returns its immediate children. ICD-10-CM and HCPCS use a prefix hierarchy (a shorter code is the parent of a longer one); ICD-10-PCS is axis-based — each of its 7 characters is an independent axis (section, body system, root operation, body part, approach, device, qualifier), but only the top-level Section axis is browsable (omit node): positions 2–7 are context-dependent on the preceding axis path and are not enumerable from a flat partial code, so list the complete codes in a three-character ICD-10-PCS table row with medcode_map_codes (direction children) instead. Lets an agent orient in an unfamiliar system or enumerate a category's specific codes. A large child set paginates: when the response carries a nextCursor, pass it back as cursor to fetch the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | 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. | |
| limit | No | Max entries per page. Defaults to MEDCODE_MAX_RESULTS (50), ceiling 200. | |
| cursor | No | Opaque continuation token from a previous response's `nextCursor`, to fetch the next page of children/entries. Omit for the top of the list. | |
| system | Yes | The code system to browse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page size that was applied. |
| axes | No | The top-level ICD-10-PCS Section axis values (only the Section axis is enumerable). Empty when kind is "codes". |
| kind | No | "codes" for prefix-hierarchy children (ICD-10-CM/HCPCS); "axes" for ICD-10-PCS axis values. |
| codes | No | Child codes under the requested node or top level. Empty when kind is "axes". |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of entries returned on this page (codes or axes). |
| notice | No | Guidance when a node has no children/axes — suggests the top level or a valid node. |
| truncated | No | True when more entries exist beyond this page. |
| nextCursor | No | Opaque token to pass back as `cursor` for the next page. Present only when more entries exist beyond this page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, and the description adds real value on top: the prefix vs axis-based parent relationship per system, the PCS top-level-only constraint and why, and the nextCursor pagination loop. It stops short of stating result shape or depth limits, but the safety and paging profile is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior and the no-node/node split before the system-specific rules, so the agent can stop reading early. Slight cost: the PCS restriction is restated in both the description and the `node` schema, making the paragraph denser than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, single-required browse tool with an output schema and full annotation coverage, nothing an agent needs is missing: entry points, child expansion, per-system hierarchy semantics, the PCS fallback, and pagination are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns more by explaining what a `node` actually means in each system (prefix parent vs non-enumerable axes) and how `cursor` is fed back from `nextCursor`. It does not add anything for `limit`, which the schema already documents fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (walk a code system's hierarchy) and immediately scopes it as discovery without a search term, which separates it from medcode_search_codes. It also names the exact return shape per system (ICD-10-CM categories, HCPCS ranges, PCS first-axis values).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (orient in an unfamiliar system, enumerate a category's specific codes) and when not to, routing the PCS positions 2–7 case to medcode_map_codes with direction children. That is a concrete alternative plus the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_check_codeCheck Medical CodeARead-onlyIdempotentInspect
Validate whether a US medical code exists, is current, and is billable in the active bundled release. Returns a discriminated status — valid_billable, valid_not_billable, valid_header, valid, or terminated — with a whyNot explaining non-billable and terminated cases (e.g. "valid ICD-10-CM category but not billable — submit a more specific child code"). A HCPCS code is terminated once its last valid date has passed; before then it checks as billable, with that date in whyNot. This is the detail a coder needs before submitting a claim. RxNorm has no billing concept, so a current RxNorm concept is valid with billable: null and no billing verdict. Auto-detects the system from the code's shape, and a code written in ICD-10-CM dotted form (A01.00) resolves to ICD-10-CM; pass an explicit system to disambiguate. A non-billable or terminated code is a successful result with a whyNot, not an error — only a code absent from the named system, or with no system from every bundled system, raises unknown_code, which names the other bundled system that holds the code, or every system the code's shape fits. A dotted all-digit value in ICD-9-CM form (250.00) is never read as an RXCUI, and its miss says ICD-9-CM is not bundled; an ICD-10-PCS section value from medcode_browse_hierarchy (0) checked under system ICD10PCS is named as a section, not a code. A code string that also exists in another bundled system carries alsoInSystems naming it, since the verdict applies only to the system that answered.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The code to validate, with or without dots. Must not be blank or whitespace-only. | |
| system | No | Force the lookup into this system. Omit to auto-detect from the code's shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | The code in display form (ICD-10-CM carries the dot). |
| error | No | Present when the call failed. Absent on success. |
| status | No | Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired — its last valid date has passed. |
| system | No | The system the code was resolved in, echoed for chaining. |
| whyNot | No | Explanation for non-billable/terminated statuses. On valid_billable, null unless the code is scheduled for termination, when it names the last date the code may be used. Null when valid. |
| billable | No | True only when status is valid_billable. Null when status is valid — the system has no billing concept. |
| alsoInSystems | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it enumerates the discriminated status values, explains whyNot content per case, clarifies that non-billable/terminated is a successful result rather than an error, and specifies exactly when unknown_code is raised and what it contains. It also discloses the alsoInSystems caveat and RxNorm's null billing verdict — behavioral detail an agent cannot get anywhere else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and status semantics are front-loaded, but the body is a single dense paragraph mixing core contract with deep edge cases (ICD-9-CM dotted-form miss messaging, PCS section naming). Much of it earns its place, yet the lack of structure makes it hard to scan, and the ICD-9-CM aside is disproportionate to its likelihood.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though an output schema exists, the description still explains the meaningful return semantics (status discrimination, when whyNot is null, error-vs-success boundary), which is what an agent needs to interpret the result correctly. Nothing material about calling or reading the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds genuine semantics the schema lacks: the shape-based auto-detection heuristic, that dotted ICD-10-CM form resolves correctly, that a dotted all-digit ICD-9-CM value is never misread as an RXCUI, and why an explicit system disambiguates. This is disambiguation logic, not restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Validate whether a US medical code exists, is current, and is billable') and scopes it to a bundled release. It distinguishes itself from sibling tools by name (medcode_browse_hierarchy for PCS sections) and by framing ('the detail a coder needs before submitting a claim'), so an agent can tell it apart from medcode_get_code or medcode_search_codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pre-claim-validation framing gives clear context, and it names one sibling scenario explicitly ('an ICD-10-PCS section value from medcode_browse_hierarchy'). However, it never routes the agent between this and medcode_get_code or medcode_map_codes — no explicit 'use X instead when…' for the closest siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_get_codeGet Medical CodeARead-onlyIdempotentInspect
Decode one or more US medical codes to their official descriptions across ICD-10-CM (diagnoses), ICD-10-PCS (inpatient procedures), HCPCS Level II (supplies/drugs/services), and RxNorm (drugs, by RXCUI). Also decodes a National Drug Code (NDC) directly to its RxNorm product offline, tagged source: "NDC" — hyphenated in an FDA segment configuration (4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2) or as bare 10/11 digits; any other segment widths are malformed and stay unresolved. Auto-detects the system from each code's shape, and a code written in ICD-10-CM dotted form (A01.00) resolves to ICD-10-CM; pass an explicit system only when a value is genuinely ambiguous. Accepts 1–50 codes and returns partial success: resolved codes in found, unresolved in notFound with a per-code reason, so one bad code never fails the batch. Each reply holds structuredContent and the text to 24,000 bytes apiece: codes are decoded in request order, and once one has resolved, a code that would carry the reply past that budget is returned unprocessed in deferred, as sent, with every code after it — re-call with codes set to deferred and the same system and includeHierarchy until no deferred comes back. Three kinds of code are never deferred and can carry a reply past the budget: the first code that resolves, returned whole; the codes before it; and the unresolved codes after the last one that resolves, so a re-call always holds a code that resolves. Only a batch where nothing resolves fails: with ambiguous_system and candidateSystems when every code exists in more than one bundled system, otherwise with no_codes_found. Set includeHierarchy to attach each code's parent and immediate children (with a childrenTruncated flag when a code has more children than the cap returns — walk the full set via medcode_map_codes, or medcode_browse_hierarchy outside ICD-10-PCS); an ICD-10-PCS table row's children are the complete codes that begin with it. The resolved system is echoed on every result for chaining into a billability check or a medcode_map_codes parents/children walk; a bare integer that resolves nowhere is named as a possible CPT / HCPCS Level I code, which is out of scope, except a bare 10/11-digit one, which is named as an NDC no bundled drug maps to; a dotted all-digit value in ICD-9-CM form (250.00) is never read as an RXCUI and is named as ICD-9-CM, which is not bundled; an ICD-10-PCS section value from medcode_browse_hierarchy (0) looked up under system ICD10PCS is named as a section, not a code; a code string that also exists in another bundled system carries alsoInSystems naming it, so a single answer to a colliding code is never mistaken for the only one.
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes | 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. | |
| system | No | Force every code to be looked up in this system, which also skips the NDC decode. Omit to auto-detect per code. | |
| includeHierarchy | No | When true, attach each found code's parent and immediate children. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| found | No | Successfully decoded codes, in request order. |
| deferred | No | Input codes not processed because the reply reached its byte budget, in request order and as sent. Re-call with these as codes and the same system and includeHierarchy, until no deferred comes back. Absent when every code was processed. |
| notFound | No | Codes that did not resolve, with per-code reasons. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say read-only, idempotent, closed-world; the description adds a great deal beyond that — partial-success semantics with found/notFound per-code reasons, the 24,000-byte budget and deferral protocol with its three never-deferred exceptions, and the exact failure modes (ambiguous_system with candidateSystems, no_codes_found). The deferral rules are dense enough that an agent may still mis-model edge cases on first read, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, but the body is a single ~350-word paragraph with long em-dash-chained clauses that bury the deferral protocol mid-stream. Nearly every sentence carries needed information, but the lack of structural break-out for the budget/deferral rules hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover safety, yet the tool is genuinely complex (batch, mixed systems, partial success, deferral, ambiguity); the description covers the error contract and chaining of the echoed `system`. Almost nothing an agent needs is missing, though the deferral rules would benefit from tighter organization.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns an extra point by adding value-level rules the schema does not state — which NDC segment widths are valid (4-4-2, 5-3-2, 5-4-1, 5-4-2) versus malformed, dotted ICD-10-CM form resolving to ICD-10-CM, and that an ICD-10-PCS table row's children are the complete codes beginning with it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (decode) and resource (US medical codes) with the exact code systems named (ICD-10-CM, ICD-10-PCS, HCPCS Level II, RxNorm, NDC), and distinguishes itself from siblings by pointing at medcode_map_codes and medcode_browse_hierarchy for hierarchy walks and at billability checks downstream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: pass `system` only when a value is genuinely ambiguous, otherwise rely on auto-detect; re-call with `deferred` codes and the same `system`/`includeHierarchy` until none come back; use medcode_map_codes or medcode_browse_hierarchy when childrenTruncated. It even names what is out of scope (CPT / HCPCS Level I, ICD-9-CM).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_list_systemsList Code SystemsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| systems | No | One entry per bundled code system, in canonical order — the systems the `system` inputs of the other tools accept. |
| classLayer | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description reinforces this usefully by explaining the corpus is offline and baked in at package-build time, so the call reflects the running server exactly. It also adds a real scope caveat (ICD-10-CM/PCS are US clinical modifications, not ICD-10/ICD-11 base) that annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first clause is front-loaded with what is returned, followed by the usage trigger and the scoping caveat. It is slightly dense and repetitive ('release identifiers' then 'with each source's version'), but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is not required, and the description covers purpose, precondition, offline/static nature, and terminology caveats. An agent has everything needed to decide to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. Nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (bundled US medical code systems) plus exactly what is returned: release identifiers, effective dates, code counts, and RxClass source versions. It is clearly distinguished from siblings that decode, search, or crosswalk, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage trigger: call this to confirm which fiscal-year/release is active before acting on any decode, search, or crosswalk result. It does not explicitly say when not to use it, but the precondition framing makes the intended context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_map_codesMap Medical CodesARead-onlyIdempotentInspect
Crosswalk a US medical code or drug across systems and within a hierarchy. Hierarchy directions: parents and children walk a code's hierarchy one level per call — immediate parent/children only (depth-1); call iteratively for the full ancestor or descendant path. ICD-10-CM and HCPCS walk the prefix hierarchy, stepping past an ICD-10-CM level padded with the placeholder X that is not itself a code (the parent of S82.66XA is S82.66); an ICD-10-PCS three-character table row's children are the complete codes that begin with it, and a complete code's parent is its table row; RxNorm concepts have no code hierarchy. A resolvable source with no edge in the requested direction is a successful empty result with a notice, not an error. A source code string that also exists in another bundled system carries alsoInSystems naming it, since only the resolved system's hierarchy was walked. Drug directions (RxNorm): name_to_rxcui (drug name → RXCUI; one name matches ingredients, combinations, and products alike, each hit tagged with its conceptType), ndc_to_rxcui and rxcui_to_ndc (NDC ↔ RXCUI; NDCs accepted hyphenated in an FDA segment configuration — 4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2 — or as bare 10/11 digits; ndc_to_rxcui names the product it decoded to and its conceptType), rxcui_to_ingredients and rxcui_to_brands (RXCUI → ingredient/brand RXCUIs, each with the target's RxNorm name and its conceptType — read that before counting a combination product's ingredients). Drug-class directions (RxClass): rxcui_to_classes (RXCUI → its classes: pharmacologic class, mechanism of action, physiologic effect, pharmacokinetics, therapeutic category, chemical structure, the diseases it may treat, prevent, diagnose, or induce or is contraindicated with, VA class, DEA controlled-substance schedule, CDC vaccine code; a drug product also carries its ingredients' classes, naming the ingredient in via, while DEA schedules are recorded only on drug products and VA classes almost only there, so map a product for those) and class_to_rxcuis (class ID → its direct member RXCUIs, each with its RxNorm name and conceptType). Each class hit carries classType, source (the RxClass source asserting it), and relation — a ci_ relation is a contraindication, not an indication; narrow either direction with classType. Every result carries source provenance (which system or edge answered) so a chained call (e.g. into openfda with a resolved NDC) uses the right identifier. The children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, and class_to_rxcuis directions can return large sets and paginate: a nextCursor in the response is passed back as cursor (with an optional limit page size) to walk the full set. A field the direction does not use is rejected with field_not_applicable: limit and cursor on the point directions, classType outside the class directions, and a system other than RXNORM on the drug and class directions.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | 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. | |
| limit | No | 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. | |
| cursor | No | 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. | |
| system | No | 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. | |
| classType | No | 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. | |
| direction | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Paginated directions only: the page size that was applied. |
| from | No | The source value, echoed back. |
| hits | No | Crosswalk results, each tagged with the edge that produced it. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Paginated directions only: number of hits returned on this page. |
| notice | No | Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; an ICD-10-PCS table row has no parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results. |
| direction | No | The mapping direction that was applied. |
| truncated | No | Paginated directions (children, name_to_rxcui, rxcui_to_ndc, rxcui_to_classes, class_to_rxcuis) only: true when more results exist beyond this page. |
| nextCursor | No | Paginated directions only: opaque token to pass back as `cursor` for the next page. Present only when more results exist beyond this page. |
| alsoInSystems | No | 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. |
| resolvedSystem | No | The system the source resolved in, or null when not system-scoped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: an unresolvable edge returns a successful empty result with a notice rather than an error, `alsoInSystems` signals codes present in multiple bundled systems, every hit carries `source` provenance for chaining, and specific fields are rejected with `field_not_applicable`. It also flags traps an agent would otherwise fall into, e.g. `ci_` relations are contraindications not indications, and `conceptType` must be read before counting a combination product's ingredients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and information-dense — nearly every clause carries an operational fact and nothing is repeated from the schema. The cost is a single unbroken block of 400+ words with deeply nested parentheticals, which makes targeted re-reading (e.g. confirming the NDC format rules) harder than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with nine directions, an output schema, and non-obvious edge cases, the description covers the behaviors an agent must know: depth-1 iteration, empty-versus-error, pagination, provenance for chained openfda calls, and per-direction field rejection. Nothing material is left to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description still adds real semantics: accepted NDC formats, which directions paginate and how cursor/limit are threaded back, and which directions reject `classType`, `system`, `limit`, or `cursor`. It explains the meaning of the hierarchy-edge rules (X-padded ICD-10-CM levels, PCS three-character table rows, no RxNorm code hierarchy) that the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Crosswalk a US medical code or drug across systems and within a hierarchy") and then enumerates every direction by name, so an agent knows exactly which capability they are calling. It is clearly not a lookup (medcode_get_code), search, or hierarchy-browse tool — it is a directional mapping tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance per direction: parents/children are depth-1 and must be called iteratively for a full path, classType narrows either class direction, and a product must be mapped for DEA schedules and VA classes because those live on products. It does not explicitly contrast itself with siblings such as medcode_browse_hierarchy (which sounds adjacent to iterative parents/children walking), leaving one routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_search_codesSearch Medical CodesARead-onlyIdempotentInspect
Find US medical codes whose official descriptions match a described concept, via full-text search over the bundled index. Every search term must appear — matched first as a token prefix, then as a substring so inflected and compound forms are also found (a "neuropathy" search surfaces "mononeuropathy"/"polyneuropathy" siblings too, not only a standalone "neuropathy" token). An RxNorm concept matches on its drug name alone, never its term type (SBD, IN, …) — narrow by type with chapter. Filter by system (ICD10CM/ICD10PCS/HCPCS/RXNORM), billableOnly to exclude headers/categories and terminated HCPCS codes, and chapter. Use when you have a clinical description and need the code — the reverse of medcode_get_code. Results echo the resolved system per row for chaining, rank exact prefix matches ahead of substring-only matches with a deterministic tie-break, and disclose truncation with a nextCursor: pass it back as cursor to page through the full ranked set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max codes per page. Defaults to the server's MEDCODE_MAX_RESULTS (50), ceiling 200. | |
| query | Yes | Clinical description to match, e.g. "type 2 diabetes with neuropathy". Must not be blank or whitespace-only. | |
| cursor | No | 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. | |
| system | No | Restrict results to one system. Omit to search all bundled systems. | |
| chapter | No | 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`. | |
| billableOnly | No | When true, return only billable leaf codes (exclude headers/categories and HCPCS codes whose last valid date has passed). RxNorm has no billing concept, so this excludes every RxNorm concept. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page size that was applied. |
| codes | No | Matching codes, ranked by full-text relevance. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of codes returned on this page. |
| notice | No | 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. |
| truncated | No | True when more matches exist beyond this page. |
| nextCursor | No | Opaque token to pass back as `cursor` for the next page. Present only when more matches exist beyond this page. |
| appliedFilters | No | Filters the server applied to the search. |
| effectiveQuery | No | The query as the server parsed it for matching. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important search behavior: all terms must appear, prefix matches are attempted before substring matches, inflected/compound forms are surfaced, RxNorm matches on drug name alone and never term type, billableOnly excludes all RxNorm concepts and terminated HCPCS codes, and truncation is exposed via nextCursor. These details materially affect how an agent interprets and invokes the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose and search behavior. It is longer than typical, and some filter details overlap with the schema, but nearly every sentence adds operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the description still usefully explains result behavior: per-row resolved system for chaining, exact-prefix ranking, deterministic tie-breaking, and nextCursor pagination. Combined with the schema and annotations, an agent has everything needed to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds meaningful semantics about the query parameter's matching algorithm and about the RxNorm interaction with chapter and billableOnly filtering. It does not add much beyond the schema for cursor and limit, but the added query behavior is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource—find US medical codes by matching official descriptions via full-text search—and clearly distinguishes the tool from medcode_get_code as its reverse operation. An agent can tell exactly what this tool does without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case: 'Use when you have a clinical description and need the code' and explicitly contrasts this with medcode_get_code. However, it does not mention when to prefer other siblings such as medcode_map_codes or medcode_check_code, so the routing guidance is useful but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
medcode_get_code8 fields changed- added
Output schema / properties / deferredAdded value: +{ + "description": "Input codes not processed because the reply reached its byte budget, in request order and as sent. Re-call with these as codes and the same system and includeHierarchy, until no deferred comes back. Absent when every code was processed.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems, and each ICD-10-PCS section value, bare integer, value in ICD-9-CM form, and NDC among the misses. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / found / items / properties / children / descriptionPrevious value: -"Immediate child codes (present only when includeHierarchy is true)."New value: +"Immediate child codes (present only when includeHierarchy is true). For an ICD-10-PCS table row, the complete codes that begin with it." - changed
Output schema / properties / found / items / properties / children / items / properties / header / descriptionPrevious value: -"True when the code is a non-billable category/header (ICD-10-CM) rather than a leaf code."New value: +"True when the code is a non-billable header with codes below it — an ICD-10-CM category, a HCPCS range bucket, or a three-character ICD-10-PCS table row — rather than a leaf code." - changed
Output schema / properties / found / items / properties / childrenTruncated / descriptionPrevious value: -"True when the code has more immediate children than `children` carries — the list was capped at the server cap (present only when includeHierarchy is true). Retrieve the full child list with medcode_browse_hierarchy or medcode_map_codes (children) for this code."New value: +"True when the code has more immediate children than `children` carries — the list was capped at the server cap (present only when includeHierarchy is true). Retrieve the full child list with medcode_map_codes (children) for this code, passing its `system`, or medcode_browse_hierarchy outside ICD-10-PCS." - changed
Output schema / properties / found / items / properties / header / descriptionPrevious value: -"True when the code is a non-billable category/header (ICD-10-CM) rather than a leaf code."New value: +"True when the code is a non-billable header with codes below it — an ICD-10-CM category, a HCPCS range bucket, or a three-character ICD-10-PCS table row — rather than a leaf code." - changed
Output schema / properties / found / items / properties / parent / descriptionPrevious value: -"Immediate parent code (present only when includeHierarchy is true). Null at a root."New value: +"Immediate parent code, always one medcode_get_code decodes (present only when includeHierarchy is true): an ICD-10-CM code padded with the placeholder X names the nearest code above the padding (`S82.66XA` → `S82.66`), and a complete ICD-10-PCS code names its three-character table row (`0DTJ4ZZ` → `0DT`). Null at a root — an ICD-10-CM category, a HCPCS range bucket, an ICD-10-PCS table row — and for RxNorm." - changed
Output schema / properties / notFound / items / properties / reason / descriptionPrevious value: -"Why it could not be resolved (absent from every bundled system — for a bare integer, with a note that CPT / HCPCS Level I codes are out of scope — absent from the explicit `system` while another bundled system holds it, which is named, a well-formed NDC nothing maps to, hyphenated or as bare 10/11 digits, an NDC looked up under an explicit `system` that skips the NDC decode, or ambiguous across systems)."New value: +"Why it could not be resolved (absent from every bundled system — for a bare integer, with a note that CPT / HCPCS Level I codes are out of scope, and for a dotted all-digit value in ICD-9-CM form such as \"250.00\", with a note that ICD-9-CM is not bundled — absent from the explicit `system` while another bundled system holds it, which is named, an ICD-10-PCS section value looked up as a code under system ICD10PCS, which is named as that section, a well-formed NDC nothing maps to, hyphenated or as bare 10/11 digits, an NDC looked up under an explicit `system` that skips the NDC decode, or ambiguous across systems)."
- Changed
medcode_map_codes2 fields changed- changed
Output schema / properties / hits / items / properties / conceptType / descriptionPrevious value: -"The target concept's RxNorm type, present on `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` hits only. A class member may be any drug concept: an ingredient type below, or a drug product — \"SCD\"/\"SBD\" (clinical/branded drug) or \"GPCK\"/\"BPCK\" (generic/branded pack). Otherwise \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases."New value: +"The target concept's RxNorm type, present on `name_to_rxcui`, `ndc_to_rxcui`, `rxcui_to_ingredients`, `rxcui_to_brands`, and `class_to_rxcuis` hits only. A drug-name match or a class member may be any drug concept: an ingredient type or brand name below, or a drug product — \"SCD\"/\"SBD\" (clinical/branded drug) or \"GPCK\"/\"BPCK\" (generic/branded pack), the four an `ndc_to_rxcui` hit always takes. Otherwise \"IN\" (ingredient), \"PIN\" (precise ingredient — a specific salt, ester, or isomer of an ingredient), \"MIN\" (multiple ingredients — a concept naming a combination, never a substance within it), or \"BN\" (brand name). Ingredient hits mix the first three, so the hit count is not the substance count: a \"MIN\" hit is the grouping concept and never counts, and a \"PIN\" names a form of a substance rather than an extra one — usually alongside the \"IN\" it refines, though two \"PIN\" esters can share a single \"IN\". Counting the \"IN\" hits is the closest reading, and under-counts those shared cases." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; ICD-10-PCS codes have no prefix parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results."New value: +"Guidance whenever a resolvable source returns no hits, naming which of the two causes applies: it has no edge in the requested direction (a top-level code has no parent; a leaf has no children; an ICD-10-PCS table row has no parent; RxNorm concepts have no code hierarchy; no bundled class, or none of the requested `classType`, covers the RXCUI; a class has no direct member), or the `cursor` starts past the last page of a direction that does have results."
6 tool updates
- Changed
medcode_browse_hierarchy1 field changed- changed
Output schema / properties / codes / items / properties / billable / descriptionPrevious value: -"True when the code is a billable leaf. Null when the system has no billing concept."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept."
- Changed
medcode_check_code3 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `unknown_code`: The code does not exist in the named or detected system. `ambiguous_system`: The code is present in more than one bundled system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_code`: The code does not exist in the named system, or with no `system` in any bundled system. `ambiguous_system`: The code is present in more than one bundled system and no `system` was given. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / status / descriptionPrevious value: -"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired."New value: +"Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; valid = exists and is current in a system with no billing concept (RxNorm), so there is no billing verdict; terminated = retired — its last valid date has passed." - changed
Output schema / properties / whyNot / descriptionPrevious value: -"Explanation for non-billable/terminated statuses, or null when valid_billable or valid."New value: +"Explanation for non-billable/terminated statuses. On valid_billable, null unless the code is scheduled for termination, when it names the last date the code may be used. Null when valid."
- Changed
medcode_get_code4 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given (the message then names any other bundled system that holds a code). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_codes_found`: None of the requested codes resolved — in any bundled system, or in the explicit `system` when one is given. The message names each code another bundled system holds and each code present in more than one system, with those systems. `ambiguous_system`: Every requested code is present in more than one bundled system and no `system` was given; `candidateSystems` lists the union of those systems. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "no_codes_found" -]New value: +[ + "no_codes_found", + "ambiguous_system" +] - changed
Output schema / properties / found / items / properties / billable / descriptionPrevious value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)." - changed
Output schema / properties / found / items / properties / children / items / properties / billable / descriptionPrevious value: -"True when the code is a billable leaf. False for headers/categories and non-billable codes. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)."
- Changed
medcode_list_systems1 field changed- changed
Output schema / properties / systems / items / properties / releaseId / descriptionPrevious value: -"Release/version identifier baked into this build, e.g. \"ICD-10-CM FY2026\"."New value: +"Release/version identifier baked into this build, e.g. \"ICD-10-CM FY2027\"."
- Changed
medcode_map_codes1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `classType`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to any bundled code, drug, or class. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables, or a class direction was requested but it carries no RxClass class layer. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `field_not_applicable`: A `system`, `classType`, `limit`, or `cursor` was sent on a direction that does not use it. `no_mapping`: The source value did not resolve to a bundled code, drug, or class the direction reads. The rxcui_to_* directions read RxNorm concepts only, and their miss names any other bundled system that holds the value. `direction_unavailable`: A drug-crosswalk direction was requested but this build carries no RxNorm tables, or a class direction was requested but it carries no RxClass class layer. `ambiguous_system`: The source code is present in more than one system and no `system` was given. Other values are possible when a failure originates below the handler."
- Changed
medcode_search_codes2 fields changed- changed
Input schema / properties / billableOnly / descriptionPrevious value: -"When true, return only billable leaf codes (exclude headers/categories). RxNorm has no billing concept, so this excludes every RxNorm concept."New value: +"When true, return only billable leaf codes (exclude headers/categories and HCPCS codes whose last valid date has passed). RxNorm has no billing concept, so this excludes every RxNorm concept." - changed
Output schema / properties / codes / items / properties / billable / descriptionPrevious value: -"True when the code is a billable leaf. Null when the system has no billing concept (RxNorm)."New value: +"True when the code is a billable leaf. False for headers/categories, non-billable codes, and HCPCS codes whose last valid date has passed. Null when the system has no billing concept (RxNorm)."
2 tool updates
- Changed
medcode_list_systems4 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "systems" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "systems", + "classLayer" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / classLayerAdded 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." +} - changed
Output schema / properties / systems / descriptionPrevious 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." - changed
Output schema / properties / systems / items / properties / builtAt / descriptionPrevious 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."
- Changed
medcode_map_codes18 fields changed- added
Input schema / properties / classTypeAdded 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" +} - changed
Input schema / properties / cursor / descriptionPrevious 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." - changed
Input schema / properties / direction / descriptionPrevious 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." - changed
Input schema / properties / direction / enumPrevious 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" +] - changed
Input schema / properties / from / descriptionPrevious 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." - changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / system / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - added
Output schema / properties / hits / items / properties / classTypeAdded 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" +} - changed
Output schema / properties / hits / items / properties / conceptType / descriptionPrevious 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." - changed
Output schema / properties / hits / items / properties / description / descriptionPrevious 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." - added
Output schema / properties / hits / items / properties / relationAdded 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" +} - changed
Output schema / properties / hits / items / properties / source / descriptionPrevious 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)." - changed
Output schema / properties / hits / items / properties / system / descriptionPrevious 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)." - changed
Output schema / properties / hits / items / properties / value / descriptionPrevious value: -"The mapped target value (a code, RXCUI, or NDC)."New value: +"The mapped target value (a code, RXCUI, NDC, or RxClass class ID)." - added
Output schema / properties / hits / items / properties / viaAdded 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" +} - changed
Output schema / properties / notice / descriptionPrevious 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." - changed
Output schema / properties / truncated / descriptionPrevious 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."
5 tool updates
- Changed
medcode_browse_hierarchy2 fields changed- changed
Output schema / properties / codes / items / properties / billable / descriptionPrevious 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." - changed
Output schema / properties / codes / items / properties / billable / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +]
- Changed
medcode_check_code5 fields changed- changed
Output schema / properties / billable / descriptionPrevious 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." - changed
Output schema / properties / billable / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / status / descriptionPrevious 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." - changed
Output schema / properties / status / enumPrevious value: -[ - "valid_billable", - "valid_not_billable", - "valid_header", - "terminated" -]New value: +[ + "valid_billable", + "valid_not_billable", + "valid_header", + "valid", + "terminated" +] - changed
Output schema / properties / whyNot / descriptionPrevious 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."
- Changed
medcode_get_code13 fields changed- changed
Input schema / properties / system / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / found / items / properties / billable / descriptionPrevious 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)." - changed
Output schema / properties / found / items / properties / billable / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / found / items / properties / chapter / descriptionPrevious 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)." - changed
Output schema / properties / found / items / properties / children / items / properties / billable / descriptionPrevious 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)." - changed
Output schema / properties / found / items / properties / children / items / properties / billable / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / found / items / properties / children / items / properties / chapter / descriptionPrevious 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)." - changed
Output schema / properties / found / items / properties / children / items / properties / shortDescription / descriptionPrevious 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." - changed
Output schema / properties / found / items / properties / children / items / properties / system / descriptionPrevious 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." - changed
Output schema / properties / found / items / properties / shortDescription / descriptionPrevious 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." - changed
Output schema / properties / found / items / properties / system / descriptionPrevious 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." - changed
Output schema / properties / notFound / items / properties / reason / descriptionPrevious 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)."
- Changed
medcode_map_codes6 fields changed- changed
Input schema / properties / cursor / descriptionPrevious 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." - changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Input schema / properties / system / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "no_mapping", - "direction_unavailable", - "ambiguous_system" -]New value: +[ + "field_not_applicable", + "no_mapping", + "direction_unavailable", + "ambiguous_system" +] - changed
Output schema / properties / notice / descriptionPrevious 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."
- Changed
medcode_search_codes6 fields changed- changed
Input schema / properties / billableOnly / descriptionPrevious 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." - changed
Output schema / properties / codes / items / properties / billable / descriptionPrevious 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)." - changed
Output schema / properties / codes / items / properties / billable / typePrevious value: -"boolean"New value: +[ + "boolean", + "null" +] - changed
Output schema / properties / codes / items / properties / chapter / descriptionPrevious 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)." - changed
Output schema / properties / codes / items / properties / shortDescription / descriptionPrevious 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." - changed
Output schema / properties / notice / descriptionPrevious 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."
6 tool updates
- Changed
medcode_browse_hierarchy6 fields changed- removed
Output schema / properties / codes / items / properties / chapter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / chapter / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / codes / items / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / description / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / codes / items / properties / shortDescription / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / shortDescription / typeAdded value: +[ + "string", + "null" +]
- Changed
medcode_check_code2 fields changed- removed
Output schema / properties / whyNot / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / whyNot / typeAdded value: +[ + "string", + "null" +]
- Changed
medcode_get_code14 fields changed- removed
Output schema / properties / found / items / properties / chapter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / chapter / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / children / items / properties / chapter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / children / items / properties / chapter / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / children / items / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / children / items / properties / description / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / children / items / properties / shortDescription / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / children / items / properties / shortDescription / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / description / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / parent / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / parent / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / found / items / properties / shortDescription / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / found / items / properties / shortDescription / typeAdded value: +[ + "string", + "null" +]
- Changed
medcode_list_systems6 fields changed- removed
Output schema / properties / systems / items / properties / effectiveEnd / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / systems / items / properties / effectiveEnd / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / systems / items / properties / effectiveStart / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / systems / items / properties / effectiveStart / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / systems / items / properties / sourceUrl / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / systems / items / properties / sourceUrl / typeAdded value: +[ + "string", + "null" +]
- Changed
medcode_map_codes4 fields changed- removed
Output schema / properties / hits / items / properties / system / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / hits / items / properties / system / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / resolvedSystem / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / resolvedSystem / typeAdded value: +[ + "string", + "null" +]
- Changed
medcode_search_codes10 fields changed- removed
Output schema / properties / appliedFilters / properties / chapter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / appliedFilters / properties / chapter / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / appliedFilters / properties / system / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / appliedFilters / properties / system / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / codes / items / properties / chapter / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / chapter / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / codes / items / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / description / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / codes / items / properties / shortDescription / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / codes / items / properties / shortDescription / typeAdded value: +[ + "string", + "null" +]
6 tool updates
- Changed
medcode_browse_hierarchy6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "kind", + "codes", + "axes", + "truncated", + "shown", + "cap" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "kind", - "codes", - "axes", - "truncated", - "shown", - "cap" -]
- Changed
medcode_check_code6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "system", + "code", + "status", + "billable", + "whyNot" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "system", - "code", - "status", - "billable", - "whyNot" -]
- Changed
medcode_get_code6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "found", + "notFound" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "found", - "notFound" -]
- Changed
medcode_list_systems6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "systems" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "systems" -]
- Changed
medcode_map_codes6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "from", + "direction", + "resolvedSystem", + "hits" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "from", - "direction", - "resolvedSystem", - "hits" -]
- Changed
medcode_search_codes6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "codes", + "effectiveQuery", + "appliedFilters", + "truncated", + "shown", + "cap" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "codes", - "effectiveQuery", - "appliedFilters", - "truncated", - "shown", - "cap" -]
4 tool updates
- Changed
medcode_check_code1 field changed- added
Output schema / properties / alsoInSystemsAdded 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" +}
- Changed
medcode_get_code3 fields changed- changed
Input schema / properties / codes / descriptionPrevious 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." - added
Output schema / properties / found / items / properties / alsoInSystemsAdded 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" +} - changed
Output schema / properties / notFound / items / properties / reason / descriptionPrevious 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)."
- Changed
medcode_map_codes7 fields changed- changed
Input schema / properties / cursor / descriptionPrevious 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." - changed
Input schema / properties / limit / descriptionPrevious 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." - added
Output schema / properties / alsoInSystemsAdded 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" +} - added
Output schema / properties / hits / items / properties / conceptTypeAdded 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" +} - changed
Output schema / properties / hits / items / properties / description / descriptionPrevious 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." - changed
Output schema / properties / notice / descriptionPrevious 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." - changed
Output schema / properties / truncated / descriptionPrevious 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."
- Changed
medcode_search_codes1 field changed- changed
Input schema / properties / chapter / descriptionPrevious 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`."
5 tool updates
- Changed
medcode_browse_hierarchy3 fields changed- added
Input schema / properties / node / anyOfAdded 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" + } +] - changed
Input schema / properties / node / descriptionPrevious 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." - removed
Input schema / properties / node / typeRemoved value: -"string"
- Changed
medcode_check_code1 field changed- changed
Input schema / properties / code / descriptionPrevious 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."
- Changed
medcode_get_code1 field changed- changed
Input schema / properties / codes / items / descriptionPrevious 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."
- Changed
medcode_map_codes1 field changed- changed
Input schema / properties / from / descriptionPrevious 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."
- Changed
medcode_search_codes1 field changed- changed
Input schema / properties / query / descriptionPrevious 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."
4 tool updates
- Changed
medcode_browse_hierarchy6 fields changed- added
Input schema / properties / cursorAdded 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" +} - changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Output schema / properties / cap / descriptionPrevious value: -"The limit that was applied."New value: +"The page size that was applied." - added
Output schema / properties / nextCursorAdded value: +{ + "description": "Opaque token to pass back as `cursor` for the next page. Present only when more entries exist beyond this page.", + "type": "string" +} - changed
Output schema / properties / shown / descriptionPrevious value: -"Number of entries returned (codes or axes)."New value: +"Number of entries returned on this page (codes or axes)." - changed
Output schema / properties / truncated / descriptionPrevious value: -"True when the returned list was capped at the limit."New value: +"True when more entries exist beyond this page."
- Changed
medcode_get_code1 field changed- added
Output schema / properties / found / items / properties / childrenTruncatedAdded 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" +}
- Changed
medcode_map_codes6 fields changed- added
Input schema / properties / cursorAdded 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" +} - added
Input schema / properties / limitAdded 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" +} - added
Output schema / properties / capAdded value: +{ + "description": "Paginated directions only: the page size that was applied.", + "type": "number" +} - added
Output schema / properties / nextCursorAdded 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" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Paginated directions only: number of hits returned on this page.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "Paginated directions (children, name_to_rxcui) only: true when more results exist beyond this page.", + "type": "boolean" +}
- Changed
medcode_search_codes6 fields changed- added
Input schema / properties / cursorAdded 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" +} - changed
Input schema / properties / limit / descriptionPrevious 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." - changed
Output schema / properties / cap / descriptionPrevious value: -"The limit that was applied."New value: +"The page size that was applied." - added
Output schema / properties / nextCursorAdded value: +{ + "description": "Opaque token to pass back as `cursor` for the next page. Present only when more matches exist beyond this page.", + "type": "string" +} - changed
Output schema / properties / shown / descriptionPrevious value: -"Number of codes returned."New value: +"Number of codes returned on this page." - changed
Output schema / properties / truncated / descriptionPrevious value: -"True when results were capped at the limit."New value: +"True when more matches exist beyond this page."
2 tool updates
- Changed
medcode_get_code4 fields changed- changed
Input schema / properties / codes / descriptionPrevious 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." - changed
Input schema / properties / codes / items / descriptionPrevious 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." - changed
Output schema / properties / found / items / descriptionPrevious value: -"A decoded code, optionally with its parent and immediate children."New value: +"A decoded code, optionally with its parent/children and resolution source." - added
Output schema / properties / found / items / properties / sourceAdded 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" +}
- Changed
medcode_map_codes1 field changed- changed
Input schema / properties / direction / descriptionPrevious 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."
2 tool updates
- Changed
medcode_browse_hierarchy2 fields changed- changed
Input schema / properties / node / descriptionPrevious 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." - changed
Output schema / properties / axes / descriptionPrevious 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\"."
- Changed
medcode_map_codes2 fields changed- changed
Input schema / properties / direction / descriptionPrevious 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)." - added
Output schema / properties / noticeAdded 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" +}
6 tool updates
- First observed
medcode_browse_hierarchy - First observed
medcode_check_code - First observed
medcode_get_code - First observed
medcode_list_systems - First observed
medcode_map_codes - First observed
medcode_search_codes
Related MCP Connectors
Diagnoses, drugs & lab codes: ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10. 33 tools, MIT.
WHO ICD-10/ICD-11 diagnosis codes. Lookup, search, chapters via official WHO API.
Polish ICD-10, ICD-9 PL, ICD-11 PL codes and NFZ JGP hospital grouping from official sources.
WHO ICF codes: lookup, search, hierarchy, qualifiers, and 11 scored clinical assessment instruments.
Related MCP Servers
- AlicenseAqualityDmaintenanceOffline MCP server for ICD medical code lookup, search, and crosswalk translation with 124K codes and 102K mappings, all local with zero network calls.53MIT
- AlicenseNot gradedqualityCmaintenanceSearch medical codes including ICD-10, LOINC, and clinical terms for conditions, procedures, and drugs via natural language queries.469 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables local-first lookup of ICD-10-CM codes and diagnosis phrases, returning official descriptions, hierarchy, index references, and applicable Tabular instructions. It also supports conservative synthetic-note candidate suggestions and structural validation of selected code sets for coder review.Apache 2.0
- AlicenseAqualityDmaintenanceMCP 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.619 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.