关于 tooluniverse-small-molecule-discovery
面向药物发现研究者的小分子检索与评估技能,覆盖化合物身份、结构、生物活性、ADMET 性质和商业来源。它通过 PubChem、ChEMBL 等数据工具构建从名称或结构到活性与采购线索的检索流程。
主要功能
- 01解析化合物名称、CID 与 SMILES
- 02按结构相似性或子结构搜索
- 03检索靶点与结合活性
- 04预测理化性质和 ADMET
- 05搜索商业供应与化合物库
适用场景
- 01查找指定化合物的结构和标识符
- 02筛选某靶点的活性化合物
- 03评估分子的 ADMET 属性
- 04查询化合物是否可商业获取
MCP 相关
该技能组织对 PubChem、ChEMBL、SwissADME、ADMET-AI、eMolecules 和 Enamine 等 ToolUniverse 工具的调用,以检索化合物信息、活性、性质和供应线索。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mims-harvard/ tooluniverse --skill tooluniverse-small-molecule-discovery安装后在 Claude Code 中输入/tooluniverse-small-molecule-discovery确认已加载。
详细介绍
小分子发现技能
使用 PubChem、ChEMBL、BindingDB、ADMET-AI、SwissADME、eMolecules 和 Enamine,系统地识别、表征和采购小分子。涵盖从化合物名称到结构、活性、ADMET 属性和商业采购的完整流程。
领域推理
药物相似性并非二元属性。Lipinski 五规则源自口服给药且通过被动吸收的药物,并有许多广为人知的例外:天然产物、大环化合物、PROTAC 和许多已获批药物都违反了一条或多条规则。相关的问题不是“该化合物是否符合 Ro5?”,而是“该化合物的理化性质是否符合靶点、预期给药途径和治疗背景的要求?”应关注具体需求,而非僵化规则。
查询,不要猜测
- 化合物身份(CID、ChEMBL ID、SMILES):调用
PubChem_get_CID_by_compound_name和ChEMBL_search_molecules;不要凭记忆推断 ID。 - ADMET 属性:对实际 SMILES 运行
SwissADME_calculate_adme或ADMETAI_predict_*;不要估算 logP、TPSA 或生物利用度。 - 对靶点的结合亲和力:查询
ChEMBL_search_activities或BindingDB_get_ligands_by_uniprot;切勿凭记忆引用 IC50 值。 - 商业可购性:检查
eMolecules_search或Enamine_search_catalog;不要假定有货。
核心原则:
- 先确认身份——研究前务必获取 CID 和 ChEMBL ID
- 预测属性需要 SMILES——尽早从 PubChem 提取规范 SMILES
- 工具中使用英文名称——使用 IUPAC 名称或常见英文名称;在工具调用中避免使用缩写
- BindingDB 经常无法使用——如果 BindingDB 超时,则改用 ChEMBL 活性数据
- eMolecules/Enamine 返回 URL——这些工具会生成搜索 URL,而非直接返回数据;请向用户说明这一点
计算,不要描述
当分析需要计算(统计、数据处理、评分、富集分析)时,通过 Bash 编写并运行 Python 代码。不要只描述准备如何操作——应实际执行并报告真实结果。使用 ToolUniverse 工具检索数据,再通过 Python(pandas、scipy、statsmodels、matplotlib)进行分析。
适用场景
- “查找化合物 X 的信息”
- “这个 SMILES 的药物相似性如何?”
- “列出 EGFR 抑制剂的结合亲和力”
- “搜索与 imatinib 相似的化合物”
- “该化合物是否可以商业购买?”
- “这个分子的 ADMET 属性是什么?”
- “查找靶点 Y 的 ChEMBL 活性数据”
- “预测这个小分子的靶点”
关键工具
| 工具 | 用途 | 关键参数 |
|---|---|---|
PubChem_get_CID_by_compound_name | 根据名称查询 CID | compound_name |
PubChem_get_CID_by_SMILES | 根据 SMILES 查询 CID | smiles |
PubChem_get_compound_properties_by_CID | 分子量、分子式、SMILES、InChIKey | cid、properties |
PubChem_search_compounds_by_similarity | 查找结构相似的化合物 | smiles、threshold(0-100) |
PubChem_search_compounds_by_substructure | 子结构搜索 | smiles |
PubChem_get_compound_synonyms_by_CID | 所有名称/同义词 | cid |
ChEMBL_search_molecules | 按名称或 ID 搜索 ChEMBL | query |
ChEMBL_get_molecule | 完整的 ChEMBL 分子记录 | chembl_id |
ChEMBL_search_similar_molecules | 在 ChEMBL 中搜索相似分子 | query(SMILES 或 ChEMBL ID) |
ChEMBL_search_activities | 结合亲和力和测定数据 | molecule_chembl_id、target_chembl_id、pchembl_value__gte |
ChEMBL_get_drug_mechanisms | 已获批药物的作用机制(MOA) | drug_chembl_id 或 drug_name |
ChEMBL_search_targets | 按名称查找靶点 | query、organism |
ChEMBL_get_target_activities | 某个靶点的所有配体 | target_chembl_id |
SwissADME_calculate_adme | 理化性质和 ADMET 属性 | operation="calculate_adme"、smiles |
SwissADME_check_druglikeness | Lipinski、Veber、Egan 规则 | operation="check_druglikeness"、smiles |
ADMETAI_predict_physicochemical_properties | 分子量、logP、TPSA、HBD/HBA | smiles(列表) |
ADMETAI_predict_bioavailability | 口服生物利用度预测 | smiles(列表) |
ADMETAI_predict_BBB_penetrance | 血脑屏障渗透性 | smiles(列表) |
ADMETAI_predict_toxicity | hERG、DILI、致突变性 | smiles(列表) |
ADMETAI_predict_CYP_interactions | CYP450 抑制/底物 | smiles(列表) |
SwissTargetPrediction_predict | 预测化合物的蛋白质靶点 | operation="predict"、smiles |
eMolecules_search | 查找市售化合物 | query(名称或关键词) |
eMolecules_search_smiles | 基于结构搜索市售化合物 | smiles |
eMolecules_get_vendors | 查找特定化合物的供应商 | compound_id |
Enamine_search_catalog | 搜索 Enamine 筛选库 | query |
Enamine_search_smiles | 按结构搜索 Enamine | smiles |
Enamine_get_libraries | 列出 Enamine 化合物库 | (无需参数) |
工作流
阶段 1:化合物识别
# Step 1: Name -> CID (PubChem canonical identity)
PubChem_get_CID_by_compound_name(compound_name="imatinib")
# -> CID: 5291
# Step 2: Get SMILES and properties (needed for all downstream tools)
PubChem_get_compound_properties_by_CID(
cid="5291",
properties="MolecularFormula,MolecularWeight,CanonicalSMILES,InChIKey,IUPACName"
)
# -> canonical SMILES, InChIKey (global identifier)
# Step 3: Get ChEMBL ID (for activity data)
ChEMBL_search_molecules(query="imatinib")
# -> ChEMBL ID (e.g., "CHEMBL941")
# Step 4: Get all synonyms (brand names, INN, etc.)
PubChem_get_compound_synonyms_by_CID(cid="5291")
ID 解析优先级:
- 从 PubChem CID 开始(通用性最高)
- 获取 ChEMBL ID(用于生物活性数据)
- 使用规范 SMILES 进行基于结构的搜索和 ADMET 分析
阶段 2:基于结构的搜索
相似性搜索(查找类似物):
PubChem_search_compounds_by_similarity(
smiles="CANONICAL_SMILES",
threshold=85 # Tanimoto threshold 0-100; 85 = highly similar
)
# Returns: list of CIDs of similar compounds
ChEMBL_search_similar_molecules(query="CHEMBL941") # Or SMILES
# Returns: ChEMBL entries sorted by similarity
子结构搜索(查找包含某个骨架的化合物):
PubChem_search_compounds_by_substructure(smiles="SCAFFOLD_SMILES")
# Returns: CIDs of compounds containing the scaffold
阶段 3:生物活性和结合亲和力
获取某个化合物的所有活性数据(涉及所有靶点):
ChEMBL_search_activities(
molecule_chembl_id="CHEMBL941",
pchembl_value__gte=6, # pIC50/Ki >= 6 = IC50/Ki <= 1 µM
limit=50
)
# Returns: assay_type, target_name, pchembl_value, units
获取某个靶点的所有配体:
# First find target ChEMBL ID
ChEMBL_search_targets(query="EGFR", organism="Homo sapiens")
# -> target_chembl_id, e.g., "CHEMBL203"
ChEMBL_get_target_activities(
target_chembl_id="CHEMBL203"
)
# Returns: all compounds with binding data against this target
BindingDB(如可用——经常超时):
BindingDB_get_ligands_by_uniprot(uniprot_id="P00533") # EGFR
# Returns: Ki, IC50, Kd data with literature references
# Note: BindingDB REST API is frequently unavailable; fall back to ChEMBL
pChEMBL 值解读:
| pChEMBL | IC50 / Ki | 亲和力 |
|---|---|---|
| >= 9 | <= 1 nM | 极强 |
| >= 7 | <= 100 nM | 强 |
| >= 6 | <= 1 µM | 中等 |
| >= 5 | <= 10 µM | 弱 |
| < 5 | > 10 µM | 无活性 |
阶段 4:类药性和 ADMET
SwissADME(全面分析,需要 SMILES 字符串,而非列表):
SwissADME_calculate_adme(
operation="calculate_adme",
smiles="CANONICAL_SMILES"
)
# Returns: physicochemical, lipophilicity, water solubility, pharmacokinetics,
# drug-likeness scores (Lipinski, Veber, Egan, Muegge), PAINS alerts
SwissADME_check_druglikeness(
operation="check_druglikeness",
smiles="CANONICAL_SMILES"
)
# Returns: Lipinski/Veber/Egan pass/fail + lead-likeness
ADMET-AI(基于机器学习,需要将 SMILES 作为列表传入——安装 tooluniverse[ml]):
ADMETAI_predict_physicochemical_properties(smiles=["CANONICAL_SMILES"])
ADMETAI_predict_bioavailability(smiles=["CANONICAL_SMILES"])
ADMETAI_predict_BBB_penetrance(smiles=["CANONICAL_SMILES"])
ADMETAI_predict_toxicity(smiles=["CANONICAL_SMILES"])
ADMETAI_predict_CYP_interactions(smiles=["CANONICAL_SMILES"])
注意:ADMET-AI 需要 pip install tooluniverse[ml]。如果不可用,可使用 SwissADME 作为备用方案。
关键类药性规则:
- Lipinski 五规则(Ro5):MW <= 500、logP <= 5、HBD <= 5、HBA <= 10(口服药物)
- Veber 规则:TPSA <= 140 Ų、可旋转键 <= 10(口服生物利用度)
- 先导化合物样规则:MW <= 350、logP <= 3、HBD <= 3、HBA <= 6(片段/先导化合物)
阶段 5:靶点预测
当你拥有一种新型化合物并想预测其靶点时:
SwissTargetPrediction_predict(
operation="predict",
smiles="CANONICAL_SMILES"
)
# Returns: predicted protein targets with probability scores
# Note: SwissTargetPrediction uses structure-similarity to known drug-target pairs
# May time out for complex molecules
第 6 阶段:商业可用性
eMolecules(聚合了 200 多家供应商——返回搜索 URL,而非直接数据):
eMolecules_search(query="compound_name")
# -> Returns search_url to visit on eMolecules.com
eMolecules_search_smiles(smiles="CANONICAL_SMILES")
# -> Returns URL for exact/similar structure search
Enamine(超过 370 亿种按需合成化合物——API 不可用时返回 URL):
Enamine_search_catalog(query="compound_name")
# -> If API available: returns catalog entries with catalog_id, price
# -> If API unavailable: returns search_url for manual search
Enamine_search_smiles(smiles="CANONICAL_SMILES")
# -> Exact or similarity structure search
Enamine_get_libraries()
# -> Lists available Enamine screening collections
注意:eMolecules 和 Enamine API 经常返回搜索 URL,而不是实时数据。请将这些链接作为“在此搜索”链接提供给用户。
工具参数参考
| 工具 | 必需参数 | 说明 |
|---|---|---|
PubChem_get_CID_by_compound_name | compound_name | 返回 CID 列表;选择第一个或最相关的 CID |
PubChem_get_CID_by_SMILES | smiles | 使用规范 SMILES |
PubChem_get_compound_properties_by_CID | cid, properties | cid 为字符串;properties 为逗号分隔 |
PubChem_search_compounds_by_similarity | smiles | threshold(整数,0-100,默认值为 90) |
PubChem_search_compounds_by_substructure | smiles | 返回与骨架匹配的 CID |
ChEMBL_search_molecules | query | 名称、ChEMBL ID 或 InChIKey |
ChEMBL_get_molecule | chembl_id | 完整格式为 "CHEMBL941",而非 "941" |
ChEMBL_search_similar_molecules | query | SMILES 或 ChEMBL ID |
ChEMBL_search_activities | molecule_chembl_id OR target_chembl_id | 使用 pchembl_value__gte=6 筛选效力较强的化合物 |
ChEMBL_get_drug_mechanisms | drug_chembl_id or drug_name | 仅适用于已获批药物 |
ChEMBL_search_targets | query | 添加 organism="Homo sapiens" 以筛选人类靶点 |
ChEMBL_get_target_activities | target_chembl_id | 返回该靶点的所有配体 |
SwissADME_calculate_adme | operation="calculate_adme", smiles | SMILES 为字符串(不是列表) |
SwissADME_check_druglikeness | operation="check_druglikeness", smiles | SMILES 为字符串 |
ADMETAI_predict_* | smiles | 必须是列表:["SMILES"],而不是 "SMILES" |
SwissTargetPrediction_predict | operation="predict", smiles | 可能超时 |
eMolecules_search | query | 返回搜索 URL(无实时数据) |
eMolecules_search_smiles | smiles | 规范 SMILES |
eMolecules_get_vendors | compound_id | eMolecules 内部 ID |
Enamine_search_catalog | query | API 不可用时返回 URL |
Enamine_search_smiles | smiles | search_type:"exact"、"similarity"、"substructure" |
Enamine_get_compound | enamine_id | Enamine 专用目录 ID |
BindingDB_get_ligands_by_uniprot | uniprot_id | 经常不可用——请使用 ChEMBL 作为备用方案 |
BindingDB_get_targets_by_compound | smiles | 基于 SMILES 查询靶点 |
常见模式
模式 1:完整化合物档案
Input: Compound name (e.g., "imatinib")
Flow:
1. PubChem_get_CID_by_compound_name -> CID + SMILES
2. ChEMBL_search_molecules -> ChEMBL ID
3. PubChem_get_compound_properties_by_CID -> physicochemical props
4. SwissADME_calculate_adme / ADMETAI_predict_* -> ADMET profile
5. ChEMBL_search_activities(molecule_chembl_id) -> binding data
6. ChEMBL_get_drug_mechanisms -> MOA (if approved drug)
Output: Complete compound profile with identity, ADMET, and activity data
模式 2:类似物发现
Input: Reference compound SMILES
Flow:
1. PubChem_search_compounds_by_similarity(smiles, threshold=85) -> similar CIDs
2. ChEMBL_search_similar_molecules(query=smiles) -> ChEMBL analogs
3. For each hit: PubChem_get_compound_properties_by_CID -> properties
4. SwissADME_check_druglikeness -> filter by drug-likeness
Output: Ranked list of analogs with activity data and drug-likeness scores
模式 3:基于靶点的化合物搜索
Input: Target name (e.g., "EGFR")
Flow:
1. ChEMBL_search_targets(query="EGFR", organism="Homo sapiens") -> target_chembl_id
2. ChEMBL_get_target_activities(target_chembl_id) -> all ligands with Ki/IC50
3. Filter by pchembl_value >= 7 (potent compounds)
4. For top hits: SwissADME_check_druglikeness -> assess drug-likeness
5. eMolecules_search(query=compound_name) -> check commercial availability
Output: Prioritized list of potent, drug-like, commercially available compounds
模式 4:ADMET 风险评估
Input: Novel compound SMILES
Flow:
1. SwissADME_calculate_adme(operation="calculate_adme", smiles) -> full ADMET
2. ADMETAI_predict_toxicity(smiles=[smiles]) -> hERG, DILI, mutagenicity
3. ADMETAI_predict_CYP_interactions(smiles=[smiles]) -> drug-drug interaction risk
4. ADMETAI_predict_BBB_penetrance(smiles=[smiles]) -> CNS penetration
Output: ADMET risk profile with flagged liabilities
备用方案链
| 首选方案 | 备用方案 | 适用情况 |
|---|---|---|
BindingDB_get_ligands_by_uniprot | ChEMBL_get_target_activities | BindingDB API 不可用 |
ADMETAI_predict_* | SwissADME_calculate_adme | 未安装 ml 依赖项 |
Enamine_search_catalog | 仅返回 URL | API 返回 HTTP 500(常见情况) |
SwissTargetPrediction_predict | ChEMBL_search_similar_molecules + 已知靶点 | 预测超时 |
PubChem_get_CID_by_compound_name | ChEMBL_search_molecules(query=name) | PubChem 中没有该名称 |
限制
- BindingDB:REST API 经常超时;ChEMBL 是获取结合数据的可靠替代方案
- Enamine API:经常返回 HTTP 500;工具会提供搜索 URL 作为备用方案
- eMolecules:没有公共 API;工具仅生成搜索 URL
- ADMET-AI:需要
pip install tooluniverse[ml];基础安装中不一定可用 - SwissTargetPrediction:基于网页抓取;处理复杂分子时可能超时
- SMILES 格式:ADMET-AI 要求使用列表
["SMILES"];SwissADME 要求使用字符串"SMILES" - ChEMBL ID:始终使用完整格式
"CHEMBL941",切勿只写"941"