Query the ChEMBL database for bioactive molecules, targets, bioactivities, and approved drugs; use this when you need to filter by physicochemical properties (e.g., MW, LogP), chemical structure (SMILES), or retrieve drug mechanism information.
64
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Evidence Insight/chembl-database/SKILL.mdchembl_webresource_client (latest available via pip/uv)Install:
uv pip install chembl_webresource_clientAdditional references (optional, if present in this repository):
references/api_reference.md (filter syntax and resource list)scripts/query_chembl.py (CLI wrapper example)from chembl_webresource_client.new_client import new_client
def main():
molecule = new_client.molecule
target = new_client.target
activity = new_client.activity
mechanism = new_client.mechanism
# 1) Search for molecules by name (case-insensitive substring match)
mols = list(molecule.filter(pref_name__icontains="aspirin")[:5])
if not mols:
raise SystemExit("No molecules found for query.")
first = mols[0]
chembl_id = first.get("molecule_chembl_id")
print("Top molecule hit:", chembl_id, "-", first.get("pref_name"))
# 2) Filter molecules by a simple property constraint (example: MW <= 500)
# Note: exact field names and operators depend on ChEMBL API schema.
druglike = list(molecule.filter(molecule_properties__mw_freebase__lte=500)[:5])
print("Example drug-like hits (MW<=500):", [m.get("molecule_chembl_id") for m in druglike])
# 3) Get target information (example: targets containing "COX")
targets = list(target.filter(pref_name__icontains="cyclooxygenase")[:5])
print("Example targets:", [(t.get("target_chembl_id"), t.get("pref_name")) for t in targets])
# 4) Query bioactivity for a molecule (IC50/Ki/EC50 etc. depend on available records)
# Here we fetch a few activity records linked to the molecule.
acts = list(activity.filter(molecule_chembl_id=chembl_id)[:5])
for a in acts:
print(
"Activity:",
a.get("activity_id"),
"type=", a.get("standard_type"),
"value=", a.get("standard_value"),
"units=", a.get("standard_units"),
"target=", a.get("target_chembl_id"),
)
# 5) Retrieve mechanism-of-action records (often used for approved drugs)
mechs = list(mechanism.filter(molecule_chembl_id=chembl_id)[:5])
for m in mechs:
print(
"Mechanism:",
"target=", m.get("target_chembl_id"),
"action=", m.get("action_type"),
"mechanism=", m.get("mechanism_of_action"),
)
if __name__ == "__main__":
main()chembl_webresource_client.new_client.new_client to access resource endpoints such as molecule, target, activity, and mechanism..filter(...) with field lookups and operators (e.g., __icontains, __lte). The exact available fields and supported operators are defined by the ChEMBL API schema; consult references/api_reference.md for the authoritative list and examples.[:5]) to limit network calls and output size.standard_type, standard_value, and standard_units. Not all records contain all fields; code should handle missing keys.mechanism resource and is typically most complete for approved/annotated drugs.references/api_reference.md.63c61d3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.