Skip to main content
Glama
Black-Swan-Causal-Labs

com.blackswancausallabs/openfda-mcp

Official

openFDA MCP

An MCP server exposing FDA regulatory metadata (drugs, biologics, and medical devices) through the openFDA API.

Built by Black Swan Causal Labs as the identifier-resolution layer for a real-world-evidence (RWE) case roster: given an FDA application number or a product name, resolve it to authoritative regulatory metadata.

Why this exists

There are other openFDA MCP servers, and several are broader. This one is narrow on purpose: it is the instrument that resolved the application numbers in a specific published RWE dataset, and it exists so that dataset can name the tool that produced it.

That matters more than it might sound. Whether BLA 125123/2058 resolves to a particular product, or DEN160026 to a particular device class, is a decision made by a piece of software — and a different wrapper can yield a different roster. "We used openFDA" is not a sufficient methods statement; "openfda-mcp v0.1.0" is. If you use this in research, pin the version.

Its practical edge over a general openFDA client is the device half: resolving a CDRH submission number to a risk class takes a three-hop chain (number → product code → classification) with two non-obvious traps, both handled here.

Related MCP server: @cyanheads/openfda-mcp-server

Tools

Drugs and biologics (/drug/* — CDER, CBER)

Tool

Purpose

search_drug_label

Search SPL label text, optionally scoped to a section

lookup_drugsfda_application

Drugs@FDA record for an NDA/BLA/ANDA number

resolve_drug_to_application

Brand or generic name → application number(s)

screen_for_rwe_signals

Experimental. Sweep labels for RWE signals

Devices (/device/* — CDRH)

Tool

Purpose

lookup_device_submission

K / DEN / P / H number → device record

classify_device_product_code

Product code → device class + medical specialty

validate_device_application

Full chain: number → class, specialty, category

Install

pip install openfda-mcp

Add to your MCP client config:

{
  "mcpServers": {
    "openfda": {
      "command": "openfda-mcp",
      "env": { "OPENFDA_API_KEY": "${OPENFDA_API_KEY:-}" }
    }
  }
}

The API key is optional. Without one, openFDA allows 40 requests/min and 1,000/day, which is enough for interactive use. A free key raises it to 240/min and 120,000/day — worth having for bulk sweeps.

Two findings worth knowing

Both were established empirically and are not obvious from FDA's docs.

De Novo grants live in the 510(k) endpoint. DEN###### numbers are stored in the k_number field of /device/510k. There is no De Novo endpoint, and looking for one leads to the wrong conclusion that De Novo numbers can't be resolved. They can.

HDE numbers are not in openFDA at all. Neither the 510(k) nor the PMA endpoint carries H######, so no product code — and therefore no classification — is retrievable. This server still reports device_class: "III" for them, by regulatory inference: HDE is by definition the pathway for devices that would otherwise require a PMA. medical_specialty stays null, because that one really is unavailable, and device_class_source says which is which.

Transient failures are never silent

A genuine absence and a failed request are different things, and this package keeps them different:

  • not found (HTTP 404, or 200 with no results) → returns None; safe to cache

  • transient failure (timeout, connection error, 429, 5xx) → retried with backoff, then raises OpenFDATransientError; never cache this

  • rejected request (other 4xx) → raises OpenFDARequestError

This is a direct response to a real defect: an earlier version swallowed every exception and returned None, so a single read timeout on one application number was cached as a real miss and silently blanked two fields on that record for weeks. Cached failures are indistinguishable from real absences, which makes them the worst kind of silent data loss.

On screen_for_rwe_signals

It is unvalidated. There is no ground-truth oracle for a discovery sweep, and below the strongest hits the results are dominated by applications whose labels use "registry" in an unrelated sense. Treat its output as candidates for human review — not as a finding, and not as a count to report. Establishing recall against a held-out set of known cases is open work.

Development

pip install -e ".[dev]"
pytest              # unit tests, offline
pytest -m live      # live checks against api.fda.gov

Live tests assert against known-good fixtures (K203571 → class II Ophthalmic, DEN160026 → class II Immunology, BLA761180 → LEO Pharma) so a change on FDA's side surfaces as a test failure rather than as quietly wrong data.

License

MIT

Available Tools

7 tools
classify_device_product_codeB

Resolve a CDRH product code to its device class and medical specialty.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_codeYesThe 3-letter CDRH product code, e.g. "HQD", "SDQ".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, but it only states the core function without disclosing behavior such as error handling, case sensitivity, whether the operation is read-only, or any potential side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the tool's function without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter lookup with an output schema present, the description adequately covers the core purpose. However, it lacks any note on edge cases or prerequisites, which would be useful with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'product_code' already well-documented (3-letter code, examples). The description adds no additional parameter information, so baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Resolve' and identifies the resource 'CDRH product code' with a clear output ('device class and medical specialty'). This distinguishes it from sibling tools like lookup_device_submission and validate_device_application.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no information about when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or references to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_device_submissionA

Look up a CDRH device submission by its number.

Handles all four device pathways: 510(k) K-numbers ("K203571"), De Novo grants ("DEN160026" — stored in the 510(k) endpoint, not a separate one), PMA P-numbers ("P230044"), and HDE H-numbers. Supplement suffixes ("P230044/S001") are stripped before lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYesDevice number with prefix. Case-insensitive.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It transparently notes that De Novo grants are stored in the 510(k) endpoint (not a separate one), and that supplement suffixes are stripped before lookup. These are non-obvious behavioral details that add real value beyond the basic lookup operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, with the primary purpose front-loaded in the first sentence. The subsequent sentences provide essential detail about pathway handling and suffix stripping without redundancy or filler. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It sufficiently covers the main lookup behavior, all applicable pathways, and an important edge case (suffix handling). It could mention error conditions (e.g., not found), but that's a minor gap for a single-parameter lookup tool with an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the 'number' parameter with case-insensitivity. The description adds concrete format examples (K203571, DEN160026, P230044, H230044) and explains that supplement suffixes are stripped, which clarifies input expectations significantly beyond the schema field description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource: 'Look up a CDRH device submission by its number.' It also distinguishes itself by explicitly covering all four device pathways (510(k), De Novo, PMA, HDE), which separates it from sibling tools that handle other submission types or lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: to look up a submission by its number, including examples for each pathway. It does not explicitly contrast with sibling tools, but the clear scope and examples imply appropriate usage. No exclusions or misconceptions are introduced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_drugsfda_applicationB

Fetch Drugs@FDA application metadata for an NDA/BLA/ANDA number.

ParametersJSON Schema
NameRequiredDescriptionDefault
application_numberYesThe number WITH its prefix ("NDA021436", "BLA761180"). Case-insensitive. A bare digit string will not match — Drugs@FDA stores the prefix as part of the value.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action ('fetch') and does not disclose potential error behavior, read-only nature explicitly, rate limits, or what happens when the application number is invalid. The parameter description note about prefix matching provides some behavioral context, but that resides in the schema, not the tool description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly-worded sentence with no filler. It front-loads the core function immediately and uses precise terminology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup tool with one well-documented parameter and a defined output schema, the description provides the essential information needed to select and use the tool. It could mention error cases, but these are likely covered by the output schema. Overall complete enough for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% description coverage for the single parameter, including detailed format instructions (prefix required, case-insensitive). The tool description adds nothing beyond naming the parameter type (NDA/BLA/ANDA), which is already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Fetch') and resource ('Drugs@FDA application metadata') and specifies the input type (NDA/BLA/ANDA). It distinguishes from sibling device lookup tools by naming Drugs@FDA and drug application numbers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives or any exclusions. It implies usage for fetching drug application metadata, but does not mention sibling tools or when not to use it. This is minimal/no guidance beyond the obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_drug_to_applicationA

Resolve a brand or generic drug name to its NDA/BLA application number(s).

Bridges drug-name-only sources (registry inventories, product lists) to FDA regulatory metadata. Searches the brand and generic name fields directly rather than label prose, so another product merely mentioning this drug does not produce a false match.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax label records to aggregate (default 10).
drug_nameYesBrand or generic name, e.g. "Adbry" or "tralokinumab".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses an important behavioral nuance: it searches brand/generic name fields directly rather than label prose, avoiding false matches. However, it doesn't explicitly state whether this is a read-only operation, mention any permissions/rate limits, or describe error behavior. For a read/search tool this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, and every sentence adds value. The second sentence provides crucial context about matching behavior without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the presence of an output schema (which covers return structure), and the absence of annotations, the description covers purpose, usage context, and a key behavioral detail. It doesn't explain edge cases like multiple application numbers or how the limit interacts with output, but these are partially covered by the schema and are not critical for a resolver tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (drug_name and limit) are already well-documented in the schema. The description adds no new parameter-level details beyond restating that drug_name is brand/generic and giving examples already present in the schema. Baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Resolve') with a clear resource ('brand or generic drug name to its NDA/BLA application number(s)'). It also distinguishes from sibling tools by emphasizing direct field search rather than label prose, which sets it apart from search_drug_label and aligns with lookup_drugsfda_application.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the intended use case ('Bridges drug-name-only sources... to FDA regulatory metadata') and implicitly distinguishes from label-prose searching by noting that mentions in prose won't produce false matches. However, it doesn't explicitly name alternative tools or say when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screen_for_rwe_signalsA

EXPERIMENTAL. Sweep drug labels for registry / real-world-evidence signals.

Searches the label corpus for terms suggesting registry, natural-history or other real-world evidence, then aggregates hits by application number with snippets showing where each term matched.

This tool is unvalidated and has a known false-positive problem. It has no ground-truth oracle, and below the strongest hits the results are dominated by applications whose labels use "registry" in an unrelated sense. Its output is a candidate list for human review — not a finding, and not a count you should report.

ParametersJSON Schema
NameRequiredDescriptionDefault
extra_termsNoAdditional quoted terms to add to the default screen.
limit_per_termNoMax label records per term (default 200).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosure. It candidly discloses the tool's experimental status, lack of ground-truth oracle, false-positive problem, and the tendency for results to be dominated by unrelated uses of 'registry.' It also clarifies the output's role as a candidate list, not a finding. This is exemplary transparency beyond any structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with a clear 'EXPERIMENTAL' warning. Every sentence adds critical information: what it does, how it aggregates results, and the crucial limitations. It is appropriately sized for the tool's complexity and caveats, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully contextualizes the tool's purpose, methodology, and limitations. An output schema is present, so explaining return values is not necessary. The description covers the behavioral caveats and the candidate-list nature, making it complete for an experimental screening tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters (extra_terms and limit_per_term) with descriptions, providing 100% coverage. The description itself does not add parameter-specific semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Sweep drug labels for registry / real-world-evidence signals.' It clearly distinguishes this from sibling tools like search_drug_label by focusing on the sweep-and-aggregate behavior across the label corpus, rather than a general search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage guidance: it is experimental, unvalidated, and has a known false-positive problem. It explicitly warns that output is a candidate list for human review, not a finding or reportable count. However, it does not explicitly name alternative tools or state when to prefer them over this tool, so it loses a point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_drug_labelB

Search openFDA drug labels (SPL) for a term.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoPagination offset.
termYesSearch term. Quote multi-word phrases, e.g. '"natural history"'.
limitNoMax results per page (1-1000, default 100).
sectionNoOptional SPL section to scope to (e.g. "clinical_studies"). Defaults to searching the RWE-relevant sections together.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states the basic search action and does not disclose behavioral traits such as default sections searched, pagination behavior, rate limits, or read-only nature. The schema covers some parameter behavior but not the overall tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's core purpose. It avoids unnecessary detail or repetition, earning a high score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, output schema provided), the description is minimal but not fatally incomplete. The schema fills in parameter details, but the description lacks usage context and behavioral transparency, leaving the agent to infer when to use it. It is adequate but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the term parameter in the schema; it merely mentions 'for a term' without elaborating on syntax, defaults, or section scoping, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Search openFDA drug labels (SPL) for a term.' It uses a specific verb ('Search'), identifies a distinct resource ('openFDA drug labels (SPL)'), and specifies the action ('for a term'). This distinguishes it from sibling tools that focus on applications, devices, or signal screening.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools, exclusions, or specific contexts. The purpose is implied but not explicitly contrasted with other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_device_applicationA

Validate a device number and derive class, specialty and category in one call.

Chains lookup_device_submission -> classify_device_product_code, which is the full three-hop resolution: number -> product_code -> classification.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYesDevice number with prefix (K/DEN/P/H). Case-insensitive.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral transparency. It discloses the chaining behavior and the resolution sequence, but it does not mention error handling, expected behavior for invalid device numbers, or any side effects. For a simple read-only validation/classification tool, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences. The first sentence clearly states the action and outputs; the second concisely explains the chaining and resolution path. No redundant text or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single required parameter, an output schema, and straightforward chaining logic, the description is largely complete. It clearly states the input (device number) and the derivation path. However, it omits details about edge cases (e.g., what happens if the device number is invalid) and does not explicitly mention that this is a convenience wrapper, but those are not strictly necessary for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides full documentation for the only parameter 'number' (including prefix types and case-insensitivity). The description adds no additional semantics beyond referring to 'device number' generally. With 100% schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: validating a device number and deriving class, specialty, and category in one call. It explicitly names the chained steps (lookup_device_submission -> classify_device_product_code) and the resolution path (number -> product_code -> classification), which distinguishes it from the sibling tools that perform only individual steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use this tool: when the full three-hop resolution is needed in one call. It names the underlying components and the overall resolution path, implying that the individual sibling tools are alternatives for partial steps. However, it does not explicitly state when not to use this tool (e.g., if only the product_code is needed), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedclassify_device_product_code
    • First observedlookup_device_submission
    • First observedlookup_drugsfda_application
    • First observedresolve_drug_to_application
    • First observedscreen_for_rwe_signals
    • First observedsearch_drug_label
    • First observedvalidate_device_application

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource/action: drug label search, application metadata lookup, name-to-application resolution, RWE signal screening, device submission lookup, product code classification, and full validation. The drug and device groups are clearly separated, and descriptions clarify any potential overlap (e.g., validate_device_application explicitly chains the other two device tools).

Naming Consistency4/5

All tool names follow a verb-first, snake_case convention (search, lookup, resolve, screen, classify, validate), but the noun phrases vary in structure: some are direct objects (drug_label, device_submission), some use prepositions (drug_to_application, for_rwe_signals). This is mostly consistent and readable, with minor deviations.

Tool Count5/5

Seven tools is well-scoped for covering both drug-related (labels, applications, name resolution, RWE signals) and device-related (submissions, product codes, validation) workflows. Each tool serves a clear purpose without bloat.

Completeness4/5

The core workflows are covered: drug label search, drug name-to-application resolution, application metadata retrieval, RWE signal screening, device submission lookup, product code classification, and full validation. Minor gaps exist, such as no device search by name and no adverse event data, but the primary lifecycle is well supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/Black-Swan-Causal-Labs/openfda-mcp'

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