get-drug-by-generic-name
Find drug information using generic ingredient names. Retrieve all brand versions and details for medications when you know the active component but not specific products.
Instructions
Get drug information by generic (active ingredient) name. Useful when you know the generic name but not the brand name. Returns all brand versions of the generic drug.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| genericName | Yes | Generic drug name (active ingredient) | |
| limit | No | Maximum number of results to return |
Implementation Reference
- src/index.ts:157-198 (handler)The core handler function for the 'get-drug-by-generic-name' tool. It constructs an OpenFDA API query using OpenFDABuilder for the given generic name, fetches data via makeOpenFDARequest, handles errors and empty results, maps the response to simplified drug objects (brand_name, generic_name, manufacturer, product_type, route), and returns a formatted text response with the results.async ({ genericName, limit }) => { const url = new OpenFDABuilder() .context("label") .search(`openfda.generic_name:"${genericName}"`) .limit(limit) .build(); const { data: drugData, error } = await makeOpenFDARequest<OpenFDAResponse>(url); if (error) { return { content: [{ type: "text", text: `Failed to retrieve drug data for generic name "${genericName}": ${error.message}`, }], }; } if (!drugData || !drugData.results || drugData.results.length === 0) { return { content: [{ type: "text", text: `No drug information found for generic name "${genericName}".`, }], }; } const drugs = drugData.results.map(drug => ({ brand_name: drug?.openfda.brand_name?.[0] || 'Unknown', generic_name: drug?.openfda.generic_name?.[0] || 'Unknown', manufacturer_name: drug?.openfda.manufacturer_name?.[0] || 'Unknown', product_type: drug?.openfda.product_type?.[0] || 'Unknown', route: drug?.openfda.route || [], })); return { content: [{ type: "text", text: `Found ${drugs.length} drug(s) with generic name "${genericName}":\n\n${JSON.stringify(drugs, null, 2)}`, }], }; }
- src/index.ts:153-156 (schema)Zod input schema validation for the tool parameters: genericName (required string) and optional limit (number, defaults to 5).{ genericName: z.string().describe("Generic drug name (active ingredient)"), limit: z.number().optional().default(5).describe("Maximum number of results to return") },
- src/index.ts:150-199 (registration)MCP server tool registration call that defines the tool name, description, input schema, and attaches the handler function.server.tool( "get-drug-by-generic-name", "Get drug information by generic (active ingredient) name. Useful when you know the generic name but not the brand name. Returns all brand versions of the generic drug.", { genericName: z.string().describe("Generic drug name (active ingredient)"), limit: z.number().optional().default(5).describe("Maximum number of results to return") }, async ({ genericName, limit }) => { const url = new OpenFDABuilder() .context("label") .search(`openfda.generic_name:"${genericName}"`) .limit(limit) .build(); const { data: drugData, error } = await makeOpenFDARequest<OpenFDAResponse>(url); if (error) { return { content: [{ type: "text", text: `Failed to retrieve drug data for generic name "${genericName}": ${error.message}`, }], }; } if (!drugData || !drugData.results || drugData.results.length === 0) { return { content: [{ type: "text", text: `No drug information found for generic name "${genericName}".`, }], }; } const drugs = drugData.results.map(drug => ({ brand_name: drug?.openfda.brand_name?.[0] || 'Unknown', generic_name: drug?.openfda.generic_name?.[0] || 'Unknown', manufacturer_name: drug?.openfda.manufacturer_name?.[0] || 'Unknown', product_type: drug?.openfda.product_type?.[0] || 'Unknown', route: drug?.openfda.route || [], })); return { content: [{ type: "text", text: `Found ${drugs.length} drug(s) with generic name "${genericName}":\n\n${JSON.stringify(drugs, null, 2)}`, }], }; } );