medical-codes-mcp-server
Server Details
Offline US medical code lookup and crosswalk — ICD-10-CM/PCS, HCPCS Level II, RxNorm. Keyless.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/medical-codes-mcp-server
- GitHub Stars
- 2
- Server Listing
- medical-codes-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 6 of 6 tools scored.
Each tool has a distinct primary purpose: browse, validate, decode, list, map, and search. However, browse_hierarchy and map_codes both support walking hierarchy children, which could cause misselection for an agent unfamiliar with the nuances. Descriptions are detailed enough to disambiguate in most cases.
All tools share the consistent 'medcode_' prefix followed by a clear verb and noun (browse_hierarchy, check_code, get_code, list_systems, map_codes, search_codes). Snake_case is used uniformly, and the pattern is predictable and uniform across the entire set.
Six tools is well within the ideal range for a focused domain. Each tool represents a distinct core capability (browse, validate, decode, list systems, map, search) without redundancy or unnecessary bloat. The count matches the server's stated purpose.
The surface covers the primary workflow: orient (list_systems, browse_hierarchy), discover (search_codes), decode (get_code), validate (check_code), and crosswalk (map_codes). Minor gaps exist, such as no explicit NDC validation in check_code (though get_code handles NDC-to-RxNorm) and no direct ICD-to-drug crosswalk, but these are workarounds given the available tools.
Available Tools
6 toolsmedcode_browse_hierarchymedical-codes-mcp-serverARead-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. 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 | Yes | The page size that was applied. |
| axes | Yes | The top-level ICD-10-PCS Section axis values (only the Section axis is enumerable). Empty when kind is "codes". |
| kind | Yes | "codes" for prefix-hierarchy children (ICD-10-CM/HCPCS); "axes" for ICD-10-PCS axis values. |
| codes | Yes | Child codes under the requested node or top level. Empty when kind is "axes". |
| shown | Yes | 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 | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and idempotentHint, but the description goes beyond by detailing system-specific behaviors: prefix hierarchy vs axis-based, the fact that only the top-level Section axis is browsable for ICD-10-PCS, and pagination via nextCursor/cursor. This discloses important non-obvious behavior that annotations don't cover.
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 appropriately detailed for the tool's complexity, with the main purpose front-loaded in the first sentence. Each subsequent sentence addresses a necessary aspect (hierarchy types, system-specific constraints, pagination). No redundant or filler content.
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?
Given the tool's complexity (4 parameters, multiple code systems, pagination, system-specific limitations) and the presence of an output schema (which makes explicit return-value documentation unnecessary), the description covers all necessary context: use cases, how to navigate the hierarchy, system variations, and pagination. It is complete for an agent to select and invoke 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?
The input schema already provides 100% parameter coverage with descriptions, but the description adds relational meaning: how omitting `node` vs providing it changes behavior, how `node` interacts with the chosen `system` (ICD-10-PCS restriction), and how `cursor` relates to a previous response's `nextCursor`. This supplements the schema's per-parameter descriptions.
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 clearly states the tool's purpose: 'Walk a US medical code system's hierarchy for discovery without a search term.' It specifies the resource (hierarchy) and the verb (walk), and distinguishes itself from siblings like search tools by emphasizing 'without a search term.' It also explains the two operational modes (with/without node).
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?
Provides clear usage context: 'for discovery without a search term' and 'Lets an agent orient in an unfamiliar system or enumerate a category's specific codes.' It implies when to use this tool versus search-oriented siblings, though it doesn't explicitly name alternative tools or state exclusions. The detailed hierarchy differences between ICD-10-CM/HCPCS vs ICD-10-PCS also guide correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_check_codemedical-codes-mcp-serverARead-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, or terminated — with a whyNot explaining non-billable and terminated cases (e.g. "valid ICD-10-CM category but not billable — submit a more specific child code"). This is the detail a coder needs before submitting a claim. Auto-detects the system from the code's shape; pass an explicit system to disambiguate. A non-billable or terminated code is a successful result with a whyNot, not an error — only a code that exists in no bundled system raises unknown_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 | Yes | The code in display form (ICD-10-CM carries the dot). |
| status | Yes | Validity status. valid_billable = submit as-is; valid_header/valid_not_billable = needs a more specific code; terminated = retired. |
| system | Yes | The system the code was resolved in, echoed for chaining. |
| whyNot | Yes | Explanation for non-billable/terminated statuses, or null when valid_billable. |
| billable | Yes | True only when status is valid_billable. |
| 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and idempotentHint annotations, the description adds substantial behavioral context: the discriminated statuses, whyNon-billable and terminated are successful results rather than errors, unknown_code raised only when no bundled system exists, and alsoInSystems semantics. This goes well beyond what annotations declare.
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?
Four sentences, front-loaded with the core purpose, then statuses, then system handling, then error semantics. Every sentence provides distinct value; no filler or redundancy.
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?
The description covers all essential aspects: purpose, statuses, whyNot reasoning, error behavior, system disambiguation, and multi-system membership. An output schema exists but the description still clarifies return field semantics, making the tool fully self-explanatory.
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% with descriptions for both parameters. The tool description enhances this by explaining why `system` matters (disambiguate ambiguous code shapes) and elaborates on the auto-detection behavior. This meaningful addition justifies moving above the baseline of 3.
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 opens with a specific verb and resource: 'Validate whether a US medical code exists, is current, and is billable.' It clearly distinguishes this from sibling tools (browse, get, list, map, search) by focusing on validation with a discriminated status result.
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?
Provides a clear use case: 'This is the detail a coder needs before submitting a claim.' It also explains when to pass the explicit `system` parameter ('to disambiguate') vs auto-detection. It does not explicitly mention when not to use the tool or name alternatives, so a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_get_codemedical-codes-mcp-serverARead-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; pass an explicit system only when a value is genuinely ambiguous. Accepts 1–50 codes and returns partial success: resolved codes in found, unresolved in notFound with a per-code reason, so one bad code never fails the batch. Set includeHierarchy to attach each code's parent and immediate children (with a childrenTruncated flag when a code has more children than the cap returns — walk the full set via medcode_browse_hierarchy or medcode_map_codes). The resolved system is echoed on every result for chaining into medcode_map_codes or a billability check; 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. Omit to auto-detect per code. | |
| includeHierarchy | No | When true, attach each found code's parent and immediate children. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | Successfully decoded codes, in request order. |
| notFound | Yes | Codes that did not resolve, with per-code reasons. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses many non-obvious behaviors: NDC format flexibility (4-4-2, 5-3-2, etc.), malformed NDC handling, partial success with per-code reasons, hierarchy truncation with 'childrenTruncated' flag, echoed system for chaining, and 'alsoInSystems' for collisions. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and lengthy, but each sentence delivers information not found elsewhere: NDC edge cases, partial success, hierarchy truncation, and chaining. It is front-loaded with the main purpose and logically flows from core function to edge cases to integration. Slightly verbose but appropriately so given the tool's complexity.
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?
The description covers the key operational facets: supported systems, NDC behavior, auto-detection, batch processing, error handling, hierarchy flag, and interoperability with sibling tools. The output schema exists and would carry return details, but the description already mentions the critical return fields (found, notFound, system, alsoInSystems, childrenTruncated). For a multi-system medical code tool, this is comprehensive.
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%, but the description adds substantial value: it clarifies when to omit vs. pass 'system', explains the special NDC format and how it decodes to RxNorm, and details the meaning of 'includeHierarchy' (parent/children with truncation behavior). This goes far beyond the basic schema descriptions.
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 opens with a clear verb+resource: 'Decode one or more US medical codes to their official descriptions.' It enumerates the specific code systems (ICD-10-CM, ICD-10-PCS, HCPCS, RxNorm) and explicitly distinguishes from siblings by noting alternative tools for hierarchy browsing and code mapping, making the tool's scope unambiguous.
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 description gives concrete usage context: auto-detection, when to pass an explicit 'system' (only if ambiguous), batch limits, and partial success. It names alternatives for walking full hierarchy ('medcode_browse_hierarchy or medcode_map_codes') and chaining ('medcode_map_codes or a billability check'), though it does not explicitly state when NOT to use this tool in favor of search_codes or check_code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_list_systemsmedical-codes-mcp-serverARead-onlyIdempotentInspect
List the bundled US medical code systems with their release identifiers, effective dates, and code counts. Confirms which ICD-10-CM fiscal year, ICD-10-PCS fiscal year, HCPCS Level II release, and RxNorm normalized set 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 |
|---|---|---|
| systems | Yes | One entry per bundled code system, in canonical order. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: 'The corpus is offline and built at package-build time — this call reports exactly which release is baked into the running server.' This tells the agent that results are static and reflect the bundled release, which is important for interpreting other tool results.
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 three sentences, front-loaded with the core action and resource, then supplements with usage context and system-specific clarifications. Every sentence provides useful information with no redundancy or fluff.
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?
Even with an output schema present, the description fully explains what the tool does, when to use it, and the static nature of the data. It adequately covers the tool's role among siblings and leaves no critical gaps for a parameterless metadata listing tool.
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 has zero parameters, so schema coverage is 100% by default and the baseline is 4. The description adds meaning about the tool's output (release identifiers, effective dates, code counts) without needing to explain inputs. It does not introduce any ambiguity about parameter usage.
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 clearly states the verb 'List' and the resource 'bundled US medical code systems' with specific attributes (release identifiers, effective dates, code counts). It distinguishes itself from sibling tools that browse, check, get, map, or search codes by focusing on system-level metadata.
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 description gives explicit usage context: 'Confirms which ICD-10-CM fiscal year, ICD-10-PCS fiscal year, HCPCS Level II release, and RxNorm normalized set are active before acting on any decode, search, or crosswalk result.' This tells the agent to call this tool first to verify system versions. It does not name alternative tools, but the purpose is clear enough for a status/list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_map_codesmedical-codes-mcp-serverARead-onlyIdempotentInspect
Crosswalk a US medical code or drug across systems and within a hierarchy. Hierarchy directions: parents and children walk a code's prefix hierarchy one level per call — immediate parent/children only (depth-1); call iteratively for the full ancestor or descendant path (ICD-10-CM/HCPCS; ICD-10-PCS codes have no prefix parent). A resolvable source with no edge in the requested direction is a successful empty result with a notice, not an error. A source code string that also exists in another bundled system carries alsoInSystems naming it, since only the resolved system's hierarchy was walked. Drug directions (RxNorm): name_to_rxcui (drug name → RXCUI), ndc_to_rxcui and rxcui_to_ndc (NDC ↔ RXCUI; NDCs accepted hyphenated in an FDA segment configuration — 4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2 — or as bare 10/11 digits; ndc_to_rxcui names the product it decoded to), rxcui_to_ingredients and rxcui_to_brands (RXCUI → ingredient/brand RXCUIs, each with the target's RxNorm name and its conceptType — read that before counting a combination product's ingredients). 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, and rxcui_to_ndc 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; the point directions ignore both.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The source value: a code (for parents/children), a drug name, an NDC, or an RXCUI. Must not be blank or whitespace-only. | |
| limit | No | 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. | |
| cursor | No | 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. | |
| system | No | For parents/children, force the source code into this system. Omit to auto-detect. | |
| 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Paginated directions only: the page size that was applied. |
| from | Yes | The source value, echoed back. |
| hits | Yes | Crosswalk results, each tagged with the edge that produced it. |
| 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; ICD-10-PCS codes have no prefix parent), or the `cursor` starts past the last page of a direction that does have results. |
| direction | Yes | The mapping direction that was applied. |
| truncated | No | Paginated directions (children, name_to_rxcui, rxcui_to_ndc) 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 | Yes | The system the source resolved in, or null when not system-scoped. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses critical behavioral traits: depth-1 traversal, successful empty result with notice for no edge, alsoInSystems for cross-system codes, source provenance on every result, and detailed pagination semantics. This goes far beyond what annotations provide and sets accurate expectations for agents.
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 every sentence carries useful information. It starts with the core purpose, then systematically covers hierarchy behavior, cross-system detection, drug directions, pagination, and provenance. No filler or repetition; the length is justified by the tool's complexity.
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?
Given the tool's complexity (7 directions, pagination, multiple systems, NDC formats), the description is comprehensive. It covers edge cases (empty results, alsoInSystems, iterative traversal), explains provenance for chained calls, and the presence of an output schema means return-value details are not the description's responsibility. The description leaves no obvious gaps.
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?
Even though the schema documents all parameters (100% coverage), the description adds substantial semantic depth: it explains each direction's meaning, NDC format variations (hyphenated 4-4-2 etc.), the system auto-detect vs forced system option, cursor/limit behavior with defaults and ceiling, and the product-decoding nuance for ndc_to_rxcui. This materially helps an agent choose and format parameters correctly.
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 opens with a clear, specific verb and resource: 'Crosswalk a US medical code or drug across systems and within a hierarchy.' This immediately distinguishes the tool from sibling tools like medcode_search_codes or medcode_get_code by focusing on transformation/mapping rather than lookup or validation.
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 description provides strong usage context: it explains that parents/children are depth-1 and must be called iteratively for full paths, it clarifies pagination behavior with nextCursor/limit, and it notes that point directions ignore pagination. While it doesn't explicitly name alternative tools or when not to use this tool, it gives enough situational guidance to choose directions correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
medcode_search_codesmedical-codes-mcp-serverARead-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). Filter by system (ICD10CM/ICD10PCS/HCPCS/RXNORM), billableOnly to exclude headers/categories, and chapter. Use when you have a clinical description and need the code — the reverse of medcode_get_code. Results echo the resolved system per row for chaining, rank exact prefix matches ahead of substring-only matches with a deterministic tie-break, and disclose truncation with a nextCursor: pass it back as cursor to page through the full ranked set.
| 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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | Yes | The page size that was applied. |
| codes | Yes | Matching codes, ranked by full-text relevance. |
| shown | Yes | Number of codes returned on this page. |
| notice | No | Guidance when nothing matched — echoes the query and suggests how to broaden. |
| truncated | Yes | 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 | Yes | Filters the server applied to the search. |
| effectiveQuery | Yes | The query as the server parsed it for matching. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavioral context: token-prefix then substring matching, ranking with exact-prefix matches ahead, deterministic tie-breaking, pagination via nextCursor, and chapter normalization behavior with appliedFilters disclosure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, with the core purpose stated first. Every sentence carries useful information, though it is a single long paragraph that could benefit from light structuring. It remains appropriately sized for the tool's complexity.
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?
Given the tool has an output schema, return values need not be detailed. The description covers the matching algorithm, ranking behavior, filtering options, pagination, and case-insensitive chapter handling. It is complete for a search tool with complex behavior and leaves no significant gaps.
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 description coverage is 100%, so the schema already documents all parameters. The description adds minor context (e.g., limit default, chapter case-insensitivity) but does not materially augment parameter meaning beyond what the schema provides. Baseline 3 is appropriate.
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 opens with 'Find US medical codes whose official descriptions match a described concept, via full-text search over the bundled index,' using a specific verb and clear resource. It also distinguishes itself from siblings by explicitly stating it is 'the reverse of medcode_get_code.'
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 description provides a clear usage scenario: 'Use when you have a clinical description and need the code.' It names one alternative (the reverse of medcode_get_code) but does not explicitly address when not to use the tool or compare with other siblings like browse_hierarchy or map_codes. This is helpful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
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
- Alicense-qualityCmaintenanceSearch medical codes including ICD-10, LOINC, and clinical terms for conditions, procedures, and drugs via natural language queries.8MIT
- 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.641MIT

OMOPHub MCP Serverofficial
AlicenseAqualityAmaintenanceProvides AI agents with instant access to 10M+ OMOP medical vocabulary concepts for searching, mapping, and navigating clinical codes across SNOMED, ICD-10, RxNorm, LOINC, and more.113446MIT
Your Connectors
Sign in to create a connector for this server.