
Tooluniverse Systems Biology
- 372 installs
- 1.6k repo stars
- Updated August 4, 2026
- mims-harvard/tooluniverse
tooluniverse-systems-biology is a Harvard ToolUniverse agent skill that runs multi-database pathway enrichment, protein-pathway mapping, and systems-level interpretation across Reactome, KEGG, WikiPathways, and Enrichr f
About
tooluniverse-systems-biology is a mims-harvard/ToolUniverse agent skill for comprehensive pathway and systems biology analysis across curated databases including Reactome, KEGG, WikiPathways, BioCarta, NCI-Nature, Pathway Commons, BioModels, and Enrichr. The skill guides a 4-phase workflow: pathway enrichment (ReactomeAnalysis_pathway_enrichment, enrichr_gene_enrichment_analysis), protein-pathway mapping (Reactome_map_uniprot_to_pathways), keyword-based pathway search (PathwayCommons_search, BioModels lookup), and top-level pathway catalog reporting. Developers reach for tooluniverse-systems-biology when interpreting RNA-seq, proteomics, or CRISPR screen gene lists, validating findings across multiple pathway sources, or discovering SBML computational models. Install with npx skills add mims-harvard/tooluniverse --skill tooluniverse-systems-biology. The skill emphasizes cross-database validation because pathway membership disagrees across sources.
- Network construction and QC
- Pathway enrichment analysis
- Centrality and module detection
- Cross-omics layer integration
- Perturbation impact scoring
Tooluniverse Systems Biology by the numbers
- 372 all-time installs (skills.sh)
- +7 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #526 of 2,064 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-systems-biologyAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 372 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | August 4, 2026 |
| Repository | mims-harvard/tooluniverse ↗ |
How do you run multi-database pathway enrichment on genes?
Model pathways, protein interaction networks, and regulatory circuits; perform enrichment, centrality, and perturbation simulations across multi-omics layers.
Who is it for?
Bioinformatics developers and computational biologists who need agent-driven Reactome, KEGG, and Enrichr enrichment with cross-database validation.
Skip if: General software developers without gene lists or pathway analysis needs, or teams requiring clinical variant interpretation instead of systems biology.
When should I use this skill?
User asks for pathway enrichment, protein-pathway mapping, systems biology analysis, or multi-database concordance on a gene or protein list.
What you get
Pathway enrichment tables, protein-pathway maps, keyword search results, and markdown systems biology report with pathway IDs.
- pathway enrichment report
- protein-pathway map
- markdown analysis summary
By the numbers
- 4-phase analysis workflow: enrichment, protein mapping, keyword search, pathway catalog
- Integrates 8 curated pathway databases including Reactome, KEGG, and Enrichr
- Recommends cross-validating key findings across at least two pathway sources
Files
Systems Biology & Pathway Analysis
Comprehensive pathway and systems biology analysis integrating multiple curated databases to provide multi-dimensional view of biological systems, pathway enrichment, and protein-pathway relationships.
When to Use This Skill
Triggers:
- "Analyze pathways for this gene list"
- "What pathways is [protein] involved in?"
- "Find pathways related to [keyword/process]"
- "Perform pathway enrichment analysis"
- "Map proteins to biological pathways"
- "Find computational models for [process]"
- "Systems biology analysis of [genes/proteins]"
Use Cases: 1. Gene Set Analysis: Identify enriched pathways from RNA-seq, proteomics, or screen results 2. Protein Function: Discover pathways and processes a protein participates in 3. Pathway Discovery: Find pathways related to diseases, processes, or phenotypes 4. Systems Integration: Connect genes → pathways → processes → diseases 5. Model Discovery: Find computational systems biology models (SBML) 6. Cross-Database Validation: Compare pathway annotations across multiple sources
COMPUTE, DON'T DESCRIBE
When analysis requires computation (statistics, data processing, scoring, enrichment), write and run Python code via Bash. Don't describe what you would do — execute it and report actual results. Use ToolUniverse tools to retrieve data, then Python (pandas, scipy, statsmodels, matplotlib) to analyze it.
Domain Reasoning: Enrichment vs Causation
Pathway analysis answers: which biological processes are enriched in my gene list? But enrichment is not causation. A pathway being enriched means your gene list overlaps it more than expected by chance. Ask: is the enrichment driven by a few hub genes, or by many genes distributed across the pathway? A pathway with 3 input genes but 200 annotated members is less informative than one where 15 of 40 members are in your list.
LOOK UP DON'T GUESS: pathway membership, gene-to-pathway assignments, and enrichment statistics. Do not assume a gene is in a pathway — use Reactome, KEGG, or Enrichr to verify. Pathway databases disagree on membership; cross-validate key findings across at least two sources.
Core Databases Integrated
| Database | Strengths |
|---|---|
| Reactome | Detailed mechanistic pathways with reactions; human-curated |
| KEGG | Metabolic maps, disease pathways, drug targets |
| WikiPathways | Emerging and community-curated pathways |
| Pathway Commons | Meta-database aggregating multiple sources |
| BioModels | Mathematical/computational SBML models |
| Enrichr | Statistical over-representation analysis |
Workflow Overview
Input → Phase 1: Enrichment → Phase 2: Protein Mapping → Phase 3: Keyword Search → Phase 4: Top Pathways → Report---
Phase 1: Pathway Enrichment Analysis
When: Gene list provided (from experiments, screens, differentially expressed genes)
Objective: Identify biological pathways statistically over-represented in gene list
Tools & Workflow
| Tool | Input | Use |
|---|---|---|
ReactomeAnalysis_pathway_enrichment | identifiers (newline-separated symbols), page_size | FDR-corrected Reactome enrichment (recommended) |
enrichr_gene_enrichment_analysis | gene_list (array), libs (array) | Over-representation with KEGG/Reactome/WikiPathways |
STRING_functional_enrichment | protein_ids (array), species, category | Functional enrichment from PPI networks |
intact_get_interactions | identifier (UniProt accession) | Binary protein interactions with evidence |
1. Submit gene list to Enrichr/Reactome. 2. Sort by adjusted p-value < 0.05. 3. Report top 10-20 pathways with IDs, p-values, and overlapping genes. If no enrichment, note explicitly.
---
Phase 2: Protein-Pathway Mapping
When: Protein UniProt ID provided
Objective: Map protein to all known pathways it participates in
Tools Used
Reactome_map_uniprot_to_pathways:
- Input:
uniprot_id: UniProt accession (e.g., "P53350")- Output: Array of Reactome pathways containing this protein
Reactome_get_pathway_reactions:
- Input:
stId: Reactome pathway stable ID (e.g., "R-HSA-73817")- Output: Array of reactions and subpathways
- Use: Get mechanistic details of pathways
Workflow
1. Map UniProt ID to Reactome pathways 2. Get all pathways this protein appears in 3. For top pathway (or user-specified):
- Retrieve detailed reactions and subpathways
- Extract event names, types (Reaction vs Pathway)
- Note disease associations if present
Decision Logic
- Multiple pathways: Report all pathways, prioritize by hierarchical level
- Top pathway details: Get detailed reactions for 1-3 most relevant
- Versioned IDs: Reactome uses unversioned IDs - strip version if present
- Empty results: Check if protein ID valid; suggest alternative databases if Reactome empty
---
Phase 3: Keyword-Based Pathway Search
When: User provides keyword or biological process name
Objective: Search multiple pathway databases to find relevant pathways
Tools
| Tool | Key Params | Coverage |
|---|---|---|
kegg_search_pathway | keyword | Reference, metabolic, disease pathways |
kegg_get_pathway_info | pathway_id (e.g., "hsa04930") | Detailed genes/compounds for a pathway |
WikiPathways_search | query, organism | Community-curated, emerging pathways |
PathwayCommons_search | action="search_pathways", keyword | Meta-database aggregating multiple sources |
biomodels_search | query, limit | SBML computational models |
Search all databases in parallel. Group results by pathway concept. BioModels often returns empty — this is normal.
---
Phase 4: Top-Level Pathway Catalog
When: Always included to provide context
Objective: Show major biological systems/pathways for organism
Tools Used
Reactome_list_top_pathways:
- Input:
species(e.g., "Homo sapiens") - Output: Array of top-level pathway categories
- Use: Provides hierarchical pathway organization
Workflow
1. Retrieve top-level pathways for specified organism 2. Display pathway categories (metabolism, signaling, disease, etc.) 3. Serve as reference for pathway hierarchy
Decision Logic
- Always show: Provides context even if other phases empty
- Organism-specific: Filter by species of interest
- Hierarchical view: These are parent pathways with many subpathways
---
Output Structure
Create a markdown report progressively: header → Phase 1 enrichment results → Phase 2 protein mapping → Phase 3 keyword search → Phase 4 top pathway catalog. Note empty results explicitly; never silently omit them. Include pathway IDs for follow-up.
Tool Parameter Reference
Critical Parameter Notes (from testing):
| Tool | Correct Parameter | Common Mistake |
|---|---|---|
Reactome_map_uniprot_to_pathways | uniprot_id | id |
PathwayCommons_search | action + keyword (both required) | omitting action |
enrichr_gene_enrichment_analysis | gene_list (array) | string |
Response Format Notes:
- Reactome: Returns list directly (not wrapped in
{status, data}) - Pathway Commons: Returns dict with
total_hitsandpathways - Others: Standard
{status: "success", data: [...]}format
---
Domain Reasoning: Enzyme Kinetics & Metabolic Analysis
LOOK UP DON'T GUESS: Km values, kcat values, cofactor requirements, and optimal pH/temperature for specific enzymes. Use BindingDB_search_by_target, ChEMBL_get_molecule, BRENDA_get_enzyme_info (requires BRENDA_EMAIL + BRENDA_PASSWORD env vars; free academic registration at brenda-enzymes.org) (if available), or EuropePMC_search_articles to retrieve published kinetic parameters. Do not estimate Km from first principles.
Michaelis-Menten Kinetics
The foundational model: v = Vmax * [S] / (Km + [S])
- Km = substrate concentration at half-maximal velocity. NOT binding affinity (Km = (koff + kcat) / kon).
- Vmax = maximum velocity = kcat * [E_total]. Proportional to enzyme concentration.
- kcat = turnover number = molecules of substrate converted per enzyme per second.
- Catalytic efficiency = kcat / Km. The "best" enzymes approach the diffusion limit (~10^8 M^-1 s^-1).
To determine Km and Vmax from data: use Lineweaver-Burk (1/v vs 1/[S]), Eadie-Hofstee (v vs v/[S]), or nonlinear regression (preferred — avoids distortion from reciprocal transforms). See enzyme_kinetics.py in skills/tooluniverse-computational-biophysics/scripts/.
Allosteric Regulation & Cooperative Binding
Not all enzymes follow Michaelis-Menten. Sigmoidal v-vs-[S] curves indicate cooperativity.
- Hill equation: v = Vmax * [S]^nH / (K0.5^nH + [S]^nH)
- Hill coefficient (nH): nH = 1 (no cooperativity), nH > 1 (positive, e.g., hemoglobin O2 binding nH ~ 2.8), nH < 1 (negative cooperativity).
- K0.5: substrate concentration at half-maximal velocity (analogous to Km but not identical for cooperative systems).
- Allosteric activators shift the curve LEFT (lower K0.5). Allosteric inhibitors shift it RIGHT (higher K0.5) or reduce Vmax.
Enzyme Inhibition Types
| Type | Effect on Km | Effect on Vmax | Lineweaver-Burk pattern |
|---|---|---|---|
| Competitive | Increases (Km_app = Km * (1 + [I]/Ki)) | Unchanged | Lines intersect on y-axis |
| Uncompetitive | Decreases | Decreases | Parallel lines |
| Noncompetitive (pure) | Unchanged | Decreases (Vmax_app = Vmax / (1 + [I]/Ki)) | Lines intersect on x-axis |
| Mixed | Changes | Decreases | Lines intersect in quadrant II or III |
To determine Ki: measure v at multiple [I] and [S], fit to the appropriate model. The enzyme_kinetics.py script handles competitive, uncompetitive, and noncompetitive inhibition calculations.
Troubleshooting "No Activity" Results
When a purified enzyme shows no catalytic activity, systematically check:
1. Oligomeric state: Many enzymes are obligate dimers/tetramers. Dilute protein may dissociate. Check with SEC, native PAGE, or DLS. Concentrate sample or add stabilizing agents (glycerol, specific ions). 2. Cofactors: Metal ions (Zn2+, Mg2+, Mn2+), coenzymes (NAD+, FAD, PLP), or prosthetic groups may be lost during purification. LOOK UP the enzyme's cofactor requirements and supplement the assay buffer. 3. pH: Most enzymes have a sharp pH optimum. Even 1 pH unit off can reduce activity 10-fold. Buffer at the literature-reported optimal pH. 4. Temperature: Standard assays at 25C or 37C. Thermophilic enzymes need 50-80C. Psychrophilic enzymes denature above 30C. 5. Reducing environment: Many enzymes need DTT or beta-mercaptoethanol to maintain active-site cysteines in reduced form. 6. Substrate: Wrong isomer (D- vs L-), wrong oxidation state, or degraded substrate. Use fresh substrate and verify by a positive control enzyme. 7. Inhibitors in buffer: EDTA chelates essential metals. Phosphate competes at phospho-binding sites. Detergents can denature. 8. Protein folding: Inclusion body protein may be misfolded even after refolding. Check by CD spectroscopy or thermal shift assay.
Metabolic Flux Analysis Reasoning
Metabolic flux analysis (MFA) quantifies the rates of metabolic reactions in vivo, not just enzyme activities in vitro.
Key concepts:
- Steady-state assumption: At metabolic steady state, the rate of production of each intermediate equals its rate of consumption. This gives a system of linear equations: S * v = 0, where S is the stoichiometric matrix and v is the flux vector.
- Flux Balance Analysis (FBA): When the system is underdetermined (more reactions than metabolites), FBA uses linear programming to optimize an objective function (e.g., maximize biomass production). Use
biomodels_searchto find published SBML models for the organism. - 13C-MFA: Uses isotope labeling to experimentally constrain intracellular fluxes. The labeling pattern of metabolites reveals which pathways carried flux.
- Control coefficients: How much does a 1% change in enzyme activity change the pathway flux? Most enzymes have near-zero flux control coefficients — flux is usually controlled by a few rate-limiting steps plus substrate supply.
LOOK UP DON'T GUESS: stoichiometric coefficients, pathway topology, and published flux distributions. Use KEGG (kegg_get_pathway_info), Reactome (Reactome_get_pathway_reactions), and BioModels (biomodels_search) for these data.
---
Fallback Strategies
Enrichment Analysis
- Primary: Enrichr with KEGG library
- Fallback: Try alternative libraries (Reactome, GO Biological Process)
- If all fail: Note "enrichment analysis unavailable" and continue
Protein Mapping
- Primary: Reactome protein-pathway mapping
- Fallback: Use keyword search with protein name
- If empty: Check if protein ID valid; suggest checking gene symbol
Keyword Search
- Primary: Search all databases (KEGG, WikiPathways, Pathway Commons, BioModels)
- Fallback: If all empty, broaden keyword (e.g., "diabetes" → "glucose")
- If still empty: Note "no pathways found for [keyword]"
---
Limitations & Known Issues
- Reactome: Strong human coverage; limited for non-model organisms
- KEGG: Requires keyword match; may miss synonyms
- WikiPathways: Variable curation quality; check pathway version dates
- Pathway Commons: Aggregation may have duplicates; check source attribution
- BioModels: Sparse for many processes; often returns no results
- Enrichr: Requires gene symbols (not IDs); case-sensitive
Best for: Gene set analysis, protein function investigation, pathway discovery, systems-level biology
# API Keys for ToolUniverse
# Copy this file to .env and fill in your actual API keys
BIOGRID_API_KEY=your_api_key_here
BOLTZ_MCP_SERVER_HOST=your_api_key_here
BRENDA_EMAIL=your_api_key_here
BRENDA_PASSWORD=your_api_key_here
DISGENET_API_KEY=your_api_key_here
EXPERT_FEEDBACK_MCP_SERVER_URL=your_api_key_here
NVIDIA_API_KEY=your_api_key_here
OMIM_API_KEY=your_api_key_here
TXAGENT_MCP_SERVER_HOST=your_api_key_here
USPTO_API_KEY=your_api_key_here
USPTO_MCP_SERVER_HOST=your_api_key_here
#!/usr/bin/env python3
"""
Systems Biology & Pathway Analysis - Python SDK Implementation
Tested implementation following TDD principles
"""
from tooluniverse import ToolUniverse
from datetime import datetime
import json
def systems_biology_pipeline(
gene_list=None,
protein_id=None,
pathway_keyword=None,
organism="Homo sapiens",
output_file=None
):
"""
Comprehensive systems biology and pathway analysis pipeline.
Args:
gene_list: List of gene symbols for pathway enrichment
protein_id: UniProt ID to find protein-specific pathways
pathway_keyword: Keyword to search pathways across databases
organism: Organism name (default: "Homo sapiens")
output_file: Output markdown file path (default: auto-generated)
Returns:
Path to generated report file
"""
tu = ToolUniverse()
tu.load_tools()
# Generate output filename
if output_file is None:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
if gene_list:
output_file = f"systems_biology_genelist_{timestamp}.md"
elif protein_id:
output_file = f"systems_biology_{protein_id}_{timestamp}.md"
elif pathway_keyword:
output_file = f"systems_biology_{pathway_keyword}_{timestamp}.md"
else:
output_file = f"systems_biology_report_{timestamp}.md"
# Initialize report
report = []
report.append("# Systems Biology & Pathway Analysis Report\n")
report.append(f"**Generated**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
if gene_list:
report.append(f"**Gene List**: {', '.join(gene_list[:10])}{'...' if len(gene_list) > 10 else ''}\n")
if protein_id:
report.append(f"**Protein ID**: {protein_id}\n")
if pathway_keyword:
report.append(f"**Keyword**: {pathway_keyword}\n")
report.append(f"**Organism**: {organism}\n")
report.append("\n---\n")
# Phase 1: Pathway Enrichment (if gene list provided)
if gene_list and len(gene_list) > 0:
report.append("\n## 1. Pathway Enrichment Analysis\n")
# Enrichr analysis
try:
result = tu.tools.enrichr_gene_enrichment_analysis(
gene_list=gene_list,
library="KEGG_2021_Human"
)
if isinstance(result, dict) and result.get('status') == 'success':
enrichment_data = result.get('data', [])
if enrichment_data:
report.append(f"\n### KEGG Pathway Enrichment ({len(enrichment_data)} pathways)\n")
report.append("\n| Pathway | P-value | Adjusted P-value | Genes |\n")
report.append("|---------|---------|------------------|-------|\n")
for item in enrichment_data[:10]:
term = item.get('term', 'N/A')
pval = item.get('pvalue', 'N/A')
adj_pval = item.get('adjusted_pvalue', 'N/A')
genes = ', '.join(item.get('genes', [])[:3]) + ('...' if len(item.get('genes', [])) > 3 else '')
# Format p-values
pval_str = f"{pval:.2e}" if isinstance(pval, float) else str(pval)
adj_pval_str = f"{adj_pval:.2e}" if isinstance(adj_pval, float) else str(adj_pval)
report.append(f"| {term} | {pval_str} | {adj_pval_str} | {genes} |\n")
else:
report.append("\n*No significant KEGG pathway enrichment found.*\n")
else:
report.append("\n*KEGG enrichment analysis unavailable.*\n")
except Exception as e:
report.append(f"\n*Error in enrichment analysis: {str(e)}*\n")
# Phase 2: Protein-specific pathways (if protein ID provided)
if protein_id:
report.append(f"\n## 2. Pathways for Protein {protein_id}\n")
# Reactome pathways
try:
result = tu.tools.Reactome_map_uniprot_to_pathways(id=protein_id)
if isinstance(result, list) and len(result) > 0:
report.append(f"\n### Reactome Pathways ({len(result)} pathways)\n")
report.append("\n| Pathway Name | Pathway ID | Species |\n")
report.append("|--------------|------------|----------|\n")
for pathway in result[:15]:
name = pathway.get('displayName', 'N/A')
stId = pathway.get('stId', 'N/A')
species = pathway.get('speciesName', 'N/A')
report.append(f"| {name} | {stId} | {species} |\n")
# Get details for top pathway
if len(result) > 0:
top_pathway_id = result[0].get('stId')
if top_pathway_id:
report.append(f"\n### Top Pathway Details: {result[0].get('displayName')}\n")
try:
reactions = tu.tools.Reactome_get_pathway_reactions(stId=top_pathway_id)
if isinstance(reactions, list):
report.append(f"\n**Reactions/Subpathways**: {len(reactions)}\n")
if len(reactions) > 0:
report.append("\n| Event Name | Type |\n")
report.append("|------------|------|\n")
for event in reactions[:10]:
if isinstance(event, dict):
ev_name = event.get('displayName', 'N/A')
ev_type = event.get('schemaClass', 'N/A')
report.append(f"| {ev_name} | {ev_type} |\n")
except Exception:
pass
else:
report.append(f"\n*No Reactome pathways found for {protein_id}.*\n")
except Exception as e:
report.append(f"\n*Error retrieving Reactome pathways: {str(e)}*\n")
# Phase 3: Keyword-based pathway search (if keyword provided)
if pathway_keyword:
report.append(f"\n## 3. Pathway Search: '{pathway_keyword}'\n")
# KEGG pathways
try:
result = tu.tools.kegg_search_pathway(keyword=pathway_keyword)
if result.get('status') == 'success':
kegg_pathways = result.get('data', [])
if kegg_pathways:
report.append(f"\n### KEGG Pathways ({len(kegg_pathways)} results)\n")
report.append("\n| Pathway ID | Description |\n")
report.append("|------------|-------------|\n")
for pw in kegg_pathways:
pid = pw.get('pathway_id', 'N/A')
desc = pw.get('description', 'N/A')
report.append(f"| {pid} | {desc} |\n")
else:
report.append("\n*No KEGG pathways found.*\n")
except Exception as e:
report.append(f"\n*Error searching KEGG: {str(e)}*\n")
# WikiPathways
try:
result = tu.tools.WikiPathways_search(query=pathway_keyword, organism=organism)
if result.get('status') == 'success':
wp_data = result.get('data', {})
wp_pathways = wp_data.get('result', [])
if wp_pathways:
report.append(f"\n### WikiPathways ({len(wp_pathways)} results)\n")
report.append("\n| Pathway ID | Name | Species |\n")
report.append("|------------|------|----------|\n")
for pw in wp_pathways[:15]:
wpid = pw.get('id', 'N/A')
name = pw.get('name', 'N/A')
species = pw.get('species', 'N/A')
report.append(f"| {wpid} | {name} | {species} |\n")
else:
report.append("\n*No WikiPathways found.*\n")
except Exception as e:
report.append(f"\n*Error searching WikiPathways: {str(e)}*\n")
# Pathway Commons
try:
result = tu.tools.pc_search_pathways(
action="search_pathways",
keyword=pathway_keyword,
limit=15
)
if isinstance(result, dict) and 'total_hits' in result:
total = result.get('total_hits', 0)
pc_pathways = result.get('pathways', [])
if pc_pathways:
report.append(f"\n### Pathway Commons ({total} total hits, showing {len(pc_pathways)})\n")
report.append("\n| Pathway Name | Data Source |\n")
report.append("|--------------|-------------|\n")
for pw in pc_pathways:
name = pw.get('name', 'N/A')
source = ', '.join(pw.get('source', []))
report.append(f"| {name} | {source} |\n")
else:
report.append("\n*No Pathway Commons results found.*\n")
except Exception as e:
report.append(f"\n*Error searching Pathway Commons: {str(e)}*\n")
# BioModels
try:
result = tu.tools.biomodels_search(query=pathway_keyword, limit=10)
if result.get('status') == 'success':
biomodels_data = result.get('data', {})
total = biomodels_data.get('matches', 0)
models = biomodels_data.get('models', [])
if models:
report.append(f"\n### BioModels ({total} total matches, showing {len(models)})\n")
report.append("\n| Model ID | Name |\n")
report.append("|----------|------|\n")
for model in models:
mid = model.get('id', 'N/A')
name = model.get('name', 'N/A')
report.append(f"| {mid} | {name} |\n")
else:
report.append("\n*No BioModels found.*\n")
except Exception as e:
report.append(f"\n*Error searching BioModels: {str(e)}*\n")
# Phase 4: Top-level human pathways (always included)
report.append("\n## 4. Top-Level Human Pathways (Reactome)\n")
try:
result = tu.tools.Reactome_list_top_pathways(species=organism)
if isinstance(result, list) and len(result) > 0:
report.append(f"\n**Total**: {len(result)} top-level pathways\n")
report.append("\n| Pathway Name | Pathway ID |\n")
report.append("|--------------|------------|\n")
for pw in result[:20]:
name = pw.get('displayName', 'N/A')
stId = pw.get('stId', 'N/A')
report.append(f"| {name} | {stId} |\n")
else:
report.append("\n*No top-level pathways retrieved.*\n")
except Exception as e:
report.append(f"\n*Error retrieving top pathways: {str(e)}*\n")
# Write report to file
report_content = ''.join(report)
with open(output_file, 'w') as f:
f.write(report_content)
print(f"\n✅ Report generated: {output_file}")
return output_file
if __name__ == "__main__":
# Example usage
print("Systems Biology & Pathway Analysis - Python SDK Implementation")
print("="*80)
# Example 1: Gene list enrichment
print("\n[Example 1] Gene list enrichment analysis...")
genes = ["TP53", "BRCA1", "EGFR", "MYC", "KRAS", "AKT1", "PTEN", "RB1"]
systems_biology_pipeline(
gene_list=genes,
output_file="example1_genelist.md"
)
# Example 2: Protein-specific pathways
print("\n[Example 2] Protein-specific pathway analysis...")
systems_biology_pipeline(
protein_id="P53350", # TP53 tumor suppressor
output_file="example2_protein.md"
)
# Example 3: Keyword search
print("\n[Example 3] Pathway keyword search...")
systems_biology_pipeline(
pathway_keyword="apoptosis",
organism="Homo sapiens",
output_file="example3_keyword.md"
)
print("\n✅ All examples completed!")
#!/usr/bin/env python3
"""
Test script for Systems Biology skill
Verifies the complete pipeline works correctly
"""
import sys
import os
# Add parent directory to path to import python_implementation
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from python_implementation import systems_biology_pipeline
def test_gene_list_analysis():
"""Test pathway enrichment with gene list"""
print("\n" + "="*80)
print("TEST 1: Gene List Pathway Enrichment")
print("="*80)
genes = ["TP53", "BRCA1", "EGFR", "MYC", "KRAS"]
output = systems_biology_pipeline(
gene_list=genes,
output_file="test1_genelist.md"
)
# Verify output file created
assert os.path.exists(output), f"Output file {output} not created"
print(f"✅ Test 1 PASSED: {output}")
def test_protein_pathways():
"""Test protein-pathway mapping"""
print("\n" + "="*80)
print("TEST 2: Protein-Pathway Mapping")
print("="*80)
output = systems_biology_pipeline(
protein_id="P53350", # TP53
output_file="test2_protein.md"
)
assert os.path.exists(output), f"Output file {output} not created"
print(f"✅ Test 2 PASSED: {output}")
def test_keyword_search():
"""Test keyword-based pathway search"""
print("\n" + "="*80)
print("TEST 3: Keyword Pathway Search")
print("="*80)
output = systems_biology_pipeline(
pathway_keyword="apoptosis",
organism="Homo sapiens",
output_file="test3_keyword.md"
)
assert os.path.exists(output), f"Output file {output} not created"
print(f"✅ Test 3 PASSED: {output}")
def test_combined_analysis():
"""Test combined analysis with multiple inputs"""
print("\n" + "="*80)
print("TEST 4: Combined Multi-Input Analysis")
print("="*80)
genes = ["TP53", "MDM2", "BCL2"]
output = systems_biology_pipeline(
gene_list=genes,
protein_id="P04637", # TP53
pathway_keyword="cell death",
output_file="test4_combined.md"
)
assert os.path.exists(output), f"Output file {output} not created"
# Check report contains all sections
with open(output, 'r') as f:
content = f.read()
assert "Pathway Enrichment" in content, "Missing enrichment section"
assert "Pathways for Protein" in content, "Missing protein section"
assert "Pathway Search" in content, "Missing keyword section"
assert "Top-Level Human Pathways" in content, "Missing top pathways"
print(f"✅ Test 4 PASSED: {output}")
def main():
"""Run all tests"""
print("\n" + "="*80)
print("SYSTEMS BIOLOGY SKILL TEST SUITE")
print("="*80)
tests = [
("Gene List Analysis", test_gene_list_analysis),
("Protein Pathways", test_protein_pathways),
("Keyword Search", test_keyword_search),
("Combined Analysis", test_combined_analysis),
]
results = {}
for name, test_func in tests:
try:
test_func()
results[name] = "✅ PASS"
except Exception as e:
print(f"\n❌ EXCEPTION in {name}: {e}")
results[name] = f"❌ FAIL: {str(e)[:100]}"
# Summary
print("\n" + "="*80)
print("TEST SUMMARY")
print("="*80)
for name, result in results.items():
print(f"{name:30} {result}")
# Overall status
all_passed = all("PASS" in result for result in results.values())
if all_passed:
print("\n✅ ALL TESTS PASSED - Skill is ready to use!")
return 0
else:
print("\n❌ SOME TESTS FAILED - Please review errors above")
return 1
if __name__ == "__main__":
sys.exit(main())
Systems Biology & Pathway Analysis Report
Generated: 2026-02-12 16:35:22 Gene List: TP53, BRCA1, EGFR, MYC, KRAS Organism: Homo sapiens
---
1. Pathway Enrichment Analysis
KEGG enrichment analysis unavailable.
4. Top-Level Human Pathways (Reactome)
Total: 29 top-level pathways
| Pathway Name | Pathway ID |
|---|---|
| Autophagy | R-HSA-9612973 |
| Cell Cycle | R-HSA-1640170 |
| Cell-Cell communication | R-HSA-1500931 |
| Cellular responses to stimuli | R-HSA-8953897 |
| Chromatin organization | R-HSA-4839726 |
| Circadian clock | R-HSA-9909396 |
| Developmental Biology | R-HSA-1266738 |
| Digestion and absorption | R-HSA-8963743 |
| Disease | R-HSA-1643685 |
| DNA Repair | R-HSA-73894 |
| DNA Replication | R-HSA-69306 |
| Drug ADME | R-HSA-9748784 |
| Extracellular matrix organization | R-HSA-1474244 |
| Gene expression (Transcription) | R-HSA-74160 |
| Hemostasis | R-HSA-109582 |
| Immune System | R-HSA-168256 |
| Metabolism | R-HSA-1430728 |
| Metabolism of proteins | R-HSA-392499 |
| Metabolism of RNA | R-HSA-8953854 |
| Muscle contraction | R-HSA-397014 |
Systems Biology & Pathway Analysis Report
Generated: 2026-02-12 16:35:23 Protein ID: P53350 Organism: Homo sapiens
---
2. Pathways for Protein P53350
Reactome Pathways (25 pathways)
| Pathway Name | Pathway ID | Species |
|---|---|---|
| Amplification of signal from unattached kinetochores via a MAD2 inhibitory signal | R-HSA-141444 | Homo sapiens |
| Polo-like kinase mediated events | R-HSA-156711 | Homo sapiens |
| Golgi Cisternae Pericentriolar Stack Reorganization | R-HSA-162658 | Homo sapiens |
| APC/C:Cdh1 mediated degradation of Cdc20 and other APC/C:Cdh1 targeted proteins in late mitosis/early G1 | R-HSA-174178 | Homo sapiens |
| Phosphorylation of the APC/C | R-HSA-176412 | Homo sapiens |
| Phosphorylation of Emi1 | R-HSA-176417 | Homo sapiens |
| Condensation of Prophase Chromosomes | R-HSA-2299718 | Homo sapiens |
| Separation of Sister Chromatids | R-HSA-2467813 | Homo sapiens |
| Resolution of Sister Chromatid Cohesion | R-HSA-2500257 | Homo sapiens |
| Regulation of PLK1 Activity at G2/M Transition | R-HSA-2565942 | Homo sapiens |
| Activation of NIMA Kinases NEK9, NEK6, NEK7 | R-HSA-2980767 | Homo sapiens |
| Loss of Nlp from mitotic centrosomes | R-HSA-380259 | Homo sapiens |
| Recruitment of mitotic centrosome proteins and complexes | R-HSA-380270 | Homo sapiens |
| Loss of proteins required for interphase microtubule organization from the centrosome | R-HSA-380284 | Homo sapiens |
| Recruitment of NuMA to mitotic centrosomes | R-HSA-380320 | Homo sapiens |
Top Pathway Details: Amplification of signal from unattached kinetochores via a MAD2 inhibitory signal
Reactions/Subpathways: 4
| Event Name | Type |
|---|---|
| Mad1 binds kinetochore | Reaction |
4. Top-Level Human Pathways (Reactome)
Total: 29 top-level pathways
| Pathway Name | Pathway ID |
|---|---|
| Autophagy | R-HSA-9612973 |
| Cell Cycle | R-HSA-1640170 |
| Cell-Cell communication | R-HSA-1500931 |
| Cellular responses to stimuli | R-HSA-8953897 |
| Chromatin organization | R-HSA-4839726 |
| Circadian clock | R-HSA-9909396 |
| Developmental Biology | R-HSA-1266738 |
| Digestion and absorption | R-HSA-8963743 |
| Disease | R-HSA-1643685 |
| DNA Repair | R-HSA-73894 |
| DNA Replication | R-HSA-69306 |
| Drug ADME | R-HSA-9748784 |
| Extracellular matrix organization | R-HSA-1474244 |
| Gene expression (Transcription) | R-HSA-74160 |
| Hemostasis | R-HSA-109582 |
| Immune System | R-HSA-168256 |
| Metabolism | R-HSA-1430728 |
| Metabolism of proteins | R-HSA-392499 |
| Metabolism of RNA | R-HSA-8953854 |
| Muscle contraction | R-HSA-397014 |
Systems Biology & Pathway Analysis Report
Generated: 2026-02-12 16:35:24 Keyword: apoptosis Organism: Homo sapiens
---
3. Pathway Search: 'apoptosis'
KEGG Pathways (3 results)
| Pathway ID | Description |
|---|---|
| path:map04210 | Apoptosis |
| path:map04214 | Apoptosis - fly |
| path:map04215 | Apoptosis - multiple species |
WikiPathways (320 results)
| Pathway ID | Name | Species |
|---|---|---|
| WP1137 | Apoptosis | Canis familiaris |
| WP787 | Apoptosis | Gallus gallus |
| WP1254 | Apoptosis | Mus musculus |
| WP1351 | Apoptosis | Danio rerio |
| WP901 | Apoptosis | Pan troglodytes |
| WP1018 | Apoptosis | Bos taurus |
| WP254 | Apoptosis | Homo sapiens |
| WP1290 | Apoptosis | Rattus norvegicus |
| WP1392 | Apoptosis modulation by HSP70 | Danio rerio |
| WP487 | Apoptosis modulation by HSP70 | Rattus norvegicus |
| WP1082 | Apoptosis modulation by HSP70 | Bos taurus |
| WP963 | Apoptosis modulation by HSP70 | Pan troglodytes |
| WP1199 | Apoptosis modulation by HSP70 | Canis familiaris |
| WP843 | Apoptosis modulation by HSP70 | Gallus gallus |
| WP2507 | Nanomaterial induced apoptosis | Homo sapiens |
Pathway Commons (650 total hits, showing 15)
| Pathway Name | Data Source |
|---|---|
| apoptosis | pc14:pid |
| Apoptosis | pc14:panther |
| Apoptosis | pc14:panther |
| Apoptosis | pc14:panther |
| Apoptosis | pc14:panther |
| Apoptosis | pc14:reactome |
| induction of apoptosis | pc14:pid |
| regulation of apoptosis | pc14:pid |
| neuron apoptosis | pc14:pid |
| RIPK1 dephosphorylation and kinase activation by PPP1R3G/PP1γ promote apoptosis and necroptosis. | pc14:biofactoid |
| positive regulation of apoptosis | pc14:pid |
| negative regulation of apoptosis | pc14:pid |
| P53 Signaling Pathway | pc14:pathbank |
| Anti-apoptosis | pc14:panther |
| Anti-apoptosis | pc14:panther |
4. Top-Level Human Pathways (Reactome)
Total: 29 top-level pathways
| Pathway Name | Pathway ID |
|---|---|
| Autophagy | R-HSA-9612973 |
| Cell Cycle | R-HSA-1640170 |
| Cell-Cell communication | R-HSA-1500931 |
| Cellular responses to stimuli | R-HSA-8953897 |
| Chromatin organization | R-HSA-4839726 |
| Circadian clock | R-HSA-9909396 |
| Developmental Biology | R-HSA-1266738 |
| Digestion and absorption | R-HSA-8963743 |
| Disease | R-HSA-1643685 |
| DNA Repair | R-HSA-73894 |
| DNA Replication | R-HSA-69306 |
| Drug ADME | R-HSA-9748784 |
| Extracellular matrix organization | R-HSA-1474244 |
| Gene expression (Transcription) | R-HSA-74160 |
| Hemostasis | R-HSA-109582 |
| Immune System | R-HSA-168256 |
| Metabolism | R-HSA-1430728 |
| Metabolism of proteins | R-HSA-392499 |
| Metabolism of RNA | R-HSA-8953854 |
| Muscle contraction | R-HSA-397014 |
Systems Biology & Pathway Analysis Report
Generated: 2026-02-12 16:35:31 Gene List: TP53, MDM2, BCL2 Protein ID: P04637 Keyword: cell death Organism: Homo sapiens
---
1. Pathway Enrichment Analysis
KEGG enrichment analysis unavailable.
2. Pathways for Protein P04637
Reactome Pathways (46 pathways)
| Pathway Name | Pathway ID | Species |
|---|---|---|
| Activation of NOXA and translocation to mitochondria | R-HSA-111448 | Homo sapiens |
| Activation of PUMA and translocation to mitochondria | R-HSA-139915 | Homo sapiens |
| Pre-NOTCH Transcription and Translation | R-HSA-1912408 | Homo sapiens |
| Oxidative Stress Induced Senescence | R-HSA-2559580 | Homo sapiens |
| Formation of Senescence-Associated Heterochromatin Foci (SAHF) | R-HSA-2559584 | Homo sapiens |
| Oncogene Induced Senescence | R-HSA-2559585 | Homo sapiens |
| DNA Damage/Telomere Stress Induced Senescence | R-HSA-2559586 | Homo sapiens |
| SUMOylation of transcription factors | R-HSA-3232118 | Homo sapiens |
| Autodegradation of the E3 ubiquitin ligase COP1 | R-HSA-349425 | Homo sapiens |
| Association of TriC/CCT with target proteins during biosynthesis | R-HSA-390471 | Homo sapiens |
| Pyroptosis | R-HSA-5620971 | Homo sapiens |
| TP53 Regulates Metabolic Genes | R-HSA-5628897 | Homo sapiens |
| Ub-specific processing proteases | R-HSA-5689880 | Homo sapiens |
| Ovarian tumor domain proteases | R-HSA-5689896 | Homo sapiens |
| Recruitment and ATM-mediated phosphorylation of repair and signaling proteins at DNA double strand breaks | R-HSA-5693565 | Homo sapiens |
Top Pathway Details: Activation of NOXA and translocation to mitochondria
Reactions/Subpathways: 5
| Event Name | Type |
|---|---|
| TP53 binds the PMAIP1 (NOXA) promoter | Reaction |
3. Pathway Search: 'cell death'
No KEGG pathways found.
WikiPathways (1007 results)
| Pathway ID | Name | Species |
|---|---|---|
| WP367 | Programmed cell death | Caenorhabditis elegans |
| WP2231 | Programmed cell death and cell engulfment | Caenorhabditis elegans |
| WP5585 | Parthanatos cell death signaling pathway | Homo sapiens |
| WP2829 | Programmed cell death and cell engulfment | Caenorhabditis elegans |
| WP2226 | Cell engulfment | Caenorhabditis elegans |
| WP3802 | TP53 Regulates Transcription of Cell Death Genes | Homo sapiens |
| WP3167 | Quercetin and Nf-kB / AP-1 induced cell apoptosis | Bos taurus |
| WP2509 | Nanoparticle triggered autophagic cell death | Homo sapiens |
| WP1137 | Apoptosis | Canis familiaris |
| WP901 | Apoptosis | Pan troglodytes |
| WP254 | Apoptosis | Homo sapiens |
| WP1392 | Apoptosis modulation by HSP70 | Danio rerio |
| WP487 | Apoptosis modulation by HSP70 | Rattus norvegicus |
| WP1082 | Apoptosis modulation by HSP70 | Bos taurus |
| WP963 | Apoptosis modulation by HSP70 | Pan troglodytes |
Pathway Commons (3102 total hits, showing 15)
| Pathway Name | Data Source |
|---|---|
| cell death | pc14:pid |
| Cell Death | pc14:panther |
| necrotic cell death | pc14:pid |
| activation-induced cell death of T cells | pc14:pid |
| Oxidative DNA Damage (Cell Death) | pc14:pathbank |
| SENP3 Promotes an Mff-Primed Bcl-x L -Drp1 Interaction Involved in Cell Death Following Ischemia. | pc14:biofactoid |
| Escape of Mtb from the phagocyte | pc14:reactome |
| Cell death signalling via NRAGE, NRIF and NADE | pc14:reactome |
| NADE modulates death signalling | pc14:reactome |
| Programmed Cell Death | pc14:reactome |
| Phagocyte cell death caused by cytosolic Mtb | pc14:reactome |
| FasL/ CD95L signaling | pc14:reactome |
| TRIF-mediated programmed cell death | pc14:reactome |
| Apoptosis | pc14:reactome |
| Death Receptor Signaling | pc14:reactome |
BioModels (72 total matches, showing 10)
| Model ID | Name |
|---|---|
| BIOMD0000000538 | Clarke2000 - One-hit model of cell death in neuronal degenerations |
| BIOMD0000000344 | Proctor2011_ProteinHomeostasis_NormalCondition |
| MODEL2503030004 | Akhtar2025 - Pancreatic beta-cell turnover |
| MODEL1107050000 | Bialik2010_Apoptosis_SPIKEmodel |
| BIOMD0000000407 | Schliemann2011_TNF_ProAntiApoptosis |
| BIOMD0000000243 | Neumann2010_CD95Stimulation_NFkB_Apoptosis |
| MODEL0912180000 | Calzone2010_Cellfate_Master_Model |
| MODEL2003200002 | Shin2019- Regulation of nuclear factor of activated T-cells (NFAT) |
| MODEL2412210001 | SGP2024 - Apoptosis_AgNPs |
| MODEL2304070002 | Ruscone2023 - Logical model of Tumor Cell Invasion |
4. Top-Level Human Pathways (Reactome)
Total: 29 top-level pathways
| Pathway Name | Pathway ID |
|---|---|
| Autophagy | R-HSA-9612973 |
| Cell Cycle | R-HSA-1640170 |
| Cell-Cell communication | R-HSA-1500931 |
| Cellular responses to stimuli | R-HSA-8953897 |
| Chromatin organization | R-HSA-4839726 |
| Circadian clock | R-HSA-9909396 |
| Developmental Biology | R-HSA-1266738 |
| Digestion and absorption | R-HSA-8963743 |
| Disease | R-HSA-1643685 |
| DNA Repair | R-HSA-73894 |
| DNA Replication | R-HSA-69306 |
| Drug ADME | R-HSA-9748784 |
| Extracellular matrix organization | R-HSA-1474244 |
| Gene expression (Transcription) | R-HSA-74160 |
| Hemostasis | R-HSA-109582 |
| Immune System | R-HSA-168256 |
| Metabolism | R-HSA-1430728 |
| Metabolism of proteins | R-HSA-392499 |
| Metabolism of RNA | R-HSA-8953854 |
| Muscle contraction | R-HSA-397014 |
Related skills
How it compares
Pick tooluniverse-systems-biology over single-database enrichment scripts when agents must reconcile pathway annotations across Reactome, KEGG, WikiPathways, and Enrichr in one report.
FAQ
Which databases does tooluniverse-systems-biology query?
tooluniverse-systems-biology integrates Reactome, KEGG, WikiPathways, BioCarta, NCI-Nature, Pathway Commons, BioModels, and Enrichr. The 4-phase workflow cross-validates pathway membership because databases frequently disagree on gene assignments.
What ToolUniverse APIs does the skill call for enrichment?
tooluniverse-systems-biology calls ReactomeAnalysis_pathway_enrichment for FDR-corrected Reactome enrichment and enrichr_gene_enrichment_analysis for KEGG, Reactome, and WikiPathways over-representation on submitted gene lists.