get-drug-by-product-ndc
Retrieve comprehensive drug information using a product NDC code in XXXXX-XXXX format. This tool finds all package variations for a specific pharmaceutical product from the OpenFDA database.
Instructions
Get drug information by product NDC only (XXXXX-XXXX format). This ignores package variations and finds all packages for a product.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| productNDC | Yes | Product NDC in format XXXXX-XXXX |
Implementation Reference
- src/index.ts:483-547 (handler)The core handler function that implements the 'get-drug-by-product-ndc' tool logic. Validates the product NDC format, constructs OpenFDA API query for exact product NDC match in drug labels, fetches data using makeOpenFDARequest, processes results to include all matching package NDCs, and returns formatted drug information including brand, generic, manufacturer, packages, etc.async ({ productNDC }) => { // Validate product NDC format if (!/^\d{5}-\d{4}$/.test(productNDC.trim())) { return { content: [{ type: "text", text: `Invalid product NDC format: "${productNDC}"\n\n✅ Required format: XXXXX-XXXX (e.g., 12345-1234)`, }], }; } const url = new OpenFDABuilder() .context("label") .search(`openfda.product_ndc:"${productNDC.trim()}"`) .limit(1) .build(); const { data: drugData, error } = await makeOpenFDARequest<OpenFDAResponse>(url); if (error) { return { content: [{ type: "text", text: `Failed to retrieve drug data for product NDC "${productNDC}": ${error.message}`, }], }; } if (!drugData || !drugData.results || drugData.results.length === 0) { return { content: [{ type: "text", text: `No drug found with product NDC "${productNDC}".`, }], }; } const drug = drugData.results[0]; // Get all packages for this product const allPackagesForProduct = drug.openfda.package_ndc?.filter(ndc => ndc.startsWith(productNDC.trim()) ) || []; const drugInfo = { product_ndc: productNDC, available_packages: allPackagesForProduct, brand_name: drug.openfda.brand_name || [], generic_name: drug.openfda.generic_name || [], manufacturer_name: drug.openfda.manufacturer_name || [], product_type: drug.openfda.product_type || [], route: drug.openfda.route || [], substance_name: drug.openfda.substance_name || [], active_ingredient: drug.active_ingredient || [], purpose: drug.purpose || [], dosage_and_administration: drug.dosage_and_administration || [] }; return { content: [{ type: "text", text: `✅ Product NDC "${productNDC}" found with ${allPackagesForProduct.length} package variation(s):\n\n${JSON.stringify(drugInfo, null, 2)}`, }], }; }
- src/index.ts:480-482 (schema)Zod input schema defining the 'productNDC' parameter as a string with description specifying the required XXXXX-XXXX format.{ productNDC: z.string().describe("Product NDC in format XXXXX-XXXX") },
- src/index.ts:477-548 (registration)MCP tool registration call that registers 'get-drug-by-product-ndc' with McpServer.tool, including name, description, input schema, and handler reference.server.tool( "get-drug-by-product-ndc", "Get drug information by product NDC only (XXXXX-XXXX format). This ignores package variations and finds all packages for a product.", { productNDC: z.string().describe("Product NDC in format XXXXX-XXXX") }, async ({ productNDC }) => { // Validate product NDC format if (!/^\d{5}-\d{4}$/.test(productNDC.trim())) { return { content: [{ type: "text", text: `Invalid product NDC format: "${productNDC}"\n\n✅ Required format: XXXXX-XXXX (e.g., 12345-1234)`, }], }; } const url = new OpenFDABuilder() .context("label") .search(`openfda.product_ndc:"${productNDC.trim()}"`) .limit(1) .build(); const { data: drugData, error } = await makeOpenFDARequest<OpenFDAResponse>(url); if (error) { return { content: [{ type: "text", text: `Failed to retrieve drug data for product NDC "${productNDC}": ${error.message}`, }], }; } if (!drugData || !drugData.results || drugData.results.length === 0) { return { content: [{ type: "text", text: `No drug found with product NDC "${productNDC}".`, }], }; } const drug = drugData.results[0]; // Get all packages for this product const allPackagesForProduct = drug.openfda.package_ndc?.filter(ndc => ndc.startsWith(productNDC.trim()) ) || []; const drugInfo = { product_ndc: productNDC, available_packages: allPackagesForProduct, brand_name: drug.openfda.brand_name || [], generic_name: drug.openfda.generic_name || [], manufacturer_name: drug.openfda.manufacturer_name || [], product_type: drug.openfda.product_type || [], route: drug.openfda.route || [], substance_name: drug.openfda.substance_name || [], active_ingredient: drug.active_ingredient || [], purpose: drug.purpose || [], dosage_and_administration: drug.dosage_and_administration || [] }; return { content: [{ type: "text", text: `✅ Product NDC "${productNDC}" found with ${allPackagesForProduct.length} package variation(s):\n\n${JSON.stringify(drugInfo, null, 2)}`, }], }; } );