🧬 Helix
Clinical evidence synthesis engine — free, no API key, production-grade.
Give any AI model — or any HTTP client — structured, scored access to the world's three largest free health databases. In a single call.
| 400,000+ Clinical Trials | 35M+ PubMed Papers | FDA Drug Labels | < 4s Response |
|---|---|---|---|
| ClinicalTrials.gov live | Full abstracts via efetch | openFDA drug information | All 3 databases in parallel |
See It
curl -X POST http://localhost:8000/synthesize \
-H "Content-Type: application/json" \
-d '{"condition": "T2D", "age": 45, "sex": "MALE"}'
{
"clinicalInsight": {
"condition": "Type 2 Diabetes",
"expanded_from": "T2D",
"total_trials": 16,
"top_score": 94.0,
"average_score": 77.66
},
"trialProfiles": [
{
"id": "NCT05099770",
"title": "PROACT: A Study of REACT in Subjects With Type 2 Diabetes",
"phase": ["PHASE3"],
"final_score": 94.0,
"score_vector": {
"condition_match": 1.0,
"eligibility_fit": 0.8,
"evidence_support": 1.0,
"trial_phase_maturity": 1.0
},
"risk_flags": []
}
],
"excludedTrials": [
{
"id": "NCT00000042",
"title": "Pediatric Glucose Management Study",
"exclusion_reason": "age 45 above max 18"
}
]
}
Every trial gets a score vector showing exactly why it ranked where it did.
Ineligible trials appear in excludedTrials with a precise rejection reason — they never silently disappear.
Install
pip install helix-mcp
REST API
helix-api
# → http://localhost:8000/docs
MCP Server (Claude Desktop)
Add to claude_desktop_config.json:
{
"mcpServers": {
"helix": { "command": "helix" }
}
}
Then ask Claude: "Find clinical trials for a 52-year-old female with NSCLC in London"
Docker
docker compose up
How It Works
When you call synthesize_evidence, Helix:
- Expands medical abbreviations —
T2D→Type 2 Diabetes,NSCLC→Non-Small Cell Lung Cancer(70+ mappings) - Resolves conditions to authoritative NLM MeSH terms before querying PubMed — the same vocabulary PubMed uses internally
- Queries ClinicalTrials.gov, PubMed, and openFDA concurrently
- Scores every trial using a BM25 relevance index built across the full trial corpus
- Returns ranked profiles with a four-component
score_vectorand anexplainability_vectorshowing the raw numbers behind each score
Condition input
↓
synonym expansion → MeSH resolution
↓
ClinicalTrials.gov ──┐
PubMed (MeSH query) ─┼── parallel asyncio.gather
openFDA ─────────────┘
↓
BM25 corpus scoring across all trials
↓
hard eligibility gate (age + sex)
↓
ranked profiles + excluded trials + clinical insight
Scoring Formula
final_score = 100 × (
0.35 × condition_match # BM25 relevance: condition vs trial corpus
+ 0.30 × eligibility_fit # age-window centrality (1.0=center, 0.5=edge)
+ 0.20 × evidence_support # fraction of PubMed papers supporting condition
+ 0.15 × trial_phase_maturity # Phase 3/4=1.0, Phase 2=0.6, Phase 1=0.3
)
Tools
| Tool | Description |
|---|---|
synthesize_evidence |
Full cross-database synthesis — scored, ranked, explained |
find_trials |
Search ClinicalTrials.gov with condition, location, sex, phase |
search_papers |
Search PubMed with MeSH-resolved queries, full abstracts |
lookup_drug |
FDA drug information by brand or generic name |
match_eligibility |
Match a patient profile to trials ranked by eligibility fit |
health_check |
Live latency check against all three upstream APIs |
All tools accept medical abbreviations. All tools are cached. All tools never raise.
Data Sources
| Source | Access |
|---|---|
| ClinicalTrials.gov | Free, no key |
| PubMed E-utilities | Free, email optional |
| openFDA | Free, no key |
| NLM MeSH API | Free, no key |
Development
git clone https://github.com/Al1Abdullah/Helix.git
cd Helix
pip install -e ".[dev]"
pytest
License
MIT — see LICENSE
Metadata
Release files for helix-mcp 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| helix_mcp-1.5.0.tar.gz | 29.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| helix_mcp-1.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.8 kB
Release files / helix_mcp-1.5.0.tar.gz
| Download URL | helix_mcp-1.5.0.tar.gz |
|---|---|
| Size | 29.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a0835c61063aa42b676049828900304a552d1bb7ee95c159fcdd8d7ab51b4bc1
|
|
BLAKE2b-256 checksum How to use checksums |
e4185ead7967a5d1fbaa2517eb02dcc76274e472c8e7f30a8aa92e43438f9431
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.1
|
Release files / helix_mcp-1.5.0-py3-none-any.whl
| Download URL | helix_mcp-1.5.0-py3-none-any.whl |
|---|---|
| Size | 28.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
742639b4501abe3e8ea9b7589011eb8e6a4c2b97e003c7846432105bea99aeab
|
|
BLAKE2b-256 checksum How to use checksums |
2681ddfb8732ad9ad9b1f95bc8978716749f1242074d55ebd0b0adf17b82a756
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.1
|