@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_basisas a possible extension;detail.confidencesays 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 onlyMounjaro | U.S.andMounjaro | 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 returnsloe_date: null,bpcia_floor_passed: true, and lands inexposed_undated_bpciawith its owntotal_revenue— never inrevenue_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_elapsedrather 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:
| status | what actually happened |
|---|---|
ok | revenue rows found |
no_product_breakdown | the filer files, but tags no XBRL line for this product — read the filing URL by hand |
marketer_not_sec_filer | SEC answered and said this entity is not a listed filer |
filer_lookup_failed | the SEC lookup never returned. Says nothing about whether the marketer is listed |
drug_not_found / identity_lookup_failed | the FDA sources answered empty / the FDA sources fell over |
And on pharma_sales_at_risk specifically:
| status | what actually happened |
|---|---|
no_product_lines_matched | the 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_horizon | products 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
- https://clinicaltrials.gov/data-api/api — registered trial protocols, status, dates, sponsors, and posted results.
- https://open.fda.gov/apis/ — Drugs@FDA, drug labels, FAERS reports, and recall records.
- https://dailymed.nlm.nih.gov/dailymed/app-support-web-services.cfm — current SPL prescribing-label metadata.
- https://rxnav.nlm.nih.gov/RxNormAPIs.html — normalized drug concepts and interaction data.
- https://www.ncbi.nlm.nih.gov/books/NBK25501/ — PubMed E-utilities literature search.
- https://www.sec.gov/edgar/sec-api-documentation — EDGAR company facts, filings, and the XBRL Financial Report rendering that carries product-level revenue.
- https://www.fda.gov/drugs/drug-approvals-and-databases/approved-drug-products-therapeutic-equivalence-evaluations-orange-book — Orange Book products, listed patents, and regulatory exclusivities.
- https://purplebooksearch.fda.gov/downloads — Purple Book licensed biologics, 351(k) biosimilars, and interchangeables.
- https://www.ebi.ac.uk/chembl/api/data/docs — ChEMBL molecule identifiers and development phase.
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 mpharma_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 publicationpharma_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 spopharma_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 togethpharma_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 outpharma_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 tpharma_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 whpharma_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