Clinical Trial Search Skill
name: clinical-trial-search
by bombert · published 2026-04-01
$ claw add gh:bombert/bombert-clinical-trail---
name: clinical-trial-search
description: "Search clinical trial databases similar to ClinicalTrials.gov. Use this skill whenever the user asks about clinical trials, drug trials, indications, targets, drug names, trial phases, NCT IDs, enrollment, or recruitment. Automatically parses natural language questions into structured query parameters and calls the backend API to return matching trial records. Trigger words include: clinical trial, NCT, drug development, indication, target, phase, enrollment, recruitment, sponsor, cohort, arm, endpoint, efficacy, safety data."
---
# Clinical Trial Search Skill
This skill converts natural language questions into structured API queries against a clinical trial database, then presents the results in a readable format.
Workflow
1. **Parse user intent** — Extract key entities from the user's question
2. **Build query parameters** — Map entities to the `ClinicalTrialSearchData` schema
3. **Execute the query** — Run `scripts/search.py`
4. **Present results** — Format and display trials to the user
Step 1: Extract Keywords
Identify the following entity types from the user's question:
| Field | Type | Description | Example |
|-------|------|-----------------------------------|-----------------------------------------------------------|
| `nctid` | `List[str]` | NCT identifier(s) | `["NCT04280783"]` |
| `acronym` | `List[str]` | Trial acronym(s) | `["KEYNOTE-590"]` |
| `company` | `List[str]` | Sponsor company name(s) | `["Pfizer", "Roche"]` |
| `indication` | `List[str]` | Disease / indication | `["lung cancer", "NSCLC"]` |
| `phase` | `List[str]` | Trial phase(s) | `["Phase 1", "Phase 3"]` |
| `target` | `dict` | Biological target(s) | `{"logic": "or", "data": ["PD-1", "VEGF"]}` |
| `drug_name` | `dict` | Drug name(s) | `{"logic": "or", "data": ["pembrolizumab"]}` |
| `drug_modality` | `dict` | Drug modality / type | `{"logic": "or", "data": ["antibody", "small molecule"]}` |
| `drug_feature` | `dict` | Drug feature(s) | `{"logic": "or", "data": ["bispecific"]}` |
| `location` | `dict` | Trial location(s) | `{"logic": "or", "data": ["China", "USA"]}` |
| `route_of_administration` | `dict` | Route of administration | `{"logic": "or", "data": ["IV", "oral"]}` |
| `has_result_summary` | `bool` | Only trials with result summaries | `true` |
| `official_data` | `bool` | Only official data sources | `false` |
| `page_num` | `int` | Page index (0-based) | `0` |
| `page_size` | `int` | Results per page (1–10) | `10` |
**Dict field format:**
{"logic": "or", "data": ["value1", "value2"]}**Type rules:**
Step 2: Execute the Query
python scripts/search.py --params '<JSON string>'Or using a parameter file:
python scripts/search.py --params-file /tmp/query.jsonAdd `--raw` to receive the unformatted JSON response.
Step 3: Interpret Results
The response contains:
If results exceed 100, prompt the user to narrow the query. If no results are returned, suggest relaxing one or more filters.
Conversion Examples
**User:** "Find Phase 3 trials of PD-1 antibodies in lung cancer that have results"
**Parameters:**
{
"target": {"logic": "or", "data": ["PD-1"]},
"drug_modality": {"logic": "or", "data": ["antibody"]},
"indication": ["lung cancer"],
"phase": ["Phase 3"],
"has_result_summary": true,
"page_num": 0,
"page_size": 10
}---
**User:** "Look up NCT04280783"
**Parameters:**
{
"nctid": ["NCT04280783"],
"page_num": 0,
"page_size": 1
}---
**User:** "Roche bispecific antibody trials in China"
**Parameters:**
{
"company": ["Roche"],
"location": {"logic": "or", "data": ["China"]},
"drug_feature": {"logic": "or", "data": ["bispecific"]},
"page_num": 0,
"page_size": 10
}---
**User:** "Oral small molecule KRAS G12C inhibitors in colorectal cancer"
**Parameters:**
{
"target": {"logic": "or", "data": ["KRAS G12C"]},
"drug_modality": {"logic": "or", "data": ["small molecule"]},
"route_of_administration": {"logic": "or", "data": ["oral"]},
"indication": ["colorectal cancer"],
"page_num": 0,
"page_size": 10
}Dependencies
- Register for a free account at [noah.bio](https://noah.bio) to obtain your API key.
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...