Skip to main content
Glama

openfda_approval_searcher

Verify FDA drug approval details by searching the Drugs@FDA database. Retrieve application numbers, drug names, formulations, marketing status, and approval dates to confirm drug status and history.

Instructions

Search FDA drug approval records from Drugs@FDA database.

⚠️ PREREQUISITE: Use the 'think' tool FIRST to plan your research strategy! Returns information about: - Application numbers and sponsors - Brand and generic names - Product formulations and strengths - Marketing status and approval dates - Submission history Useful for verifying if a drug is FDA-approved and when.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
api_keyNoOptional OpenFDA API key (overrides OPENFDA_API_KEY env var)
application_numberNoNDA or BLA application number
approval_yearNoYear of approval (YYYY format)
drugNoDrug name (brand or generic) to search for
limitNoMaximum number of results
pageNoPage number (1-based)

Implementation Reference

  • The primary MCP tool handler function for 'openfda_approval_searcher'. Registers the tool via @mcp_app.tool(), defines input schema via Pydantic Annotated fields, and implements logic by delegating to the openfda helper module.
    @mcp_app.tool() @track_performance("biomcp.openfda_approval_searcher") async def openfda_approval_searcher( drug: Annotated[ str | None, Field(description="Drug name (brand or generic) to search for"), ] = None, application_number: Annotated[ str | None, Field(description="NDA or BLA application number"), ] = None, approval_year: Annotated[ str | None, Field(description="Year of approval (YYYY format)"), ] = None, limit: Annotated[ int, Field(description="Maximum number of results", ge=1, le=100), ] = 25, page: Annotated[ int, Field(description="Page number (1-based)", ge=1), ] = 1, api_key: Annotated[ str | None, Field( description="Optional OpenFDA API key (overrides OPENFDA_API_KEY env var)" ), ] = None, ) -> str: """Search FDA drug approval records from Drugs@FDA database. ⚠️ PREREQUISITE: Use the 'think' tool FIRST to plan your research strategy! Returns information about: - Application numbers and sponsors - Brand and generic names - Product formulations and strengths - Marketing status and approval dates - Submission history Useful for verifying if a drug is FDA-approved and when. """ from biomcp.openfda import search_drug_approvals skip = (page - 1) * limit return await search_drug_approvals( drug=drug, application_number=application_number, approval_year=approval_year, limit=limit, skip=skip, api_key=api_key, )
  • The supporting helper function that performs the actual OpenFDA API search for drug approvals, constructs search queries, handles pagination, formats results, and includes supporting formatting functions.
    async def search_drug_approvals( drug: str | None = None, application_number: str | None = None, approval_year: str | None = None, limit: int = OPENFDA_DEFAULT_LIMIT, skip: int = 0, api_key: str | None = None, ) -> str: """ Search FDA drug approval records from Drugs@FDA. Args: drug: Drug name (brand or generic) to search for application_number: NDA or BLA application number approval_year: Year of approval (YYYY format) limit: Maximum number of results to return skip: Number of results to skip (for pagination) api_key: Optional OpenFDA API key (overrides OPENFDA_API_KEY env var) Returns: Formatted string with drug approval information """ # Build search query search_params = {} if drug: # Search both brand and generic names search_params["search"] = ( f'(openfda.brand_name:"{drug}" OR ' f'openfda.generic_name:"{drug}" OR ' f'openfda.substance_name:"{drug}")' ) elif application_number: search_params["search"] = f'application_number:"{application_number}"' elif approval_year: # Search for approvals in a specific year search_params["search"] = ( f"products.marketing_status_date:[{approval_year}-01-01 TO {approval_year}-12-31]" ) # Add pagination search_params["limit"] = str(min(limit, 100)) search_params["skip"] = str(skip) # Sort by submission date (most recent first) search_params["sort"] = "submissions.submission_status_date:desc" # Make the request response, error = await make_openfda_request( OPENFDA_DRUGSFDA_URL, search_params, "openfda_approvals", api_key ) if error: return f"⚠️ Error searching drug approvals: {error}" if not response or not response.get("results"): return "No drug approval records found matching your criteria." # Format the results results = response["results"] total = ( response.get("meta", {}).get("results", {}).get("total", len(results)) ) output = ["## FDA Drug Approval Records\n"] if drug: output.append(f"**Drug**: {drug}") if application_number: output.append(f"**Application**: {application_number}") if approval_year: output.append(f"**Approval Year**: {approval_year}") output.append( f"**Total Records Found**: {format_count(total, 'record')}\n" ) # Show results output.append(f"### Results (showing {len(results)} of {total}):\n") for i, record in enumerate(results, 1): output.extend(_format_approval_summary(record, i)) output.append(f"\n{OPENFDA_DISCLAIMER}") return "\n".join(output)
  • Tool registration via the @mcp_app.tool() decorator applied to the handler function.
    @mcp_app.tool() @track_performance("biomcp.openfda_approval_searcher") async def openfda_approval_searcher( drug: Annotated[ str | None, Field(description="Drug name (brand or generic) to search for"), ] = None, application_number: Annotated[ str | None, Field(description="NDA or BLA application number"), ] = None, approval_year: Annotated[ str | None, Field(description="Year of approval (YYYY format)"), ] = None, limit: Annotated[ int, Field(description="Maximum number of results", ge=1, le=100), ] = 25, page: Annotated[ int, Field(description="Page number (1-based)", ge=1), ] = 1, api_key: Annotated[ str | None, Field( description="Optional OpenFDA API key (overrides OPENFDA_API_KEY env var)" ), ] = None, ) -> str: """Search FDA drug approval records from Drugs@FDA database. ⚠️ PREREQUISITE: Use the 'think' tool FIRST to plan your research strategy! Returns information about: - Application numbers and sponsors - Brand and generic names - Product formulations and strengths - Marketing status and approval dates - Submission history Useful for verifying if a drug is FDA-approved and when. """ from biomcp.openfda import search_drug_approvals skip = (page - 1) * limit return await search_drug_approvals( drug=drug, application_number=application_number, approval_year=approval_year, limit=limit, skip=skip, api_key=api_key, )
  • Input schema definition via function parameters with Pydantic annotations.
    drug: Annotated[ str | None, Field(description="Drug name (brand or generic) to search for"), ] = None, application_number: Annotated[ str | None, Field(description="NDA or BLA application number"), ] = None, approval_year: Annotated[ str | None, Field(description="Year of approval (YYYY format)"), ] = None, limit: Annotated[ int, Field(description="Maximum number of results", ge=1, le=100), ] = 25, page: Annotated[ int, Field(description="Page number (1-based)", ge=1), ] = 1, api_key: Annotated[ str | None, Field( description="Optional OpenFDA API key (overrides OPENFDA_API_KEY env var)" ), ] = None, ) -> str:

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/genomoncology/biomcp'

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