Skip to main content
Glama

RxNorm Concept Details

rxnorm_concept
Read-onlyIdempotent

Retrieve detailed RxNorm drug concept data by RxCUI, including names, synonyms, status, and related ingredients, brands, and dose forms. Use it to verify or enrich drug terminology lookups.

Instructions

Get detailed information about a specific RxNorm concept by RxCUI.

Use this tool to:

  • Get the full name and synonyms for a drug

  • Check the concept status (active, remapped, etc.)

  • View related concepts (ingredients, brands, forms)

Provide an RxCUI (RxNorm Concept Unique Identifier) like "161" — as a string of digits or as an integer.

Input Schema

NameRequiredDescriptionDefault
rxcuiYesRxNorm Concept Unique Identifier (string of digits or integer, e.g. "161" or 161)
include_relatedNoInclude related concepts (ingredients, brands, dose forms). Default false; true/false, also accepted as the strings "true"/"false"

Output Schema

NameRequiredDescriptionDefault
ttyYesRxNorm term type (e.g. "IN" ingredient, "SCD" clinical drug, "SBD" branded drug); null when found=false.
nameYesRxNorm normalized name of the concept; null when found=false.
foundYesfalse when RxNorm has no concept with this RxCUI (the lookup answered; the fields below are null)
rxcuiYesThe RxCUI looked up.
statusYesRxNorm history status (e.g. "Active", "Remapped", "Obsolete"); "Active" when RxNav does not report one; null when found=false.
synonymYesRxNorm synonym (may be empty); null when found=false.
umlscuiYesUMLS Concept Unique Identifier linked to the concept (empty when none); null when found=false.
languageYesLanguage of the concept name as RxNav reports it (e.g. "ENG"); null when found=false.
suppressYesRxNorm suppress flag ("N" = not suppressed, the default when RxNav omits it); null when found=false.
provenanceYesProvenance block: source, URL, data vintage, extraction instant, origin diagnostics, citation, license
attributionYesCanonical source URLs of this response (attribution list)
remapped_toYesRxCUIs a remapped concept was replaced by; empty otherwise.
related_groupsYesRelated concepts (ingredients, brands, dose forms) grouped by term type; null unless include_related=true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv2.4.0
    • addedOutput schema / properties / language / description
      Added value: +"Language of the concept name as RxNav reports it (e.g. \"ENG\"); null when found=false."
    • addedOutput schema / properties / name / description
      Added value: +"RxNorm normalized name of the concept; null when found=false."
    • addedOutput schema / properties / related_groups / description
      Added value: +"Related concepts (ingredients, brands, dose forms) grouped by term type; null unless include_related=true."
    • addedOutput schema / properties / remapped_to / description
      Added value: +"RxCUIs a remapped concept was replaced by; empty otherwise."
    • addedOutput schema / properties / rxcui / description
      Added value: +"The RxCUI looked up."
    • addedOutput schema / properties / status / description
      Added value: +"RxNorm history status (e.g. \"Active\", \"Remapped\", \"Obsolete\"); \"Active\" when RxNav does not report one; null when found=false."
    • addedOutput schema / properties / suppress / description
      Added value: +"RxNorm suppress flag (\"N\" = not suppressed, the default when RxNav omits it); null when found=false."
    • addedOutput schema / properties / synonym / description
      Added value: +"RxNorm synonym (may be empty); null when found=false."
    • addedOutput schema / properties / tty / description
      Added value: +"RxNorm term type (e.g. \"IN\" ingredient, \"SCD\" clinical drug, \"SBD\" branded drug); null when found=false."
    • addedOutput schema / properties / umlscui / description
      Added value: +"UMLS Concept Unique Identifier linked to the concept (empty when none); null when found=false."
  2. Changed7 schema fields changedv2.3.0
    • changedOutput schema / properties / provenance / description
      Previous value: -"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license"New value: +"Provenance block: source, URL, data vintage, extraction instant, origin diagnostics, citation, license"
    • addedOutput schema / properties / provenance / properties / derivation_note
      Added value: +{
      +  "description": "What this server computed; present together with derived",
      +  "type": "string"
      +}
    • addedOutput schema / properties / provenance / properties / derived
      Added value: +{
      +  "description": "Present (true) only when this server computed the value (e.g. a ranking or summary statistics) instead of passing on what the source returned",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / provenance / properties / field_sources / description
      Previous value: -"Present only when the response joins parts from different origins or extraction instants (contract v1.2): for each group of fields, its URL, extraction instant and whether it came from cache. Absent in single-origin responses"New value: +"Present only when the response joins parts from different origins or extraction instants: for each group of fields, its URL, extraction instant and whether it came from cache. Absent in single-origin responses"
    • addedOutput schema / properties / provenance / properties / notices
      Added value: +{
      +  "description": "Caveats the source publishes about the data, verbatim (license statements are not repeated here; see the info://licenses resource). Absent when there is none",
      +  "items": {
      +    "type": "string"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedOutput schema / properties / provenance / properties / retrieval / description
      Previous value: -"Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)"New value: +"Origin diagnostics of THIS source in this call: requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)"
    • addedOutput schema / properties / provenance / properties / revision
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Whether the data can still change at the source: current = the version in force, the source may revise it; provisional = preliminary; final = will not change. Absent when unknown",
      +  "properties": {
      +    "note": {
      +      "description": "O específico da fonte: o que revisa, quando, por quê",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "current = versão vigente, a fonte pode revisá-la; provisional = preliminar, incompleta ou sujeita a mudança (não compare como se fosse fechada); final = não muda mais, declarado pela fonte",
      +      "enum": [
      +        "current",
      +        "provisional",
      +        "final"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  3. Changed1 schema field changedv2.1.1
    • addedOutput schema / properties / provenance / properties / field_sources
      Added value: +{
      +  "description": "Present only when the response joins parts from different origins or extraction instants (contract v1.2): for each group of fields, its URL, extraction instant and whether it came from cache. Absent in single-origin responses",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Proveniência de um grupo de campos da resposta: de onde veio e quando foi extraído",
      +    "properties": {
      +      "data_vintage": {
      +        "description": "Vintage/competência da sub-fonte",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "dataset_id": {
      +        "description": "Identificador do conjunto da sub-fonte",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "fields": {
      +        "description": "Campos do payload atribuídos a esta sub-fonte",
      +        "items": {
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "retrieved_at": {
      +        "description": "ISO-8601 da extração desta sub-fonte na origem",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "served_from_cache": {
      +        "description": "true se esta sub-fonte veio do cache do servidor (retrieved_at é o da extração original); false se foi buscada nesta chamada; null se o servidor não distingue",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "source_url": {
      +        "description": "URL canônica da sub-fonte que originou estes campos",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "fields",
      +      "source_url",
      +      "dataset_id",
      +      "data_vintage",
      +      "retrieved_at"
      +    ],
      +    "type": "object"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
  4. Changed17 schema fields changedv1.16.0
    • addedInput schema / properties / include_related / anyOf
      Added value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "enum": [
      +      "true",
      +      "false"
      +    ],
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / include_related / default
      Removed value: -false
    • changedInput schema / properties / include_related / description
      Previous value: -"Include related concepts (ingredients, brands, dose forms)"New value: +"Include related concepts (ingredients, brands, dose forms). Default false; true/false, also accepted as the strings \"true\"/\"false\""
    • removedInput schema / properties / include_related / type
      Removed value: -"boolean"
    • addedInput schema / properties / rxcui / anyOf
      Added value: +[
      +  {
      +    "pattern": "^\\d+$",
      +    "type": "string"
      +  },
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": 0,
      +    "type": "integer"
      +  }
      +]
    • changedInput schema / properties / rxcui / description
      Previous value: -"RxNorm Concept Unique Identifier"New value: +"RxNorm Concept Unique Identifier (string of digits or integer, e.g. \"161\" or 161)"
    • removedInput schema / properties / rxcui / pattern
      Removed value: -"^\\d+$"
    • removedInput schema / properties / rxcui / type
      Removed value: -"string"
    • addedOutput schema / properties / found
      Added value: +{
      +  "description": "false when RxNorm has no concept with this RxCUI (the lookup answered; the fields below are null)",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / language / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / name / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / status / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / suppress / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / synonym / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / tty / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / umlscui / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "rxcui",
      -  "name",
      -  "synonym",
      -  "tty",
      -  "language",
      -  "suppress",
      -  "umlscui",
      -  "status",
      -  "remapped_to",
      -  "related_groups",
      -  "provenance",
      -  "attribution"
      -]New value: +[
      +  "rxcui",
      +  "found",
      +  "name",
      +  "synonym",
      +  "tty",
      +  "language",
      +  "suppress",
      +  "umlscui",
      +  "status",
      +  "remapped_to",
      +  "related_groups",
      +  "provenance",
      +  "attribution"
      +]
  5. Changed3 schema fields changedv1.15.0
    • changedOutput schema / properties / provenance / description
      Previous value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license"
    • addedOutput schema / properties / provenance / properties / retrieval
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "anomalies": {
      +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "count": {
      +                "description": "Ocorrências desta classe na chamada",
      +                "maximum": 9007199254740991,
      +                "minimum": 1,
      +                "type": "integer"
      +              },
      +              "kind": {
      +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
      +                "enum": [
      +                  "timeout",
      +                  "network",
      +                  "http_4xx",
      +                  "http_5xx",
      +                  "rate_limited",
      +                  "malformed_body"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "kind",
      +              "count"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "attempts": {
      +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
      +          "maximum": 9007199254740991,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "requests": {
      +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
      +          "maximum": 9007199254740991,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "unstable": {
      +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "requests",
      +        "attempts",
      +        "anomalies",
      +        "unstable"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)"
      +}
    • changedOutput schema / properties / provenance / required
      Previous value: -[
      -  "source",
      -  "source_url",
      -  "data_vintage",
      -  "retrieved_at",
      -  "citation",
      -  "license"
      -]New value: +[
      +  "source",
      +  "source_url",
      +  "data_vintage",
      +  "retrieved_at",
      +  "retrieval",
      +  "citation",
      +  "license"
      +]
  6. Changed1 schema field changedv1.11.0
    • addedInput schema / additionalProperties
      Added value: +false
  7. Changed4 schema fields changedv1.9.1
    • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / provenance / properties / data_vintage / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / provenance / properties / license / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / provenance / properties / license / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  8. Changed3 schema fields changedv1.8.0
    • addedOutput schema / properties / attribution
      Added value: +{
      +  "description": "Canonical source URLs of this response (attribution list)",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / provenance
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license",
      +  "properties": {
      +    "citation": {
      +      "description": "Ready-to-use citation/attribution string",
      +      "type": "string"
      +    },
      +    "data_vintage": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Version/release of the data as exposed by the source; null when not exposed"
      +    },
      +    "license": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "License / legal regime of the data"
      +    },
      +    "retrieved_at": {
      +      "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.",
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "Official upstream source of this data",
      +      "type": "string"
      +    },
      +    "source_url": {
      +      "description": "Canonical URL of the source (API base or dataset release)",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "source_url",
      +    "data_vintage",
      +    "retrieved_at",
      +    "citation",
      +    "license"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "rxcui",
      -  "name",
      -  "synonym",
      -  "tty",
      -  "language",
      -  "suppress",
      -  "umlscui",
      -  "status",
      -  "remapped_to",
      -  "related_groups"
      -]New value: +[
      +  "rxcui",
      +  "name",
      +  "synonym",
      +  "tty",
      +  "language",
      +  "suppress",
      +  "umlscui",
      +  "status",
      +  "remapped_to",
      +  "related_groups",
      +  "provenance",
      +  "attribution"
      +]
  9. Changed1 schema field changedv1.5.7
    • removedInput schema / additionalProperties
      Removed value: -false
  10. First observedv1.2.1

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is handled. The description adds what the payload contains (full name, synonyms, concept status values like active/remapped, related concept types), which is useful beyond structured fields, though it says nothing about behavior for an unknown or invalid RxCUI.

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

Conciseness4/5

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

Front-loaded one-sentence purpose followed by scannable bullets adds structure. The final sentence re-encodes the RxCUI format already given in the schema, which is mild duplication but not enough to hurt usability.

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

Completeness4/5

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

With an output schema present and fully covered annotations, the description needn't explain return shapes, and it correctly focuses on input and scope. The only gap is unstated error behavior for invalid RxCUIs, minor for a simple read-only lookup.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented; the description mostly restates the rxcui format ("161", digits or integer) that the schema pattern/anyOf already conveys. It does link 'related concepts (ingredients, brands, forms)' to include_related, a small value-add, but doesn't note the default-false behavior beyond what the schema says.

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

Purpose5/5

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

States a specific verb (get details), resource (RxNorm concept), and identifier (RxCUI), plus an enumerated list of what the details include (name/synonyms, status, related concepts). This clearly separates it from rxnorm_search (querying) and rxnorm_ingredients/rxnorm_classes (targeted sub-views).

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

Usage Guidelines4/5

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

The 'Use this tool to:' bullets give clear conditions for invoking it, and the closing line makes the input requirement explicit. It never states when not to use it or names alternatives such as rxnorm_search for callers who don't yet have an RxCUI, so no exclusions are covered.

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