
BioCatalystFeed
io.github.biocatalystfeedPublished by GitHub account biocatalystfeedv0.4.0Updated Nov 5, 2026
Biotech catalysts: trials, FDA decisions (PDUFA, AdCom, approvals, CRLs), NIH, PubMed, SEC, EMA.
Overview
Biotech catalyst feed MCP server that lets an assistant search clinical trials, FDA and EMA actions, grants, papers and SEC filings, and track changes over…
- What you can do
- Search and diff clinical trials: sponsor pipelines, status, phase, enrollment, endpoint and site changes with severity labels
- Look up FDA actions: approvals, labels, complete response letters, advisory committee meetings, Orange Book patents and exclusivities, and a PDUFA/decision calendar
- Search NIH grants, papers and preprints (PubMed, Europe PMC, bioRxiv/medRxiv, deduplicated), SEC 8-K PDUFA mentions and EMA medicines
- Build merged company profiles by name or ticker, plus trial readout calendars and at-risk trial flags
- Take snapshots and list changes since a previous run, and export RSS, JSON Feed, Markdown or HTML digests
- When to use it
- Useful when you follow specific biotech companies, drugs or disease areas and want an assistant to pull trial, regulatory, grant and filing updates from several public sources into one place, or to report what changed since the last check.
- Requirements
- Runs locally over stdio, typically via uvx or pip from the PyPI package biocatalystfeed, so Python is needed. BIOCATALYSTFEED_DB sets the SQLite snapshot path. Optional keys and contacts: OPENFDA_API_KEY, NCBI_API_KEY, NCBI_EMAIL, BIOCATALYSTFEED_CONTACT, SEC_USER_AGENT, FDAWATCH_ALIASES. Network access to the public data sources is required. A free hosted read-only endpoint also exists.
Installation
In SourceWeft
- Open BioCatalystFeed in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
BioCatalystFeed
Website: https://biocat.ai · Contact: [email protected]
An open-source catalyst feed for biotech: see what changed across clinical trials, FDA and EMA actions, NIH grants, papers/preprints and SEC filings for the companies and drugs you follow. Use it as a CLI, as an MCP server for AI agents (Claude, Cursor, …), or as an Apify actor.
⚠️ Not investment, legal or medical advice. Data may be incomplete, delayed or wrong; PDUFA dates are unverified candidates from SEC filings. Always check the linked primary source.
What it does
Optional global coverage (--global / include_global). Off by default. When you turn it on, BCF also links to records in trial registries outside the US and EU, such as China's ChiCTR and other WHO-listed national registries, and flags papers from other jurisdictions. These records may come from research run under regulatory, ethics and data standards different from, and sometimes lighter than, those of the US or EU. They are labelled "non-FDA/EMA registry". The option is for users who want to see everything that is out there. Inclusion is not an endorsement or recommendation and is not medical, legal or investment advice.
Records are links (registry ID + URL, from ClinicalTrials.gov secondary IDs); papers get jurisdiction_flag from author-affiliation countries ("unknown" when none is found). Details: bcf --global --help or docs/GLOBAL.md.
Across tools: --exclude TERM … to drop noise, --rank for relevance ordering, and --rss / --json-feed digest
files on every watch (local files you can serve or feed into any reader; nothing is emailed). Webhook alerts (0.4.1):
--webhook URL (repeatable) on every watch POSTs the changes when something changed: --webhook-format json (default;
signed with x-bcf-signature: sha256=<HMAC> when BCF_WEBHOOK_SECRET is set), slack or discord (incoming-webhook
text); --webhook-always also posts empty runs. Failures are reported on stderr and never stop the watch.
Quickstart
Global flags such as --db go after the tool name and before the subcommand: bcf trials --db bcf.db changes, not bcf --db bcf.db trials changes or bcf trials changes --db bcf.db.
bcf trials changes prints a readable one-line-per-change summary; add --json for one JSON object per line.
PubMed --since/--until filter on the publication date shown in the output (Europe PMC uses first-publication date).
The old commands (trialwatch, fdawatch, grantwatch, paperwatch, secwatch, trialwatch-mcp) still work.
MCP server
(or point command at an installed biocatalystfeed-mcp). Listed in the official MCP Registry as
io.github.biocatalystfeed/biocatalystfeed.
Tools include search_trials, sponsor_pipeline, fda_approvals, company_profile, search_grants,
search_papers, sec_pdufa_mentions, ema_medicines, fda_adcom_meetings, fda_complete_response_letters, fda_decisions (FDA decision calendar), readout_calendar (trial readout calendar), trials_at_risk, snapshot_* (incl. snapshot_fda_decisions, snapshot_readouts) / *_changes_since, and changes_feed (RSS / JSON Feed / Markdown / HTML).
Provenance on every record (0.3.6). Every record returned by every MCP tool (stdio and hosted), and by bcf readouts
/ bcf fda-decisions / bcf trials search, carries verified_as_of (UTC), source_url (the official record or API URL),
verify_hash (sha256: of the record's canonical JSON, excluding the provenance and ticker fields; re-check with
biowatch.provenance.check(record)), and, where a company is named, ticker, ticker_confidence (1.0 source-given,
0.95 alias table, 0.9 SEC exact name, 0.6 SEC name prefix, 0 none) and ticker_method.
Configuration
How it compares
Facts about DataLookout are from datalookout.com, its /citeline-alternative and /clinical-trial-monitoring pages (checked 2026-10-21 PT). We have not tested
their product. Fuller, cited comparison: docs/COMPARISON.md; three-way matrix incl. DropwatchHQ Bio Catalyst: samples/competitor_matrix.md.
Pick DataLookout for a hosted, emailed, ClinicalTrials.gov-only digest. Pick BioCatalystFeed if you want several sources per company or ticker, agent/MCP access, or to self-host.
Trial change severity (v0.3.0)
Every trial change carries severity, and date changes carry shift_days:
- critical: status moves to TERMINATED / SUSPENDED / WITHDRAWN, a why-stopped reason appears, or the primary endpoint(s) are rewritten.
- notable: other status or phase changes, new trials, lead-sponsor changes, results posted, arm or intervention changes, enrollment changes of 20% or more, start / primary completion / completion dates moved 30+ days.
- minor: everything else (small date or enrollment tweaks, site-count changes, title edits).
Filter with --min-severity notable|critical on bcf trials watch / changes, or min_severity in the MCP tool
trial_changes_since. Snapshots made by older versions start tracking the new fields on their next run, so upgrading
doesn't produce a burst of false changes.
Search filters (v0.2.1)
--excludetakes words or phrases (space- or comma-separated); matching is whole-word and case-insensitive, and a trailing*is a prefix wildcard (--exclude "murin*" rat).--rankscores title hits 3 and other-field hits 1 (simple plurals tolerated), +1 for exact multi-word phrases in the title and +2 when every query term matches; ties break by newest date. The score is inrelevance.
Data sources, limits and etiquette
Built-in throttles follow each source's published policy (e.g. NIH RePORTER 1 req/s, NCBI ≤3 req/s without key, SEC
≤10 req/s with a declared User-Agent, openFDA 1,000 req/day per IP without key). We store metadata and links only
for papers/preprints, never abstracts. Change detection only covers your own runs; there's no historical backfill.
PDUFA dates are regex extractions from company 8-K text (FDA does not publish PDUFA dates); bcf fda-decisions labels them confidence: company-disclosed with the filing link, and always read the filing. Data provided by the U.S. Food and Drug Administration (https://open.fda.gov). Source: European Medicines Agency
(EMA), https://www.ema.europa.eu. Full attributions are in NOTICE. Design notes
and per-source terms are in docs/DEVELOPER-NOTES.md.
Hosted MCP endpoint (free)
A free, read-only, rate-limited MCP endpoint (Streamable HTTP, no account) runs on Cloudflare Workers:
It offers 12 tools (search_trials, get_trial, fda_approvals, search_papers, fda_complete_response_letters,
fda_decisions, readout_calendar, trials_at_risk, fda_adcom_meetings, and the hosted-only paper_retraction_check,
condition_landscape and condition_momentum), all with provenance fields, plus a cached
public GET /calendar.json (90-day readout calendar, refreshed every 6 h; feeds biocat.ai/calendar) over ClinicalTrials.gov, openFDA, PubMed, SEC EDGAR and the Federal Register. Free tier: 200 tool calls per IP per UTC day (resets at 00:00 UTC) and 30 requests/minute. initialize and tools/list don't count. Over the limit you get HTTP 429 with JSON-RPC error -32002, Retry-After and x-daily-* headers. /calendar.json is unmetered. API keys for higher limits are planned but not yet available. Self-hosting is free and unlimited: pip install biocatalystfeed.
Retraction warning (hosted only, free): paper_retraction_check takes up to 50 PMIDs or DOIs and reports, per paper, whether it is retracted, partially retracted, under an expression of concern or corrected, with links to each notice, the first notice date and how many sources agree (PubMed, Crossref including Retraction Watch records, OpenAlex). An OpenAlex-only signal is shown as possible_retraction with no warning. none_found means no notice was found, not that a paper is sound. One call counts as one tool call toward the free daily limit. Informational only; not medical or investment advice. Data: PubMed/MEDLINE (U.S. National Library of Medicine), Crossref metadata including the Retraction Watch Database (The Center for Scientific Integrity, openly available via Crossref), OpenAlex (CC0). This tool is not part of the source-available package.
Landscape reports (hosted only, free): condition_landscape lists every sponsor with active trials in a condition, by phase (with ticker matching), the phase distribution, new-entrant sponsors, newly posted trials, upcoming primary completions and recently stopped trials; condition_momentum compares up to 8 disease areas by new trials, active Phase 3 and stops (documented formula). ClinicalTrials.gov registry counts only; not a forecast and not investment advice. Not part of the source-available package.
Watches, change history and the other sources need the local install above. No request logs are kept; see
TERMS.md and PRIVACY.md. Source: worker/.
Contributing / Testing
Contributing & licence
See CONTRIBUTING.md, CODE_OF_CONDUCT.md and SECURITY.md (report vulnerabilities privately). Licence: version 0.4.0 and later is under the Business Source License 1.1. You can use, modify and self-host it for any purpose, including commercial internal use, but you cannot offer it to others as a competing catalyst, trial, FDA data, alert, API or MCP service. Each version becomes Apache-2.0 twelve months after its release. Versions 0.3.6 and earlier stay Apache-2.0. See NOTICE. For commercial licensing, contact [email protected]. BioCatalystFeed is
independent and not endorsed by NLM, NIH, FDA, SEC, EMA, the Office of the Federal Register, EMBL-EBI/Europe PMC, or bioRxiv/medRxiv.
Source: README.md at commit 45e94a8
Tools
0Version history
3- v0.4.0LatestOct 29, 2026
- v0.3.1Oct 21, 2026
- v0.2.2Oct 14, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.