Files

984 lines
29 KiB
Markdown

---
title: "Tools Reference for Small Molecule Binder Discovery"
task: ""
lineage_type: import
upstream_source: https://github.com/mims-harvard/ToolUniverse/blob/e2520a96/skills/tooluniverse-binder-discovery/TOOLS_REFERENCE.md
upstream_sha: e2520a96
imported_at: 2026-06-26
prompt_class: prompt
upstream_changes: accepted
author: upstream
validated: false
---
# Tools Reference for Small Molecule Binder Discovery
Complete tool reference with verified parameters and fallback chains.
## Phase 1: Target Validation Tools
### UniProt_search
**Purpose**: Resolve protein name to UniProt accession
```python
result = tu.tools.UniProt_search(
query="EGFR human",
organism="human",
limit=10
)
# Returns: list of UniProt entries with accession, protein name, gene name
```
### MyGene_query_genes
**Purpose**: Get Ensembl and NCBI gene IDs
```python
result = tu.tools.MyGene_query_genes(
q="EGFR",
species="human",
fields="ensembl.gene,symbol,name"
)
# Returns: gene info with ensembl.gene, symbol, name
```
### ChEMBL_search_targets
**Purpose**: Get ChEMBL target ID
```python
result = tu.tools.ChEMBL_search_targets(
query="EGFR",
organism="Homo sapiens",
limit=10
)
# Returns: targets with target_chembl_id, pref_name, target_type
```
### OpenTargets_get_target_tractability_by_ensemblID
**Purpose**: Assess small molecule tractability
```python
result = tu.tools.OpenTargets_get_target_tractability_by_ensemblID(
ensemblId="ENSG00000146648" # Note: camelCase
)
# Returns: tractability assessments by modality (small molecule, antibody, etc.)
```
**⚠️ Parameter**: Use `ensemblId` (camelCase), NOT `ensembl_id`
### DGIdb_get_gene_druggability
**Purpose**: Get druggability categories
```python
result = tu.tools.DGIdb_get_gene_druggability(
genes=["EGFR"] # List of gene symbols
)
# Returns: druggability info, drug count, categories
```
### ChEMBL_search_binding_sites
**Purpose**: Find known binding sites
```python
result = tu.tools.ChEMBL_search_binding_sites(
target_chembl_id="CHEMBL203"
)
# Returns: binding site names, types
```
### InterPro_get_protein_domains
**Purpose**: Get domain architecture
```python
result = tu.tools.InterPro_get_protein_domains(
accession="P00533" # UniProt accession
)
# Returns: domains, families, sites with positions
```
---
## Thera-SAbDab Tools (NEW - Therapeutic Antibody Landscape)
Check therapeutic antibody competition for your target.
### TheraSAbDab_search_by_target
**Purpose**: Find antibodies targeting specific antigen
```python
result = tu.tools.TheraSAbDab_search_by_target(
target="PD-1" # Target antigen name
)
# Returns: list of therapeutic antibodies, phase, format, PDB IDs
```
### TheraSAbDab_search_therapeutics
**Purpose**: Search antibodies by name or keyword
```python
result = tu.tools.TheraSAbDab_search_therapeutics(
query="pembrolizumab" # Antibody name or target
)
# Returns: matching therapeutics with target, phase, format
```
### TheraSAbDab_get_all_therapeutics
**Purpose**: Get summary of all therapeutic antibodies
```python
result = tu.tools.TheraSAbDab_get_all_therapeutics()
# Returns: total count, distribution by phase, distribution by format
```
**Why Use Thera-SAbDab**:
- **Competitive intelligence**: See what antibodies already target your protein
- **Target validation**: Approved antibodies = validated target
- **Structural data**: Links to PDB structures of antibody-target complexes
- **Strategic differentiation**: Identify where small molecules offer advantages
**Example Competitive Analysis**:
```python
def assess_antibody_competition(tu, target_name):
"""Assess therapeutic antibody competitive landscape."""
# Search by target
results = tu.tools.TheraSAbDab_search_by_target(target=target_name)
if results.get('status') == 'success':
antibodies = results['data'].get('therapeutics', [])
# Count by phase
phases = {}
for ab in antibodies:
phase = ab.get('phase', 'Unknown')
phases[phase] = phases.get(phase, 0) + 1
return {
'total': len(antibodies),
'by_phase': phases,
'has_approved': 'Approved' in phases,
'top_antibodies': antibodies[:5]
}
return None
```
---
## GPCRdb Tools (for GPCR Targets)
~35% of approved drugs target GPCRs. Use GPCRdb for specialized GPCR data.
### GPCRdb_get_protein
**Purpose**: Get GPCR protein information
```python
result = tu.tools.GPCRdb_get_protein(
operation="get_protein",
protein="adrb2_human" # Entry name format: {gene}_human
)
# Returns: GPCR family, class, species, sequence info
```
### GPCRdb_list_proteins
**Purpose**: List GPCR families or proteins in a family
```python
# List all GPCR families
families = tu.tools.GPCRdb_list_proteins(
operation="list_proteins"
)
# List proteins in specific family
proteins = tu.tools.GPCRdb_list_proteins(
operation="list_proteins",
family="001" # Class A
)
```
### GPCRdb_get_structures
**Purpose**: Get GPCR structures with receptor state (active/inactive)
```python
result = tu.tools.GPCRdb_get_structures(
operation="get_structures",
protein="adrb2_human",
state="active" # Optional: "active", "inactive", "intermediate"
)
# Returns: PDB IDs with receptor state, resolution, ligand info
```
### GPCRdb_get_ligands
**Purpose**: Get known GPCR ligands
```python
result = tu.tools.GPCRdb_get_ligands(
operation="get_ligands",
protein="adrb2_human"
)
# Returns: Ligands with binding affinity, type (agonist/antagonist)
```
### GPCRdb_get_mutations
**Purpose**: Get experimental mutation data for GPCR
```python
result = tu.tools.GPCRdb_get_mutations(
operation="get_mutations",
protein="adrb2_human"
)
# Returns: Mutations with effect on ligand binding/signaling
```
**Why GPCRdb is Essential for GPCR Binder Discovery**:
- **Receptor state structures**: Active vs. inactive conformations
- **Ballesteros-Weinstein numbering**: Standard residue numbering across GPCRs
- **Curated ligand data**: Agonists, antagonists, allosteric modulators
- **Mutation effects**: Direct effects on ligand binding
---
## Phase 1.4: Structure Prediction (NVIDIA NIM)
**Requires**: `NVIDIA_API_KEY` environment variable
### NvidiaNIM_alphafold2
**Purpose**: High-accuracy structure prediction with pLDDT confidence scores
```python
result = tu.tools.NvidiaNIM_alphafold2(
sequence="MRPSGTAGAALLALL...", # Protein sequence
algorithm="mmseqs2", # MSA algorithm: "mmseqs2" or "jackhmmer"
relax_prediction=False # Optional: Run relaxation
)
# Returns: PDB structure string with pLDDT scores per residue
# pLDDT interpretation:
# ≥90: Very high confidence
# 70-90: Confident
# 50-70: Low confidence
# <50: Very low confidence
```
**⚠️ Note**: Async operation, may take 5-15 minutes. Max sequence length ~2000 AA.
### NvidiaNIM_esmfold
**Purpose**: Fast structure prediction (synchronous)
```python
result = tu.tools.NvidiaNIM_esmfold(
sequence="MRPSGTAGAALLALL..." # Protein sequence (max 1024 AA)
)
# Returns: PDB structure string
```
**⚠️ Note**: Fast (~30 sec) but limited to 1024 residues. No MSA, slightly lower accuracy.
### NvidiaNIM_msa_search
**Purpose**: Generate multiple sequence alignment for structure prediction
```python
result = tu.tools.NvidiaNIM_msa_search(
sequence="MRPSGTAGAALLALL...",
database="uniref90" # "uniref90", "bfd", etc.
)
# Returns: MSA in A3M format
```
**Use**: Pre-generate MSA for repeated AlphaFold2 predictions.
---
## Phase 2: Known Ligand Mining Tools
### ChEMBL_get_target_activities
**Purpose**: Get all bioactivity data for target
```python
result = tu.tools.ChEMBL_get_target_activities(
target_chembl_id="CHEMBL203",
limit=500
)
# Returns: activities with molecule_chembl_id, standard_type, standard_value
```
**⚠️ Parameter**: Use `target_chembl_id`, NOT `chembl_target_id`
### ChEMBL_get_molecule
**Purpose**: Get detailed molecule information
```python
result = tu.tools.ChEMBL_get_molecule(
molecule_chembl_id="CHEMBL553"
)
# Returns: molecule data including SMILES, max_phase, properties
```
### GtoPdb_get_interactions
**Purpose**: Get pharmacological interactions
```python
result = tu.tools.GtoPdb_get_interactions(
target_id="1797" # GtoPdb target ID
)
# Returns: ligands with pKi, pIC50, action type
```
### OpenTargets_get_chemical_probes_by_target_ensemblID
**Purpose**: Find validated chemical probes
```python
result = tu.tools.OpenTargets_get_chemical_probes_by_target_ensemblID(
ensemblId="ENSG00000146648"
)
# Returns: probes with ratings, use recommendations
```
### OpenTargets_get_associated_drugs_by_target_ensemblID
**Purpose**: Get approved/clinical drugs
```python
result = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
ensemblId="ENSG00000146648"
)
# Returns: drugs with phase, mechanism of action
```
### BindingDB_get_ligands_by_uniprot (NEW)
**Purpose**: Get ligands with measured binding affinities
```python
result = tu.tools.BindingDB_get_ligands_by_uniprot(
uniprot="P00533", # UniProt accession
affinity_cutoff=10000 # Max affinity in nM
)
# Returns: SMILES, affinity_type (Ki/IC50/Kd), affinity value, PMID
```
**Advantages**: Direct affinity measurements, literature links, compounds not in ChEMBL
### BindingDB_get_ligands_by_pdb (NEW)
**Purpose**: Get ligands for a PDB structure
```python
result = tu.tools.BindingDB_get_ligands_by_pdb(
pdb_ids="1M17", # PDB ID
affinity_cutoff=10000,
sequence_identity=100
)
# Returns: ligands binding to the structure's protein
```
### BindingDB_get_targets_by_compound (NEW)
**Purpose**: Find off-targets for selectivity analysis
```python
result = tu.tools.BindingDB_get_targets_by_compound(
smiles="CC(=O)Nc1ccc(cc1)O", # Compound SMILES
similarity_cutoff=0.85
)
# Returns: other proteins binding similar compounds
```
### PubChem_search_assays_by_target_gene (NEW)
**Purpose**: Find HTS screening data for target
```python
result = tu.tools.PubChem_search_assays_by_target_gene(
gene_symbol="EGFR"
)
# Returns: list of AIDs (assay IDs) for this target
```
### PubChem_get_assay_summary (NEW)
**Purpose**: Get assay statistics
```python
result = tu.tools.PubChem_get_assay_summary(aid=504526)
# Returns: active/inactive counts, target info, assay metadata
```
### PubChem_get_assay_active_compounds (NEW)
**Purpose**: Get hits from HTS screen
```python
result = tu.tools.PubChem_get_assay_active_compounds(aid=504526)
# Returns: CIDs of active compounds
```
### PubChem_get_assay_dose_response (NEW)
**Purpose**: Get IC50/EC50 curves
```python
result = tu.tools.PubChem_get_assay_dose_response(aid=1053104)
# Returns: concentration-response data
```
### PubChem_get_compound_bioactivity (NEW)
**Purpose**: Get all bioactivity for a compound
```python
result = tu.tools.PubChem_get_compound_bioactivity(cid=2244)
# Returns: all assays, targets, activity outcomes
```
**When to Use Each Source**:
| Source | Strengths | Primary Use |
|--------|-----------|-------------|
| ChEMBL | Curated, SAR-ready | Main ligand source |
| GtoPdb | Pharmacology focus | GPCRs, channels |
| BindingDB | Direct Ki/Kd values | Affinity data |
| PubChem BioAssay | HTS screens | Novel scaffolds |
---
## Phase 3: Structure Analysis Tools
### PDB_search_similar_structures
**Purpose**: Find PDB structures by sequence
```python
result = tu.tools.PDB_search_similar_structures(
query="P00533", # UniProt or PDB ID
type="sequence" # or "structure"
)
# Returns: PDB IDs with similarity scores
```
### get_protein_metadata_by_pdb_id
**Purpose**: Get structure metadata
```python
result = tu.tools.get_protein_metadata_by_pdb_id(
pdb_id="1M17"
)
# Returns: resolution, method, deposition date, title
```
### get_binding_affinity_by_pdb_id
**Purpose**: Get co-crystallized ligand affinities
```python
result = tu.tools.get_binding_affinity_by_pdb_id(
pdb_id="1M17"
)
# Returns: ligand codes with Kd, Ki, IC50 values
```
### alphafold_get_prediction
**Purpose**: Get AlphaFold predicted structure
```python
result = tu.tools.alphafold_get_prediction(
accession="P00533" # UniProt accession
)
# Returns: structure prediction with pLDDT scores
```
**⚠️ Parameter**: Use `accession`, NOT `uniprot`
### get_ligand_smiles_by_chem_comp_id
**Purpose**: Get ligand structure from PDB
```python
result = tu.tools.get_ligand_smiles_by_chem_comp_id(
chem_comp_id="AQ4" # 3-letter ligand code from PDB
)
# Returns: SMILES, name, formula
```
### EMDB_search_structures (NEW)
**Purpose**: Search EMDB for cryo-EM structures
```python
result = tu.tools.EMDB_search_structures(
query="EGFR membrane receptor"
)
# Returns: EMDB entries with emdb_id, resolution, title
```
**When to use**: Membrane proteins (GPCRs, ion channels), large complexes, targets where conformational states matter.
### EMDB_get_structure (NEW)
**Purpose**: Get details for EMDB entry including associated PDB models
```python
result = tu.tools.EMDB_get_structure(
entry_id="EMD-12345"
)
# Returns: entry details including pdb_ids (associated atomic models)
```
**Cryo-EM vs X-ray Decision**:
| Target Type | Prefer | Reason |
|-------------|--------|--------|
| GPCR | Cryo-EM | Native membrane conformation |
| Ion channel | Cryo-EM | Multiple functional states |
| Kinase | X-ray | Higher resolution typically |
| Large complex | Cryo-EM | Better for macromolecular assembly |
---
## Phase 3.5: Docking Validation (NVIDIA NIM)
**Requires**: `NVIDIA_API_KEY` environment variable
### NvidiaNIM_diffdock
**Purpose**: Blind molecular docking (no predefined binding site needed)
```python
result = tu.tools.NvidiaNIM_diffdock(
protein=pdb_content, # PDB file content as string
ligand=ligand_sdf, # Ligand in SDF or MOL2 format
num_poses=10 # Number of poses to generate
)
# Returns: Docked poses with confidence scores
# Confidence interpretation:
# >0.9: Excellent, high-confidence pose
# 0.7-0.9: Good, reliable binding mode
# 0.5-0.7: Moderate, consider alternatives
# <0.5: Low confidence, may not bind
```
**Use**: When you have PDB structure and ligand SDF file.
### NvidiaNIM_boltz2
**Purpose**: Protein-ligand complex from sequence + SMILES
```python
result = tu.tools.NvidiaNIM_boltz2(
polymers=[{
"molecule_type": "protein",
"sequence": "MRPSGTAGAALLALL..."
}],
ligands=[{
"smiles": "COc1cc2ncnc(Nc3ccc(C#C)cc3)c2cc1OCCOC"
}],
sampling_steps=50, # Default: 50, higher = better quality
diffusion_samples=1 # Number of complex samples
)
# Returns: Protein-ligand complex structure
# Metrics: aggregate_score, pTM, ipTM
# pTM: Protein structure confidence
# ipTM: Interface prediction confidence (protein-ligand contact)
```
**Use**: When starting from SMILES only, no SDF file needed.
### Docking Method Selection
| Situation | Use | Reason |
|-----------|-----|--------|
| Have PDB + SDF file | NvidiaNIM_diffdock | Faster, validated inputs |
| Have sequence + SMILES only | NvidiaNIM_boltz2 | End-to-end prediction |
| Quick screening many compounds | NvidiaNIM_diffdock | Faster per ligand |
| Need high-confidence complex | NvidiaNIM_boltz2 | Better at interface prediction |
---
## Phase 4: Compound Expansion Tools
### ChEMBL_search_similar_molecules
**Purpose**: Similarity search in ChEMBL
```python
result = tu.tools.ChEMBL_search_similar_molecules(
molecule="CC(C)Cc1ccc(cc1)C(C)C(O)=O", # SMILES, ChEMBL ID, or name
similarity=70 # Tanimoto threshold (0-100)
)
# Returns: similar molecules with similarity score
```
**⚠️ Parameter**: Use `molecule`, NOT `smiles`
### PubChem_search_compounds_by_similarity
**Purpose**: Similarity search in PubChem
```python
result = tu.tools.PubChem_search_compounds_by_similarity(
smiles="CC(C)Cc1ccc(cc1)C(C)C(O)=O",
threshold=0.7 # Tanimoto (0-1)
)
# Returns: CIDs with similarity scores
```
### ChEMBL_search_substructure
**Purpose**: Substructure search in ChEMBL
```python
result = tu.tools.ChEMBL_search_substructure(
smiles="c1ccc2ncncc2c1" # Quinazoline core
)
# Returns: molecules containing substructure
```
### PubChem_search_compounds_by_substructure
**Purpose**: Substructure search in PubChem
```python
result = tu.tools.PubChem_search_compounds_by_substructure(
smiles="c1ccc2ncncc2c1"
)
# Returns: CIDs containing substructure
```
### STITCH_get_chemical_protein_interactions
**Purpose**: Cross-database chemical-protein links
```python
result = tu.tools.STITCH_get_chemical_protein_interactions(
identifier="EGFR",
species=9606 # Human
)
# Returns: chemicals with confidence scores
```
---
## Phase 4.4: De Novo Molecule Generation (NVIDIA NIM)
**Requires**: `NVIDIA_API_KEY` environment variable
### NvidiaNIM_genmol
**Purpose**: Scaffold hopping with masked regions
```python
result = tu.tools.NvidiaNIM_genmol(
smiles="COc1cc2ncnc(Nc3ccc([*{3-8}])c([*{1-3}])c3)c2cc1OCCCN1CCOCC1",
num_molecules=100, # Number to generate
temperature=2.0, # Diversity: 0.5=conservative, 2.0=diverse
scoring="QED" # "QED" or "logP"
)
# Returns: Generated molecules with QED/LogP scores
# Mask syntax: [*{min-max}] specifies atom count range
```
**Mask Design Guidelines**:
| Position Type | Mask Example | Typical Use |
|---------------|--------------|-------------|
| Small substituent | `[*{1-3}]` | Halogen, methyl, hydroxyl |
| Medium group | `[*{3-6}]` | Linkers, small rings |
| Solubilizing tail | `[*{5-12}]` | Morpholine, piperazine |
| Core modification | `[*{6-10}]` | Ring replacements |
**Temperature Selection**:
| Temperature | Effect | When to Use |
|-------------|--------|-------------|
| 0.5-1.0 | Conservative, close analogs | Early optimization |
| 1.5-2.0 | Balanced diversity | General exploration |
| 2.5-3.0 | High diversity, more novelty | Scaffold hopping |
### NvidiaNIM_molmim
**Purpose**: Controlled generation from reference molecule
```python
result = tu.tools.NvidiaNIM_molmim(
smi="COc1cc2ncnc(Nc3ccc(Cl)cc3)c2cc1OCCN1CCOCC1",
num_molecules=50, # Number to generate
algorithm="CMA-ES" # Optimization algorithm
)
# Returns: Optimized analogs with property scores
# Generates molecules similar to reference but with optimized properties
```
**Use**: Generate close analogs of top actives with improved properties.
### Generation Strategy
```
1. Identify seeds: Top 3-5 actives from Phase 2
↓
2. Design approach:
├─ Know specific positions to vary? → NvidiaNIM_genmol (with masks)
└─ Want general optimization? → NvidiaNIM_molmim
↓
3. Generate: 50-100 molecules per seed
↓
4. Filter: Pass to Phase 5 (ADMET)
↓
5. Dock: Score survivors in Phase 6
```
---
## Phase 5: ADMET Tools
### ADMETAI_predict_physicochemical_properties
**Purpose**: Drug-likeness assessment
```python
result = tu.tools.ADMETAI_predict_physicochemical_properties(
smiles=["CC(C)Cc1ccc(cc1)C(C)C(O)=O"] # List of SMILES
)
# Returns: MW, logP, HBD, HBA, Lipinski violations, QED, TPSA
```
**⚠️ Parameter**: `smiles` must be a LIST, even for single compound
### ADMETAI_predict_bioavailability
**Purpose**: Oral absorption prediction
```python
result = tu.tools.ADMETAI_predict_bioavailability(
smiles=["CC(C)Cc1ccc(cc1)C(C)C(O)=O"]
)
# Returns: Bioavailability_Ma, HIA_Hou, PAMPA, Caco2, Pgp_substrate
```
### ADMETAI_predict_toxicity
**Purpose**: Toxicity endpoint predictions
```python
result = tu.tools.ADMETAI_predict_toxicity(
smiles=["CC(C)Cc1ccc(cc1)C(C)C(O)=O"]
)
# Returns: AMES, hERG, DILI, ClinTox, LD50, Carcinogens
```
### ADMETAI_predict_CYP_interactions
**Purpose**: CYP enzyme interactions
```python
result = tu.tools.ADMETAI_predict_CYP_interactions(
smiles=["CC(C)Cc1ccc(cc1)C(C)C(O)=O"]
)
# Returns: CYP1A2, CYP2C9, CYP2C19, CYP2D6, CYP3A4 substrate/inhibitor
```
### ADMETAI_predict_clearance_distribution
**Purpose**: PK predictions
```python
result = tu.tools.ADMETAI_predict_clearance_distribution(
smiles=["CC(C)Cc1ccc(cc1)C(C)C(O)=O"]
)
# Returns: Clearance, Half_Life, VDss, PPB
```
### ChEMBL_search_compound_structural_alerts
**Purpose**: PAINS and toxicophore detection
```python
result = tu.tools.ChEMBL_search_compound_structural_alerts(
smiles="CC(C)Cc1ccc(cc1)C(C)C(O)=O"
)
# Returns: structural alerts, PAINS flags
```
---
## Phase 6: Candidate Docking (NVIDIA NIM)
**Requires**: `NVIDIA_API_KEY` environment variable
### Batch Docking Strategy
After ADMET filtering, dock all candidates against the target structure.
```python
# Batch docking workflow
candidates = admet_passed_compounds # From Phase 5
# Get reference score first
reference_result = tu.tools.NvidiaNIM_diffdock(
protein=pdb_content,
ligand=reference_ligand_sdf,
num_poses=10
)
reference_confidence = reference_result['best_pose_confidence']
# Dock all candidates
docking_results = []
for compound in candidates:
result = tu.tools.NvidiaNIM_diffdock(
protein=pdb_content,
ligand=compound['sdf'],
num_poses=5
)
docking_results.append({
'id': compound['id'],
'confidence': result['best_pose_confidence'],
'vs_reference': (result['best_pose_confidence'] / reference_confidence - 1) * 100
})
# Sort by confidence
ranked = sorted(docking_results, key=lambda x: x['confidence'], reverse=True)
```
### Scoring Integration
| Score Component | Weight | Source |
|-----------------|--------|--------|
| Docking confidence | 40% | NvidiaNIM_diffdock |
| ADMET score | 30% | ADMETAI_predict_* |
| Similarity to known active | 20% | ChEMBL_search_similar_molecules |
| Novelty bonus | 10% | Structural uniqueness |
---
## Phase 6.5: Literature Evidence (NEW)
### PubMed_search_articles
**Purpose**: Search published SAR studies
```python
result = tu.tools.PubMed_search_articles(
query="EGFR inhibitor SAR structure-activity",
limit=30
)
# Returns: articles with pmid, title, abstract, publication date
```
### EuropePMC_search_articles (for Preprints)
**Purpose**: Search preprints from bioRxiv, medRxiv, and other sources (latest findings, not peer-reviewed)
```python
# Search preprints using EuropePMC (bioRxiv/medRxiv don't have search APIs)
result = tu.tools.EuropePMC_search_articles(
query="EGFR small molecule discovery",
source="PPR", # PPR = Preprints only
pageSize=15
)
# If you have a DOI, get full bioRxiv metadata:
full_metadata = tu.tools.BioRxiv_get_preprint(doi="10.1101/2023.12.01.569554")
# Returns: preprints with doi, title, posted date
```
**⚠️ Note**: Preprints NOT peer-reviewed. Use for emerging compounds/methods.
### MedRxiv_get_preprint
**Purpose**: Get medRxiv preprint by DOI (for search, use EuropePMC with source='PPR')
```python
# Get preprint by DOI
result = tu.tools.MedRxiv_get_preprint(doi="10.1101/2021.04.29.21256344")
# For searching clinical preprints, use EuropePMC:
search = tu.tools.EuropePMC_search_articles(
query="EGFR inhibitor clinical trial",
source="PPR",
pageSize=10
)
# Returns: preprints with doi, title, abstract, etc.
```
### openalex_search_works
**Purpose**: Search with citation analysis
```python
result = tu.tools.openalex_search_works(
query="EGFR kinase inhibitor structure",
limit=20
)
# Returns: works with cited_by_count, publication_year
```
**Use**: Identify high-impact papers and validate compound importance.
### SemanticScholar_search_papers
**Purpose**: AI-ranked paper search
```python
result = tu.tools.SemanticScholar_search_papers(
query="EGFR small molecule binder",
limit=20
)
# Returns: papers with relevance ranking, citations
```
---
## Fallback Chains
### Target ID Resolution
```
Primary: ChEMBL_search_targets
├─ Success → Use target_chembl_id
└─ Fail → GtoPdb_search_targets (for GPCR/ion channel/enzyme)
└─ Fail → Document "Target not in databases"
```
### GPCR-Specific Data (NEW)
```
If target is GPCR:
Primary: GPCRdb_get_protein
├─ Success → Get GPCR family, class
│ ├─ GPCRdb_get_structures → Active/inactive state structures
│ ├─ GPCRdb_get_ligands → Known agonists/antagonists
│ └─ GPCRdb_get_mutations → Mutation effects on binding
└─ Fail (not in GPCRdb) → Use GtoPdb_search_targets
```
### Druggability Assessment
```
Primary: OpenTargets_get_target_tractability_by_ensemblID
├─ Success → Use tractability data
└─ Fail → DGIdb_get_gene_druggability
└─ Fail → Use target class as proxy
```
### Bioactivity Data
```
Primary: ChEMBL_get_target_activities
├─ Success → Use ChEMBL data
└─ Fail → BindingDB_get_ligands_by_uniprot (NEW)
├─ Success → Use BindingDB data
└─ Fail → GtoPdb_get_interactions
├─ Success → Use GtoPdb data
└─ Fail → PubChem_search_assays_by_target_gene (NEW)
└─ Fail → Document "No bioactivity data"
```
### Similarity Search
```
Primary: ChEMBL_search_similar_molecules
├─ Success → Process results
└─ Fail → PubChem_search_compounds_by_similarity
└─ Fail → Document "Similarity search failed"
```
### Structure Retrieval
```
Primary: get_protein_metadata_by_pdb_id (for each PDB)
├─ Success → Use experimental structure
└─ Fail (no PDB) → EMDB_search_structures (for membrane proteins)
├─ Success → Get PDB model via EMDB_get_structure
└─ Fail → NvidiaNIM_alphafold2
└─ Fail (API error) → NvidiaNIM_esmfold
└─ Fail → alphafold_get_prediction (AlphaFold DB)
└─ Fail → Document "No structural information"
```
### Literature Search (NEW)
```
Primary: PubMed_search_articles (peer-reviewed)
├─ Success → Use published literature
└─ Supplement with:
├─ EuropePMC_search_articles (source='PPR' for preprints)
└─ openalex_search_works (citation analysis)
```
### Docking
```
Primary: NvidiaNIM_diffdock (have PDB + SDF)
├─ Success → Use docking scores
└─ Fail → NvidiaNIM_boltz2 (from sequence + SMILES)
└─ Fail → Skip docking, use similarity-based scoring
```
### De Novo Generation
```
Primary: NvidiaNIM_genmol (specific position variation)
├─ Success → Process generated molecules
└─ Fail → NvidiaNIM_molmim (general analog generation)
└─ Fail → Use similarity search only (no generation)
```
### ADMET Prediction
```
Primary: ADMETAI_predict_* (all endpoints)
├─ Success → Use predictions
└─ Fail (invalid SMILES) → Skip compound, document reason
└─ Fail (API error) → Document "ADMET unavailable"
```
---
## Common Parameter Errors
| Tool | Wrong | Correct | Notes |
|------|-------|---------|-------|
| `OpenTargets_*` | `ensembl_id` | `ensemblId` | CamelCase for OpenTargets |
| `ChEMBL_get_target_activities` | `chembl_target_id` | `target_chembl_id` | Underscore style |
| `ChEMBL_search_similar_molecules` | `smiles` | `molecule` | Accepts SMILES, ID, or name |
| `alphafold_get_prediction` | `uniprot` | `accession` | Just the accession |
| `ADMETAI_*` | `smiles="..."` | `smiles=["..."]` | Must be list |
| `NvidiaNIM_alphafold2` | `seq` | `sequence` | Full parameter name |
| `NvidiaNIM_genmol` | `smiles="C..."` | `smiles="C...[*{1-3}]..."` | Must have mask regions |
| `NvidiaNIM_boltz2` | `sequence="..."` | `polymers=[{"molecule_type": "protein", "sequence": "..."}]` | Use polymers list |
---
## Batch Processing Pattern
For efficiency, batch similar operations:
```python
# Define calls
calls = [
{"name": "ChEMBL_get_molecule", "arguments": {"molecule_chembl_id": id}}
for id in chembl_ids[:50] # Batch of 50
]
# Execute in parallel
results = tu.run_batch(calls)
# Process results
for result in results:
if result and 'molecule_structures' in result:
process_molecule(result)
```
---
## Rate Limiting Awareness
| Database | Rate Limit | Recommendation |
|----------|------------|----------------|
| ChEMBL | ~10 req/sec | Batch queries when possible |
| PubChem | ~5 req/sec | Use batch endpoints |
| ADMET-AI | No strict limit | Batch SMILES in lists |
| OpenTargets | GraphQL, lenient | Single complex queries preferred |
| UniProt | ~10 req/sec | Batch search preferred |
| NVIDIA NIM | API key quota | Check quota, cache results |
### NVIDIA NIM Specific Notes
| Tool | Typical Runtime | Notes |
|------|-----------------|-------|
| `NvidiaNIM_alphafold2` | 5-15 min | Async, check status |
| `NvidiaNIM_esmfold` | ~30 sec | Fast, max 1024 AA |
| `NvidiaNIM_diffdock` | ~1-2 min | Per ligand |
| `NvidiaNIM_boltz2` | ~2-5 min | Includes structure prediction |
| `NvidiaNIM_genmol` | ~1-3 min | Depends on num_molecules |
| `NvidiaNIM_molmim` | ~1-2 min | Fast analog generation |
**API Key Check**:
```python
import os
if not os.environ.get("NVIDIA_API_KEY"):
print("Warning: NVIDIA_API_KEY not set. NvidiaNIM tools unavailable.")
# Fall back to non-NIM alternatives
```
For large expansions (>500 compounds):
1. Use batch endpoints
2. Add small delays between batches
3. Cache results for reuse
4. For docking: prioritize top 50-100 candidates only