search_drug_classes
Find pharmacologic drug classes by code, name, or classification type to identify medication mechanisms and categories within the FDA DailyMed database.
Instructions
Search for pharmacologic drug classes using various parameters with pagination support
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| drug_class_code | No | Code representing a pharmacologic drug class | |
| drug_class_coding_system | No | Coding system (default: National Drug File Reference Terminology) | |
| class_code_type | No | Type of pharmacologic drug class | |
| class_name | No | Name of the drug class | |
| unii_code | No | Unique Ingredient Identifier code | |
| page | No | Page number for pagination (1-based, default: 1) | |
| pageSize | No | Number of results per page (default: 100, max: 100) |
Implementation Reference
- src/index.ts:320-346 (handler)The MCP tool handler in src/index.ts for 'search_drug_classes', which orchestrates the call to the client.
case "search_drug_classes": const drugClassParams: any = {}; if (args.drug_class_code) drugClassParams.drug_class_code = args.drug_class_code as string; if (args.drug_class_coding_system) drugClassParams.drug_class_coding_system = args.drug_class_coding_system as string; if (args.class_code_type) drugClassParams.class_code_type = args.class_code_type as string; if (args.class_name) drugClassParams.class_name = args.class_name as string; if (args.unii_code) drugClassParams.unii_code = args.unii_code as string; // Add pagination parameters if (args.page) drugClassParams.page = args.page as number; if (args.pageSize) drugClassParams.pageSize = args.pageSize as number; const drugClassResults = await this.client.searchDrugClassesAdvanced(drugClassParams); return { content: [ { type: "text", text: JSON.stringify(drugClassResults, null, 2), }, ], }; - src/clients/drug-class-client.ts:38-96 (handler)The actual implementation of the drug class search logic in DrugClassClient.searchDrugClassesAdvanced.
async searchDrugClassesAdvanced(params: DrugClassSearchParams = {}): Promise<PaginatedDrugClassResponse> { const { page = 1, pageSize = 100, ...searchParams } = params; validatePaginationParams(page, pageSize, 100); try { const queryParams: any = { page, pagesize: Math.min(pageSize, 100), // API max is 100 }; // Add search filters if (searchParams.drug_class_code) queryParams.drug_class_code = searchParams.drug_class_code; if (searchParams.drug_class_coding_system) queryParams.drug_class_coding_system = searchParams.drug_class_coding_system; if (searchParams.class_code_type) queryParams.class_code_type = searchParams.class_code_type; if (searchParams.class_name) queryParams.class_name = searchParams.class_name; if (searchParams.unii_code) queryParams.unii_code = searchParams.unii_code; const response = await this.client.get("/drugclasses.json", { params: queryParams, }); if ( response.data && response.data.data && Array.isArray(response.data.data) ) { const drugClasses = response.data.data.map((item: any) => ({ drugClassName: item.name, drugClassCode: item.code, drugClassCodingSystem: item.codingSystem, classCodeType: item.type, uniiCode: item.unii_code, })); // Extract pagination metadata from API response const totalResults = response.data.metadata?.total_elements || drugClasses.length; const totalPages = Math.ceil(totalResults / pageSize); return { data: drugClasses, pagination: { page, pageSize, totalResults, totalPages, hasNextPage: page < totalPages, hasPreviousPage: page > 1, }, }; } else { throw new Error("Unexpected response structure for drug class search"); } } catch (error) { throw new Error( `Failed to search drug classes: ${error instanceof Error ? error.message : "Unknown error"}`, ); } } - src/tools.ts:454-454 (registration)The registration of the 'search_drug_classes' tool in the tool definition list.
name: "search_drug_classes",