Skip to main content
Glama
RowanErasmus

DailyMed MCP Server

by RowanErasmus

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
NameRequiredDescriptionDefault
drug_class_codeNoCode representing a pharmacologic drug class
drug_class_coding_systemNoCoding system (default: National Drug File Reference Terminology)
class_code_typeNoType of pharmacologic drug class
class_nameNoName of the drug class
unii_codeNoUnique Ingredient Identifier code
pageNoPage number for pagination (1-based, default: 1)
pageSizeNoNumber of results per page (default: 100, max: 100)

Implementation Reference

  • 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),
          },
        ],
      };
  • 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",

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RowanErasmus/dailymed-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server