@pipeworx/pharma-intel

Connect: https://gateway.pipeworx.io/pharma-intel/mcp · Install: one-click buttons

Tools: 9

Compound pharmaceutical-research MCP that joins FDA, ClinicalTrials.gov, RxNorm, DailyMed, and PubMed evidence into investor-oriented diligence views.

Tools

  • pharma_drug_profile(...) — assemble approvals, labels, adverse-event reports, trials, literature, prescribing labels, and RxNorm data for a drug.
  • pharma_pipeline_scan(...) — summarize a sponsor pipeline or a condition’s recruiting trials and FDA indication-label matches.
  • pharma_pipeline_catalysts(...) — route Phase 2/3 primary-completion dates and recently completed trials for catalyst follow-up.
  • pharma_safety_report(...) — combine adverse-event reports, reaction counts, recalls, and RxNorm interaction data.
  • pharma_sponsor_diligence(...) — combine pipeline composition, registry activity, FDA applications, and affiliation-linked literature for a sponsor.
  • pharma_indication_landscape(...) — combine condition-level trial competition, FDA indication labels, and literature.
  • pharma_product_sales({drug, company?, form_type?}) — how much revenue one DRUG earns, drug-first: FDA applicant → SEC filer → the product line in the latest 10-K’s disaggregated-revenue note, with the accession and report URL.
  • pharma_sales_at_risk({company?, drug?, horizon_years?, max_products?}) — the patent cliff in dollars: the filer’s product revenue lines joined to Orange Book patent/exclusivity expiries (small molecules) and Purple Book licensure/biosimilar entry (biologics), ranked by year.
  • pharma_resolve_drug({name}) — the entity spine: one name → RxCUI (brand and ingredient), NDA/BLA numbers with sponsor, DailyMed setid, marketer CIK/ticker, ClinicalTrials.gov study count, ChEMBL id.

What sponsor means

pharma_pipeline_catalysts, pharma_pipeline_scan and pharma_sponsor_diligence resolve a sponsor to the trials that company leads as the registered sponsor on ClinicalTrials.gov. A study another organisation runs using the company’s drug belongs to that organisation and is not returned — an academic pembrolizumab trial is not a Merck catalyst.

Until 2026-08-29 pharma_pipeline_catalysts passed the company name as free text and as a sponsor filter, and the underlying registry filter matched collaborators too, so a Merck query came back with three of its four “Merck catalysts” belonging to other organisations. Both halves are fixed; see the clinicaltrials pack README for the registry-level detail and the sponsor_match argument that widens the match on the primitives.

The drug → money join (pharma_product_sales, pharma_sales_at_risk)

FDA knows who markets a drug. SEC knows what a company earned. Nothing joins them, because the join key is the marketer’s legal name and every source spells it differently. These two tools do that walk:

brand name → FDA applicant (Orange Book NDA holder / Purple Book 351(a)
licence holder / Drugs@FDA sponsor) → edgar.sponsor_to_filer → CIK →
edgar.edgar_product_revenue → the product's line in the 10-K

The applicant is tried as a LIST, not a guess. Keytruda’s Purple Book licence holder is MSD International Business GmbH, a Swiss entity with no SEC CIK at all; openfda spells the same marketer MERCK SHARP DOHME, which resolves to MRK. Candidates are walked in order until one resolves, and every attempt is returned in resolution_attempts so a miss is legible rather than blank.

A private marketer is a status, never an empty result. pharma_product_sales({drug: "Jardiance"}) returns status: "marketer_not_sec_filer" naming Boehringer Ingelheim Pharmaceuticals Inc and the SEC lookup’s own verdict (us_registrant_unlisted). There is no revenue line because there is no US disclosure obligation — which is a different fact from the drug having no sales, and the response says so.

Searching a brand also returns its generics. An Orange Book search for “Januvia” matches ANDA rows from generic houses; taking the first row would name one of those as the marketer. Trade-name matches are taken first, RLD rows ahead of the rest.

What the sales-at-risk numbers are and are not

  • Revenue is the LAST REPORTED PERIOD, taken from the filer’s own XBRL disaggregation. It is not a forecast of revenue in the LOE year.
  • For small molecules the date is the compound protection, not the earliest listing. It is the later of the first in-force drug-substance patent and any ANDA-blocking exclusivity (NCE, orphan, pediatric). New-product (NP) and new-indication exclusivities block only that change, so they never set it. The first version took the earliest date of anything listed and put Mounjaro and Zepbound, $36.5bn of 2025 revenue, on a November 2026 cliff: that was a 3-year NP exclusivity, and the tirzepatide compound patent runs to 2036-05-13. Later substance patents (salts, crystal forms) are named in loe_basis as a possible extension; detail.confidence says whether the date rests on a compound patent, exclusivity only, a formulation patent only, or nothing. It is still before any litigation, settlement or patent-term adjustment moves it, and those usually move it later.
  • A name match has to be on the product’s own name. Both FDA searches are loose, and the Purple Book one matches the applicant: Lilly’s “Neuroscience” and “Oncology” revenue lines resolved to Myobloc (Solstice NeuroSciences) and Lymphir (Citius Oncology). They now land in unmatched_revenue_lines.
  • Geographic slices are not products. AbbVie files Humira | United States; Lilly files only Mounjaro | U.S. and Mounjaro | Outside U.S.. A trailing place name is read as a slice of the product above it, and a US / rest-of-world pair is summed when no worldwide row exists.
  • For biologics the Purple Book lists no patents at all. The date used is the BPCIA 12-year floor from first licensure — read with include_discontinued, because the original presentation is often long discontinued (Keytruda’s live rows start 2015-01-15; its actual first licence is 2014-09-04, four months earlier). That floor is the earliest a biosimilar may be licensed, not the date exclusivity is lost. When it has already passed with nothing licensed there is no date on file at FDA: the product returns loe_date: null, bpcia_floor_passed: true, and lands in exposed_undated_bpcia with its own total_revenue — never in revenue_at_risk_by_year. The first version dated these “today”, which made Merck’s ranking say $43.4bn “loses exclusivity in 2026” (Keytruda + Gardasil + the MMR vaccines, floors 2026/2018/2017). Exposed on eligibility is a real fact; a year for it is not.
  • A licensed biosimilar is a real LOE event, and puts the product in exclusivity_already_elapsed rather than in the forward ranking.
  • Revenue lines with no FDA match are returned, not dropped, in unmatched_revenue_lines — franchise labels (Gardasil/Gardasil 9), alliance lines, non-US brands and non-drug segments (Livestock) land there. Their absence from the ranking is not evidence they face no cliff.

The statuses, and why there are five of them

Every one of these is a different fact, and collapsing any two produces a confident wrong answer rather than a visible gap:

statuswhat actually happened
okrevenue rows found
no_product_breakdownthe filer files, but tags no XBRL line for this product — read the filing URL by hand
marketer_not_sec_filerSEC answered and said this entity is not a listed filer
filer_lookup_failedthe SEC lookup never returned. Says nothing about whether the marketer is listed
drug_not_found / identity_lookup_failedthe FDA sources answered empty / the FDA sources fell over

And on pharma_sales_at_risk specifically:

statuswhat actually happened
no_product_lines_matchedthe filer discloses revenue by division or segment, never by product — Pfizer’s 10-K reports “U.S. Commercial Division” and “Biopharma [Member]”, so nothing reaches an FDA lookup. The tool cannot answer for this filer; ask per drug instead. This is a fact about the FILING, not evidence the portfolio faces no cliff.
no_products_within_horizonproducts did match FDA records and all of them expire after the horizon

The middle pair is the one that bit: sponsor_to_filer runs an EDGAR full-text search and routinely takes 5-8s, so under the shared 8s subcall cap it timed out inside the compound while answering fine when called directly. The timeout was recorded as evidence for “not an SEC filer”. The conclusion happened to be right for Boehringer, which is exactly what makes it dangerous — the same code would have said it just as confidently about a listed company. The filer ladder now has its own 12s per-call timeout and a 20s total budget, and reports answered separately from resolved.

Not covered: foreign private issuers file 20-F rather than 10-K, and filers disaggregate only the products they consider material — no_product_breakdown distinguishes both from a lookup failure and gives the filing URL to read by hand.

Auth

Keyless.

Data sources

Compound outputs preserve each upstream source separately and mark unavailable branches. Registry dates and spontaneous adverse-event reports are routing evidence; clinical, regulatory, causal, commercial, and investment conclusions require source-level review.

Tools

  • pharma_drug_profile — Look up a drug’s FDA approval status, dosage forms, interactions, and active trials. Returns approval dates, formulations, known drug interactions, and ongoing trial details. E.g., search “ozempic” or
  • pharma_pipeline_scan — Search clinical trials by condition (e.g., “lung cancer”) or sponsor (e.g., “Pfizer”). Returns trial phases, recruitment status, and approved treatments for that indication. Pass status and phase toge
  • pharma_pipeline_catalysts — Build a sponsor catalyst-monitoring view from ClinicalTrials.gov and Drugs@FDA. Returns upcoming Phase 2/3 primary-completion dates, recently completed trials for results/disclosure follow-up, and spo
  • pharma_safety_report — Check adverse event frequency, severity patterns, and contraindications for a drug. Returns safety profiles, risk data, and recall history. E.g., search “aspirin”.
  • pharma_sponsor_diligence — Build a pharmaceutical sponsor diligence view from ClinicalTrials.gov, Drugs@FDA, and PubMed. Returns pipeline composition, recent registry activity, FDA applications, and recent affiliation-linked li
  • pharma_indication_landscape — Build a disease-area landscape from registered interventional trials, FDA indication-label matches, and PubMed literature. Returns sponsor, phase, status, intervention, approved-label, and publication
  • pharma_product_sales — How much revenue a specific DRUG generates for the company that sells it — ask by brand name (“Keytruda”, “Jardiance”, “Eliquis”) and get the reported sales figures by period and by region, straight o
  • pharma_sales_at_risk — The patent cliff, in dollars: which of a pharmaceutical company’s products lose exclusivity soonest and how much reported revenue each one carries. Ask by ticker or company (“MRK”, “Pfizer”) for its w
  • pharma_resolve_drug — Turn one drug name into every identifier the other pharma tools need: RxNorm RxCUI for the brand and the ingredient, FDA application numbers (NDA from the Orange Book, BLA from the Purple Book) with t

Tools

  • pharma_drug_profile — Look up a drug's FDA approval status, dosage forms, interactions, and active trials. Returns approval dates, formulations, known drug interactions, and ongoing trial details. E.g., search ozempic or m
  • pharma_indication_landscape — Build a disease-area landscape from registered interventional trials, FDA indication-label matches, and PubMed literature. Returns sponsor, phase, status, intervention, approved-label, and publication
  • pharma_pipeline_catalysts — Build a sponsor catalyst-monitoring view from ClinicalTrials.gov and Drugs@FDA. Returns upcoming Phase 2/3 primary-completion dates, recently completed trials for results/disclosure follow-up, and spo
  • pharma_pipeline_scan — Search clinical trials by condition (e.g., lung cancer ) or sponsor (e.g., Pfizer ). Returns trial phases, recruitment status, and approved treatments for that indication. Pass status and phase togeth
  • pharma_product_sales — How much revenue a specific DRUG generates for the company that sells it — ask by brand name ( Keytruda , Jardiance , Eliquis ) and get the reported sales figures by period and by region, straight out
  • pharma_resolve_drug — Turn one drug name into every identifier the other pharma tools need: RxNorm RxCUI for the brand and the ingredient, FDA application numbers (NDA from the Orange Book, BLA from the Purple Book) with t
  • pharma_safety_report — Check adverse event frequency, severity patterns, and contraindications for a drug. Returns safety profiles, risk data, and recall history. E.g., search aspirin .
  • pharma_sales_at_risk — The patent cliff, in dollars: which of a pharmaceutical company's products lose exclusivity soonest and how much reported revenue each one carries. Ask by ticker or company ( MRK , Pfizer ) for its wh
  • pharma_sponsor_diligence — Build a pharmaceutical sponsor diligence view from ClinicalTrials.gov, Drugs@FDA, and PubMed. Returns pipeline composition, recent registry activity, FDA applications, and recent affiliation-linked li

Regenerated from source · build September 15, 2026