ToolUniverse Python SDK
SkillSearchTeaches your agent to use the ToolUniverse Python SDK to run scientific tools like protein and drug database queries.
Then ask your AI: use the ToolUniverse Python SDK skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.
About this skill
Build AI scientist systems with the ToolUniverse Python SDK for scientific research. Covers the 3 calling patterns (`tu.run` portable dict API, `tu.tools.X` function API, direct class instantiation), tool loading, batch execution, MCP server integration, and embedding-based tool search. Use for SDK
What this skill tells your AI
The instructions your AI receives, as published by mims-harvard/tooluniverse in skills/tooluniverse-sdk/SKILL.md and read by Ahel’s review.
3 calling patterns -- start with pattern 1:
tu.run({"name": ..., "arguments": ...})-- single tool call, dict API (most portable)tu.tools.ToolName(param=value)-- function API (recommended for interactive use)- Direct class instantiation -- advanced, bypasses caching/hooks
Installation
pip install tooluniverse # Standard
pip install tooluniverse[embedding] # Embedding search (GPU)
pip install tooluniverse[all] # All features
export OPENAI_API_KEY="sk-..." # Required for LLM tool search
export NCBI_API_KEY="..." # Optional
Quick Start
from tooluniverse import ToolUniverse
tu = ToolUniverse()
tu.load_tools() # REQUIRED before any tool call
# Find tools
tools = tu.run({"name": "Tool_Finder_Keyword", "arguments": {"description": "protein structure", "limit": 10}})
# Execute (dict API)
result = tu.run({"name": "UniProt_get_entry_by_accession", "arguments": {"accession": "P05067"}})
# Execute (function API)
result = tu.tools.UniProt_get_entry_by_accession(accession="P05067")
Core Patterns
Batch Execution
calls = [
{"name": "UniProt_get_entry_by_accession", "arguments": {"accession": "P05067"}},
{"name": "UniProt_get_entry_by_accession", "arguments": {"accession": "P12345"}},
]
results = tu.run_batch(calls)
Scientific Workflow
def drug_discovery_pipeline(disease_id):
tu = ToolUniverse()
tu.load_tools()
try:
targets = tu.tools.OpenTargets_get_associated_targets_by_disease_efoId(efoId=disease_id)
# ChEMBL takes ChEMBL target IDs, not the Ensembl IDs in `targets`;
# map them first (e.g. via ChEMBL_search_targets). Example IDs: EGFR, COX-2
chembl_target_ids = ["CHEMBL203", "CHEMBL230"]
compound_calls = [
{"name": "ChEMBL_search_activities",
"arguments": {"target_chembl_id": tid, "limit": 10}}
for tid in chembl_target_ids
]
compounds = tu.run_batch(compound_calls)
return {"targets": targets, "compounds": compounds}
finally:
tu.close()
Configuration
# Caching: opt in per call (use_cache is a framework option on tools.X(...),
# not an argument to ToolUniverse() or to the tool itself)
tu = ToolUniverse()
result = tu.tools.some_tool(param="value", use_cache=True)
stats = tu.get_cache_stats()
tu.clear_cache()
# Hooks (auto-summarization of large outputs)
tu = ToolUniverse(hooks_enabled=True)
# Load specific categories
tu.load_tools(categories=["proteins", "drugs"])
Critical Notes
- Always call
load_tools()before using any tools - Tool Finder returns nested structure: access via
tools['tools']afterisinstance(tools, dict)check - Tool names are case-sensitive:
UniProt_get_entry_by_accessionnotuniprot_get_... - Check required params:
tu.all_tool_dict["ToolName"]['parameter'].get('required', []) - Cache deterministic calls (ML predictions, DB queries); don't cache real-time data
Error Handling
from tooluniverse.exceptions import ToolError, ToolUnavailableError, ToolValidationError
try:
result = tu.tools.some_tool(param="value")
except ToolUnavailableError:
... # Tool service down
except ToolValidationError as e:
tool_info = tu.all_tool_dict["some_tool"]
print(f"Required: {tool_info['parameter'].get('required', [])}")
Tool Categories
| Category | Tools | Use Cases |
|---|---|---|
| Proteins | UniProt, RCSB PDB, AlphaFold | Protein analysis, structure |
| Drugs | DrugBank, ChEMBL, PubChem | Drug discovery, compounds |
| Genomics | Ensembl, NCBI Gene, gnomAD | Gene analysis, variants |
| Diseases | OpenTargets, ClinVar | Disease-target associations |
| Literature | PubMed, Europe PMC | Literature search |
| ML Models | ADMET-AI, AlphaFold | Predictions, modeling |
| Pathways | KEGG, Reactome | Pathway analysis |
Resources
- Docs: https://zitniklab.hms.harvard.edu/ToolUniverse/
- GitHub: https://github.com/mims-harvard/ToolUniverse
- See REFERENCE.md for detailed guides.
Signals
- GitHub stars
- 2k
- Forks
- 261
- Last commit
- Oct 2026
Ahel review
K1binfo
installs-packagesK1binfo
installs-packages (in REFERENCE.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
tooluniverse-sdk- Source
- github.com/mims-harvard/tooluniverse
github.com/mims-harvard/tooluniverse