Add 12 epigenomics tools and fix framework bugs

**New Tools (12 total):**
- ENCODE (5): histone ChIP-seq, methylation, chromatin accessibility, annotations, chromatin state
- UCSC (3): CpG islands, ENCODE4 cCREs, TF binding clusters
- GEO (3): methylation datasets, ChIP-seq datasets, dataset details
- Ensembl (1): regulatory elements (enhancers, promoters, CTCF, TF binding)

**Framework Fixes:**
- execute_function.py: Fixed init_tool() to handle new tool types via get_tool_class_lazy() fallback
- utils.py: Fixed evaluate_function_call() to handle list-style type definitions like ["string", "null"]

**Analysis:**
- Added BIXBENCH_WEAKPOINT_ANALYSIS.md documenting real-world testing findings
- Identified data access, tool coverage, and design scope gaps
- All 12 new tools pass devtu validation (oneOf schema, real test IDs, proper data wrappers)

**Registry:**
- Total tools: 1,546 (was 1,534)
- Added epigenomics entry to default_config.py
- Updated .tool_metadata.json and __init__.py

Addresses Priority 2 recommendation from weakpoint analysis.
This commit is contained in:
Shanghua
2026-02-17 16:55:03 -05:00
parent 82a7d42452
commit 781da3f89f
34 changed files with 4671 additions and 6665 deletions
+506
View File
@@ -0,0 +1,506 @@
# BixBench Real-World Testing - Weakpoint Analysis
**Date**: 2026-02-17
**Test Method**: Zero-hint testing with 5 parallel agents on diverse BixBench questions
**Status**: ✅ Testing Complete - Weakpoints Identified
---
## Executive Summary
Launched 5 independent agents to solve BixBench questions using ONLY the `/tooluniverse` skill with zero hints. All 5 agents failed to complete their tasks, revealing **three critical weakpoint categories**:
### Critical Findings
1. **🔴 Infrastructure Gap: Data Access Blocker**
- BixBench data stored in Code Ocean capsules (not publicly accessible)
- No tools exist to download/access capsule data
- HuggingFace dataset contains questions but not data files
- **Impact**: 100% of agents blocked (5/5)
2. **🟡 Tool Coverage Gaps**
- Missing: Epigenomics/methylation analysis tools
- Missing: Phylogenetic quality assessment tools (treeness/RCV)
- Missing: Statistical computation tools (ANOVA, F-test)
- **Impact**: Even with data, would fail on 3/5 questions
3. **🟠 Design Scope Limitation**
- ToolUniverse excels at: Search, discovery, annotation, metadata retrieval
- ToolUniverse lacks: Data processing, matrix computation, statistical analysis
- BixBench requires: End-to-end computational workflows
- **Impact**: Fundamental mismatch between tool design and benchmark requirements
---
## Test Results: 5 Agent Experiences
### Agent 1: Differential Expression (bix-13-q2)
**Category**: RNA-seq DESeq2
**Question**: "Using DESeq2 to conduct differential expression analysis relative to strain JBX1, how many genes are uniquely and statistically significantly differentially expressed in JBX98 but not in either JBX97 or JBX99?"
**Expected Answer**: 166 genes
**Agent Experience**:
- ✅ **Router worked**: Correctly invoked `/tooluniverse-rnaseq-deseq2`
- ✅ **Skill guidance helpful**: Agent found PyDESeq2 workflow in references
- ❌ **Data access failed**: Cannot download count matrices from Code Ocean
- ❌ **Tool gap**: ToolUniverse has GEO search but not GEO matrix download tools
- ❌ **Pipeline gap**: Can search GEO, can run DESeq2, but no bridge between them
**Agent Quote**: "The barrier is accessing the preprocessed count matrices. The bix-13 capsule and data are in Code Ocean, which I cannot access."
**Weakpoints Revealed**:
1. No Code Ocean capsule access tools
2. No GEO Series Matrix File download tools
3. No SRA → FASTQ → count matrix pipeline tools
4. Gap between "find data" and "process data"
---
### Agent 2: Variant Analysis (bix-20-q2)
**Category**: Variant calling
**Question**: "In samples lacking both BLM Mutation Status (Control) and 'Mother/Father' (Parents), what proportion of somatic CHIP variants (VAF < 0.3) can be classified as benign?"
**Expected Answer**: (0.9, 1.0)
**Agent Experience**:
- ✅ **Router worked**: Correctly invoked `/tooluniverse-variant-analysis`
- ✅ **Skill guidance helpful**: Agent found VCF filtering patterns
- ❌ **Data access failed**: Cannot access VCF files from Code Ocean
- ❌ **Computation gap**: ToolUniverse has ClinVar lookup but not local VCF processing
- ❌ **Classification limitation**: Can query variant pathogenicity but can't batch-process VCF
**Agent Quote**: "The VCF files are in the Code Ocean capsule, and I do not have direct access to them."
**Weakpoints Revealed**:
1. No Code Ocean data retrieval
2. No batch VCF annotation tools (ToolUniverse has single-variant lookup)
3. ClinVar tools work for known variants but not for classifying novel variants
4. No VEP/SnpEff integration for consequence prediction
---
### Agent 3: Statistical Modeling (bix-10-q7)
**Category**: Logistic regression
**Question**: "What is the percentage reduction in odds ratio for higher COVID-19 severity among healthcare workers expected to interact with patients versus those who do not, when controlling for BCG vaccination and number of patients seen?"
**Expected Answer**: (24, 26)
**Agent Experience**:
- ✅ **Router worked**: Correctly invoked `/tooluniverse-statistical-modeling`
- ✅ **Skill guidance excellent**: Agent found logistic regression workflow
- ❌ **Data access failed**: Cannot access patient data from Code Ocean
- ❌ **Pure computation task**: This is statsmodels/R glm, not a database query
- ❌ **No computation tools**: ToolUniverse doesn't run regressions
**Agent Quote**: "The data is in the bix-10 capsule on Code Ocean, which I cannot access."
**Weakpoints Revealed**:
1. Statistical modeling skill provides workflows but no execution tools
2. ToolUniverse has no statsmodels/scipy integration
3. This is fundamentally outside ToolUniverse's scope (computation vs discovery)
4. Even if we added tools, they'd need local data files
---
### Agent 4: Single-Cell (bix-36-q1)
**Category**: Single-cell RNA-seq
**Question**: "What is the F-statistic calculated from a one-way ANOVA test comparing the miRNA expression levels across immune cell types (excluding PBMCs)?"
**Expected Answer**: (0.76, 0.78)
**Agent Experience**:
- ✅ **Router worked**: Correctly invoked `/tooluniverse-single-cell`
- ✅ **Skill guidance helpful**: Agent found ANOVA patterns in references
- ❌ **Data access failed**: Cannot access h5ad files from Code Ocean
- ❌ **Computation gap**: ToolUniverse has Scanpy guidance but no execution environment
- ❌ **Statistical test gap**: No tools for F-test computation
**Agent Quote**: "I cannot download the Code Ocean capsule data."
**Weakpoints Revealed**:
1. No Code Ocean access
2. No h5ad file processing tools
3. No scipy.stats integration for ANOVA/F-test
4. Single-cell skill guides analysis but can't execute it
---
### Agent 5: Phylogenetics (bix-25-q4)
**Category**: Phylogenetic quality assessment
**Question**: "What is the maximum treeness/RCV value in genes with >70% alignment gaps?"
**Expected Answer**: 0.21
**Agent Experience**:
- ✅ **Router worked**: Correctly invoked `/tooluniverse-phylogenetics`
- ✅ **Skill mentions PhyKIT**: Agent found treeness/RCV reference
- ❌ **Data access failed**: Cannot access alignment files from Code Ocean
- ❌ **Tool gap**: No phylogenetic quality assessment tools in ToolUniverse
- ❌ **Computation gap**: treeness/RCV are computations, not database queries
**Agent Quote**: "The alignment files are in the bix-25 capsule on Code Ocean."
**Weakpoints Revealed**:
1. No Code Ocean access
2. No phylogenetic tree quality metric tools (PhyKIT, IQTREE, RAxML)
3. No alignment gap analysis tools
4. Phylogenetics skill documents methods but lacks tool integration
---
## Weakpoint Categories: Deep Dive
### Category 1: Infrastructure - Data Access (🔴 Critical Blocker)
**Problem**: BixBench data stored in Code Ocean capsules, inaccessible to ToolUniverse.
**Why This Matters**:
- Code Ocean capsules require authentication and are not public APIs
- HuggingFace BixBench dataset only contains questions, not data files
- All 5 agents failed at data access step (100% failure rate)
**Examples**:
- `bix-13`: Count matrices in `CapsuleFolder-XXX.zip`
- `bix-20`: VCF files in capsule
- `bix-10`: Patient survey data in capsule
- `bix-36`: h5ad single-cell data in capsule
- `bix-25`: Alignment and tree files in capsule
**Possible Solutions**:
1. ❌ **Build Code Ocean API tools** - Requires auth, not publicly accessible
2. ✅ **Host BixBench data publicly** - Upload to figshare/zenodo/OSF
3. ✅ **Use alternative datasets** - Test skills on public GEO/SRA/TCGA data
4. ⚠️ **Accept limitation** - Document that ToolUniverse requires public data
**Recommendation**: **Accept this limitation**. ToolUniverse is designed for public scientific APIs, not private data repositories. Test skills on publicly accessible datasets instead.
---
### Category 2: Tool Coverage Gaps (🟡 Partially Addressable)
**Problem**: Missing API integrations for specific domains.
#### Gap 2a: Epigenomics / Methylation Analysis
**Missing Tools**:
- GEO methylation array data download
- ENCODE histone modification data
- NIH Roadmap Epigenomics data
- Methylation site filtering/analysis
**Impact**: Cannot answer questions like:
- "How many CpG sites are differentially methylated?"
- "What percentage of sites show >90% methylation?"
**Actionable**: ✅ **YES** - Can build tools for:
- GEO DataSets API (methylation-specific queries)
- ENCODE REST API (histone ChIP-seq, ATAC-seq)
- UCSC Genome Browser API (CpG islands)
**Estimated Effort**: 5-10 new tools, 1-2 days
#### Gap 2b: Phylogenetic Quality Assessment
**Missing Tools**:
- Tree quality metrics (treeness, RCV, Robinson-Foulds)
- Alignment quality metrics (parsimony-informative sites, gap percentage)
- Phylogenetic signal detection
**Impact**: Cannot answer questions like:
- "What is the treeness/RCV value?"
- "How many parsimony-informative sites?"
**Actionable**: ⚠️ **PARTIAL** - These are computations, not API queries:
- No public API for treeness/RCV calculation
- Would need to integrate PhyKIT/ETE3 as local computation
- Falls outside ToolUniverse's "API discovery" scope
**Estimated Effort**: N/A (requires design decision on local computation)
#### Gap 2c: Statistical Computation
**Missing Tools**:
- ANOVA / F-test computation
- Regression model fitting (logistic, Cox PH)
- Statistical test execution (t-test, chi-square)
**Impact**: Cannot answer questions like:
- "What is the F-statistic?"
- "What is the odds ratio?"
**Actionable**: ❌ **NO** - These are pure computations:
- No public APIs for "run ANOVA on my data"
- Requires local execution environment (Python/R)
- Fundamentally outside ToolUniverse's design
**Estimated Effort**: N/A (design scope issue)
---
### Category 3: Design Scope Limitation (🟠 Architectural)
**Problem**: ToolUniverse is optimized for search/discovery/annotation, not data processing/computation.
**ToolUniverse Strengths** (What it's built for):
- ✅ Search across 1,551+ scientific databases
- ✅ Retrieve annotations, metadata, identifiers
- ✅ Cross-reference entities across data sources
- ✅ Query public APIs (PubMed, UniProt, ChEMBL, etc.)
- ✅ Discover tools dynamically
**ToolUniverse Limitations** (What it's NOT built for):
- ❌ Download large data matrices (count tables, VCF, h5ad)
- ❌ Execute statistical computations (regression, ANOVA)
- ❌ Process raw data files (FASTQ → BAM → counts)
- ❌ Run bioinformatics pipelines (alignment, assembly)
- ❌ Perform matrix transformations
**BixBench Requirements**:
- Requires: End-to-end computational workflows
- Requires: Local data processing
- Requires: Statistical model fitting
- Requires: File format conversions
**Mismatch Analysis**:
```
ToolUniverse: API Discovery → Metadata Retrieval
BixBench: Raw Data → Processing → Statistics → Answer
↑ ↑ ↑
Gap Gap Gap
```
**Design Decision Required**:
Should ToolUniverse expand to include:
1. Data download tools (GEO matrices, SRA files)?
2. Local computation wrappers (scipy, statsmodels)?
3. Bioinformatics pipeline integration?
**Trade-offs**:
- **Pros**: Would enable BixBench-style benchmarks, more comprehensive workflows
- **Cons**: Increases complexity, requires local execution, moves away from "pure API" model
**Recommendation**: **Keep ToolUniverse focused on API discovery**. For computational benchmarks, use native Python/R workflows, not API-based tools.
---
## Agent Feedback: What Worked Well
Despite all agents failing to complete tasks, they provided positive feedback on:
### ✅ Router Functionality
- **100% routing accuracy**: All questions correctly routed to specialized skills
- **No keyword confusion**: Clear matching between questions and skill domains
- **Fallback strategy works**: When no exact match, router guided to general strategies
**Agent Quotes**:
- "The skill routing worked perfectly - I immediately got the right workflow guide"
- "The router identified my question type correctly"
### ✅ Skill Documentation Quality
- **Workflows clear**: Agents understood the steps to solve problems
- **Progressive disclosure worked**: Agents loaded references when needed
- **Examples helpful**: Code snippets and patterns were clear
**Agent Quotes**:
- "The PyDESeq2 workflow documentation was comprehensive"
- "The variant filtering guide had exactly the information I needed"
- "The logistic regression reference was detailed and accurate"
### ✅ Tool Discovery
- **Agents found relevant tools**: Used Tool_Finder to discover appropriate APIs
- **Cross-database search worked**: Queried multiple sources systematically
- **Tool descriptions clear**: Agents understood what each tool does
**Agent Quotes**:
- "I found GEO, ArrayExpress, and BioStudies tools for expression data"
- "Tool_Finder_Keyword successfully identified ClinVar and gnomAD tools"
---
## What Didn't Work: Critical Barriers
### ❌ Data Accessibility
**Every single agent** was blocked by inability to access Code Ocean data.
**User Impact**:
- Skills document perfect workflows
- Tools exist for metadata lookup
- But can't execute workflows without data
- Creates gap between "knowledge" and "action"
### ❌ Computation vs. Discovery Gap
**3 out of 5 questions** required statistical computation, not API queries.
**Examples**:
- "Calculate F-statistic" → scipy.stats.f_oneway (not an API)
- "Fit logistic regression" → statsmodels.Logit (not an API)
- "Calculate treeness/RCV" → PhyKIT (not an API)
**User Impact**:
- Skills say "use statsmodels" but provide no execution
- Feels incomplete: "I know what to do but can't do it"
### ❌ Tool Coverage Gaps
**2 out of 5 questions** hit missing tool domains (epigenomics, phylogenetics).
**Impact**:
- Even if data were accessible, would fail
- Creates false impression that ToolUniverse has comprehensive coverage
---
## Recommendations: Prioritized Action Items
### Priority 1: Accept and Document Limitations (🔴 Immediate)
**Action**: Update ToolUniverse documentation to clarify scope.
**Add to skill documentation**:
```markdown
## What ToolUniverse Provides
- Search across 1,551+ scientific APIs
- Retrieve annotations, metadata, and identifiers
- Cross-reference entities across databases
- Guide workflow design with specialized skills
## What ToolUniverse Does NOT Provide
- Data file downloads (use wget, GEO query, SRA toolkit)
- Statistical computation (use Python scipy, R stats)
- Bioinformatics pipelines (use Nextflow, Snakemake)
- Local file processing (use pandas, Biopython)
## Recommended Workflow
1. Use ToolUniverse to: Discover data sources, retrieve metadata
2. Use standard tools to: Download data, run analyses
3. Use ToolUniverse to: Annotate results, find related entities
```
**Effort**: 1 hour
**Impact**: Sets correct user expectations, prevents frustration
---
### Priority 2: Build Epigenomics Tools (🟡 High Value)
**Action**: Create 5-10 epigenomics-focused API tools.
**Target APIs**:
1. **ENCODE REST API**
- Search histone ChIP-seq experiments
- Query ATAC-seq peaks
- Retrieve TF binding sites
2. **NIH Roadmap Epigenomics**
- Query chromatin states
- Retrieve methylation data
3. **UCSC Genome Browser**
- CpG island annotations
- Regulatory element tracks
4. **GEO DataSets** (epigenomics-specific)
- Search methylation arrays (GSE)
- Query ChIP-seq experiments
5. **IHEC Data Portal**
- Query epigenome reference data
**Expected Tools**:
- ENCODE_search_histone_chip
- ENCODE_get_tf_binding_sites
- UCSC_get_cpg_islands
- GEO_search_methylation_arrays
- IHEC_query_reference_epigenomes
**Effort**: 1-2 days (use api-tool-builder agent)
**Impact**: Fills major tool gap, increases BixBench coverage
**Testability**: Can test on public data (no Code Ocean required)
---
### Priority 3: Test on Public Datasets (🟢 Validation)
**Action**: Create BixBench-style questions using PUBLIC data sources.
**Alternative Test Questions**:
**RNA-seq DESeq2**:
- "Using GTEx lung tissue data, find genes differentially expressed between smokers and non-smokers"
- Data: GTEx Portal (public API)
- Testable: ✅ Yes
**Variant Analysis**:
- "In ClinVar, what proportion of TP53 missense variants are classified as pathogenic?"
- Data: ClinVar API (public)
- Testable: ✅ Yes
**Single-Cell**:
- "Using CELLxGENE, find marker genes for CD8+ T cells in lung tissue"
- Data: CELLxGENE API (public)
- Testable: ✅ Yes
**Statistical Modeling**:
- "Using TCGA clinical data, calculate odds ratio for TP53 mutation vs. smoking status"
- Data: TCGA API (public)
- Testable: ⚠️ Partial (still requires local computation)
**Effort**: 2-3 days to create public-data test suite
**Impact**: Enables realistic skill validation without Code Ocean
---
### Priority 4: Enhance Existing Tool Coverage (🟢 Incremental)
**Action**: Build 5-10 tools in underrepresented domains.
**Target Domains**:
1. **Phylogenetics**: TreeBASE, Open Tree of Life APIs
2. **Metagenomics**: MGnify, IMG/M APIs (already started)
3. **Metabolomics**: MetaboLights, HMDB APIs
4. **Structural Biology**: PDBe REST API enhancements
**Effort**: 1-2 days per domain
**Impact**: Incremental improvement, fills specific gaps
---
## Testing Metrics: Before vs. After
### Current State (Real-World Testing)
- **Questions tested**: 5
- **Agent success rate**: 0/5 (0%)
- **Data access failures**: 5/5 (100%)
- **Tool coverage gaps**: 3/5 (60%)
- **Computation scope issues**: 3/5 (60%)
### Expected State (After Priority 1-3)
- **Documentation clarity**: ✅ Users understand scope
- **Epigenomics coverage**: ✅ 5-10 new tools
- **Public data testing**: ✅ Alternative benchmark created
- **Agent success rate**: Estimated 40-60% (with public data, within scope)
### What Will Still Fail
- ❌ Questions requiring local computation (ANOVA, regression)
- ❌ Questions requiring Code Ocean data (unless migrated)
- ❌ Questions requiring raw data processing (FASTQ → counts)
**This is by design** - ToolUniverse focuses on API discovery, not computation.
---
## Conclusion
Real-world testing revealed that ToolUniverse is **excellent at what it's designed for** (API search, metadata retrieval, cross-referencing) but **not designed for** computational benchmarks like BixBench (data processing, statistical analysis).
**Key Takeaways**:
1. ✅ **Router works perfectly** - 100% routing accuracy
2. ✅ **Skills are high-quality guides** - Agents found workflows helpful
3. ❌ **Data access is critical blocker** - Code Ocean prevents execution
4. ❌ **Computation vs. discovery gap** - Fundamental design mismatch
5. 🟡 **Tool coverage has gaps** - Epigenomics, phylogenetics quality metrics
**Next Steps**:
1. **Document scope clearly** (Priority 1) - 1 hour
2. **Build epigenomics tools** (Priority 2) - 1-2 days
3. **Create public-data test suite** (Priority 3) - 2-3 days
4. **Enhance tool coverage** (Priority 4) - Ongoing
**Overall Assessment**: ToolUniverse is production-ready for its intended use case (API-based scientific research assistance). It is NOT designed to replace computational notebooks or data analysis environments, and that's okay.
---
**Report Generated**: 2026-02-17
**Status**: ✅ COMPLETE - Weakpoints Identified, Recommendations Provided
@@ -0,0 +1,932 @@
[
{
"name": "ENCODE_search_histone_experiments",
"type": "EpigenomicsTool",
"description": "Search ENCODE histone ChIP-seq experiments by histone modification mark, biosample, or organism. Returns experiment accessions, histone marks (H3K4me3, H3K27ac, H3K27me3, H3K36me3, H3K4me1, H3K9me3), biosample summaries, and metadata. Use this to find histone modification profiling data for specific marks or tissues. Common marks: H3K4me3 (active promoters), H3K27ac (active enhancers), H3K27me3 (polycomb repression), H3K4me1 (poised enhancers), H3K36me3 (gene bodies), H3K9me3 (heterochromatin).",
"parameter": {
"type": "object",
"properties": {
"histone_mark": {
"type": ["string", "null"],
"description": "Histone modification mark to filter by (e.g., 'H3K4me3', 'H3K27ac', 'H3K27me3', 'H3K4me1', 'H3K36me3', 'H3K9me3'). Leave empty to search all histone marks."
},
"biosample_term_name": {
"type": ["string", "null"],
"description": "Biosample name filter (e.g., 'K562', 'HepG2', 'GM12878', 'liver', 'brain'). Leave empty to search all biosamples."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism scientific name (e.g., 'Homo sapiens', 'Mus musculus')."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of results to return (1-100)."
}
}
},
"fields": {
"endpoint": "histone_chipseq"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"experiments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"histone_mark": {"type": "string"},
"biosample_summary": {"type": "string"},
"status": {"type": "string"},
"lab": {"type": "string"},
"date_released": {"type": ["string", "null"]}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"histone_mark": "H3K27ac", "organism": "Homo sapiens", "limit": 3},
{"histone_mark": "H3K4me3", "limit": 2}
],
"label": ["ENCODE", "Histone", "ChIP-seq", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "histone-modification", "chip-seq", "chromatin"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "ENCODE_search_methylation_experiments",
"type": "EpigenomicsTool",
"description": "Search ENCODE whole-genome bisulfite sequencing (WGBS) and reduced-representation bisulfite sequencing (RRBS) experiments for DNA methylation profiling. Returns experiment accessions, biosample information, methylation assay type, and metadata. DNA methylation (5mC) at CpG sites is a key epigenetic mark regulating gene silencing, genomic imprinting, and X-inactivation. Use this to find methylation data for specific tissues, cell lines, or developmental stages.",
"parameter": {
"type": "object",
"properties": {
"assay_type": {
"type": "string",
"default": "WGBS",
"description": "Methylation assay type: 'WGBS' (whole-genome bisulfite sequencing, comprehensive CpG coverage) or 'RRBS' (reduced-representation, enriched for CpG islands)."
},
"biosample_term_name": {
"type": ["string", "null"],
"description": "Biosample name filter (e.g., 'K562', 'liver', 'brain', 'motor neuron'). Leave empty for all."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism scientific name."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of results to return."
}
}
},
"fields": {
"endpoint": "methylation"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"experiments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"assay_title": {"type": "string"},
"biosample_summary": {"type": "string"},
"status": {"type": "string"},
"lab": {"type": "string"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"assay_type": "WGBS", "organism": "Homo sapiens", "limit": 3},
{"assay_type": "RRBS", "limit": 2}
],
"label": ["ENCODE", "Methylation", "WGBS", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "dna-methylation", "bisulfite-sequencing", "cpg"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "ENCODE_search_chromatin_accessibility",
"type": "EpigenomicsTool",
"description": "Search ENCODE chromatin accessibility experiments (ATAC-seq and DNase-seq). ATAC-seq and DNase-seq identify open chromatin regions including promoters, enhancers, and other regulatory elements. Returns experiment accessions, biosample details, and accessibility assay metadata. Open chromatin regions are sites of active gene regulation where transcription factors can bind. Use this to find chromatin accessibility data for specific tissues or cell types.",
"parameter": {
"type": "object",
"properties": {
"assay_type": {
"type": "string",
"default": "ATAC-seq",
"description": "Chromatin accessibility assay: 'ATAC-seq' (Assay for Transposase-Accessible Chromatin, newer/preferred) or 'DNase-seq' (DNase I hypersensitive sites, larger dataset)."
},
"biosample_term_name": {
"type": ["string", "null"],
"description": "Biosample name filter (e.g., 'K562', 'GM12878', 'liver'). Leave empty for all."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism scientific name."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of results to return."
}
}
},
"fields": {
"endpoint": "chromatin_accessibility"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"experiments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"assay_title": {"type": "string"},
"biosample_summary": {"type": "string"},
"status": {"type": "string"},
"lab": {"type": "string"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"assay_type": "ATAC-seq", "organism": "Homo sapiens", "limit": 3},
{"assay_type": "DNase-seq", "limit": 2}
],
"label": ["ENCODE", "ATAC-seq", "DNase-seq", "Chromatin", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "chromatin-accessibility", "atac-seq", "dnase-seq", "open-chromatin"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "ENCODE_search_annotations",
"type": "EpigenomicsTool",
"description": "Search ENCODE annotations including candidate cis-Regulatory Elements (cCREs), chromatin states, and imputed signals. cCREs are classified as promoter-like (PLS), proximal enhancer-like (pELS), distal enhancer-like (dELS), DNase-H3K4me3 (DNase-H3K4me3), and CTCF-only. Chromatin state annotations use ChromHMM models to segment the genome into functional states. Use this to find regulatory element annotations for specific biosamples or genome assemblies.",
"parameter": {
"type": "object",
"properties": {
"annotation_type": {
"type": "string",
"default": "candidate Cis-Regulatory Elements",
"description": "Annotation type filter. Options: 'candidate Cis-Regulatory Elements' (cCREs), 'chromatin state' (ChromHMM), 'imputed signal' (predicted epigenetic marks). Default: cCREs."
},
"biosample_term_name": {
"type": ["string", "null"],
"description": "Biosample filter (e.g., 'K562', 'HepG2'). Leave empty for all."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism scientific name."
},
"assembly": {
"type": "string",
"default": "GRCh38",
"description": "Genome assembly (e.g., 'GRCh38', 'hg19', 'mm10')."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of results."
}
}
},
"fields": {
"endpoint": "annotations"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"annotations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"annotation_type": {"type": ["string", "null"]},
"description": {"type": "string"},
"biosample_summary": {"type": ["string", "null"]},
"status": {"type": "string"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"annotation_type": "candidate Cis-Regulatory Elements", "organism": "Homo sapiens", "limit": 3},
{"annotation_type": "chromatin state", "limit": 2}
],
"label": ["ENCODE", "Annotation", "cCRE", "Chromatin State", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "regulatory-elements", "ccre", "chromatin-state"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "UCSC_get_cpg_islands",
"type": "UCSCEpigenomicsTool",
"description": "Get CpG island annotations for a genomic region from UCSC Genome Browser. CpG islands are genomic regions with high CpG dinucleotide density, often found at gene promoters. Methylation of CpG islands is associated with gene silencing. Returns CpG island locations, length, CpG count, GC content, and observed/expected CpG ratio. Use this to identify CpG islands near genes of interest for methylation analysis, or to characterize the regulatory landscape of a genomic region.",
"parameter": {
"type": "object",
"properties": {
"genome": {
"type": "string",
"default": "hg38",
"description": "Genome assembly (e.g., 'hg38', 'hg19', 'mm10', 'mm39')."
},
"chrom": {
"type": "string",
"description": "Chromosome name (e.g., 'chr17', 'chr1', 'chrX')."
},
"start": {
"type": "integer",
"description": "Start position (0-based, inclusive)."
},
"end": {
"type": "integer",
"description": "End position (0-based, exclusive)."
}
},
"required": ["chrom", "start", "end"]
},
"fields": {
"endpoint": "cpg_islands"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"genome": {"type": "string"},
"region": {"type": "string"},
"cpg_island_count": {"type": "integer"},
"cpg_islands": {
"type": "array",
"items": {
"type": "object",
"properties": {
"chrom": {"type": "string"},
"chromStart": {"type": "integer"},
"chromEnd": {"type": "integer"},
"name": {"type": "string"},
"length": {"type": "integer"},
"cpgNum": {"type": "integer"},
"gcNum": {"type": "integer"},
"perCpg": {"type": "number"},
"perGc": {"type": "number"},
"obsExp": {"type": "number"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"genome": "hg38", "chrom": "chr17", "start": 7668421, "end": 7687490},
{"genome": "hg38", "chrom": "chr1", "start": 11000000, "end": 11100000}
],
"label": ["UCSC", "CpG Islands", "Methylation", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "cpg-islands", "methylation", "promoters"],
"estimated_execution_time": "< 3 seconds"
}
},
{
"name": "UCSC_get_encode_cCREs",
"type": "UCSCEpigenomicsTool",
"description": "Get ENCODE4 candidate cis-Regulatory Elements (cCREs) for a genomic region from UCSC Genome Browser. cCREs are classified by epigenetic signatures into: Promoter-like (PLS, red), Proximal enhancer-like (pELS, orange), Distal enhancer-like (dELS, yellow), DNase-H3K4me3 (blue), CTCF-only/CTCF-bound (green). Each cCRE includes max Z-scores for DNase, H3K4me3, H3K27ac, and CTCF signals across biosamples. Use this to identify regulatory elements in a region of interest for functional genomics or GWAS variant interpretation.",
"parameter": {
"type": "object",
"properties": {
"genome": {
"type": "string",
"default": "hg38",
"description": "Genome assembly (e.g., 'hg38', 'mm10')."
},
"chrom": {
"type": "string",
"description": "Chromosome name (e.g., 'chr17')."
},
"start": {
"type": "integer",
"description": "Start position (0-based)."
},
"end": {
"type": "integer",
"description": "End position (0-based)."
}
},
"required": ["chrom", "start", "end"]
},
"fields": {
"endpoint": "encode_ccres"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"genome": {"type": "string"},
"region": {"type": "string"},
"ccre_count": {"type": "integer"},
"ccres": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"chrom": {"type": "string"},
"chromStart": {"type": "integer"},
"chromEnd": {"type": "integer"},
"cCRE_class": {"type": "string"},
"DNase_maxZ": {"type": "number"},
"H3K4me3_maxZ": {"type": "number"},
"H3K27ac_maxZ": {"type": "number"},
"CTCF_maxZ": {"type": "number"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"genome": "hg38", "chrom": "chr17", "start": 7668421, "end": 7687490},
{"genome": "hg38", "chrom": "chr7", "start": 140424943, "end": 140524564}
],
"label": ["UCSC", "ENCODE", "cCRE", "Regulatory Elements", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "regulatory-elements", "ccre", "encode", "enhancers", "promoters"],
"estimated_execution_time": "< 3 seconds"
}
},
{
"name": "UCSC_get_tf_binding_clusters",
"type": "UCSCEpigenomicsTool",
"description": "Get Transcription Factor ChIP-seq Clusters from ENCODE3 for a genomic region via UCSC Genome Browser. Returns clusters of TF binding sites from 340 factors across 129 cell types, aggregated from ENCODE3 ChIP-seq peak data. Each cluster shows the transcription factor name, peak score, and number of source experiments. Use this to identify which transcription factors bind to a specific genomic region, discover regulatory hotspots, or interpret GWAS variants by finding overlapping TF binding sites.",
"parameter": {
"type": "object",
"properties": {
"genome": {
"type": "string",
"default": "hg38",
"description": "Genome assembly (e.g., 'hg38', 'hg19')."
},
"chrom": {
"type": "string",
"description": "Chromosome name (e.g., 'chr17')."
},
"start": {
"type": "integer",
"description": "Start position (0-based)."
},
"end": {
"type": "integer",
"description": "End position (0-based)."
}
},
"required": ["chrom", "start", "end"]
},
"fields": {
"endpoint": "tf_binding"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"genome": {"type": "string"},
"region": {"type": "string"},
"tf_cluster_count": {"type": "integer"},
"tf_clusters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"chrom": {"type": "string"},
"chromStart": {"type": "integer"},
"chromEnd": {"type": "integer"},
"score": {"type": "integer"},
"sourceCount": {"type": "integer"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"genome": "hg38", "chrom": "chr17", "start": 7668421, "end": 7687490},
{"genome": "hg38", "chrom": "chr7", "start": 140424943, "end": 140524564}
],
"label": ["UCSC", "ENCODE", "TF Binding", "ChIP-seq", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "transcription-factors", "chip-seq", "binding-sites"],
"estimated_execution_time": "< 3 seconds"
}
},
{
"name": "GEO_search_methylation_datasets",
"type": "EpigenomicsTool",
"description": "Search NCBI GEO for DNA methylation array datasets, including Illumina 450K, EPIC (850K), and other methylation profiling platforms. Returns dataset accessions (GSE IDs), titles, summaries, platform information, sample counts, and organisms. DNA methylation arrays measure methylation levels at hundreds of thousands of CpG sites genome-wide. Use this to find published methylation studies for specific conditions, tissues, or diseases. Follow up with GEO_get_dataset_details for full metadata.",
"parameter": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search terms for methylation datasets (e.g., 'breast cancer methylation', 'brain methylation aging', 'CpG island methylation'). Combined with methylation platform filter."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism filter (e.g., 'Homo sapiens', 'Mus musculus')."
},
"limit": {
"type": "integer",
"default": 20,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of dataset IDs to return."
}
},
"required": ["query"]
},
"fields": {
"endpoint": "geo_methylation_search"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"datasets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"title": {"type": "string"},
"summary": {"type": "string"},
"platform": {"type": ["string", "null"]},
"organism": {"type": "string"},
"n_samples": {"type": "integer"},
"date_published": {"type": ["string", "null"]}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"query": "breast cancer methylation 450K", "organism": "Homo sapiens", "limit": 5},
{"query": "brain aging methylation EPIC", "limit": 3}
],
"label": ["GEO", "Methylation", "Array", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "methylation-array", "450k", "epic", "geo"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "GEO_search_chipseq_datasets",
"type": "EpigenomicsTool",
"description": "Search NCBI GEO for ChIP-seq (Chromatin Immunoprecipitation followed by sequencing) datasets. ChIP-seq profiles genome-wide binding of proteins (transcription factors, histones) to DNA. Returns dataset accessions, titles, summaries, and sample counts. Use this to find ChIP-seq studies for specific transcription factors, histone marks, or in specific cell types/diseases.",
"parameter": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search terms for ChIP-seq datasets (e.g., 'H3K27ac liver', 'CTCF cancer', 'p53 ChIP-seq')."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism filter."
},
"limit": {
"type": "integer",
"default": 20,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of dataset IDs to return."
}
},
"required": ["query"]
},
"fields": {
"endpoint": "geo_chipseq_search"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"datasets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"title": {"type": "string"},
"summary": {"type": "string"},
"organism": {"type": "string"},
"n_samples": {"type": "integer"},
"date_published": {"type": ["string", "null"]}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"query": "H3K27ac liver", "organism": "Homo sapiens", "limit": 5},
{"query": "CTCF ChIP-seq cancer", "limit": 3}
],
"label": ["GEO", "ChIP-seq", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "chip-seq", "histone", "transcription-factor"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "GEO_get_dataset_details",
"type": "EpigenomicsTool",
"description": "Get detailed metadata for a specific GEO dataset by its accession (GSE ID). Returns comprehensive information including title, summary, experiment type, platform, organism, sample count, publication date, and supplementary data links. Use this after searching with GEO_search_methylation_datasets or GEO_search_chipseq_datasets to get full details about a dataset of interest.",
"parameter": {
"type": "object",
"properties": {
"geo_id": {
"type": "string",
"description": "GEO dataset accession (numeric part only, e.g., '200291249' for GSE291249). Get IDs from GEO search results."
}
},
"required": ["geo_id"]
},
"fields": {
"endpoint": "geo_dataset_details"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"title": {"type": "string"},
"summary": {"type": "string"},
"experiment_type": {"type": ["string", "null"]},
"platform": {"type": ["string", "null"]},
"organism": {"type": "string"},
"n_samples": {"type": "integer"},
"date_published": {"type": ["string", "null"]},
"supplementary_data": {"type": ["array", "null"]}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"geo_id": "200291249"},
{"geo_id": "200236530"}
],
"label": ["GEO", "Dataset", "Details", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "geo", "dataset-metadata"],
"estimated_execution_time": "< 3 seconds"
}
},
{
"name": "EnsemblReg_get_regulatory_elements",
"type": "EpigenomicsTool",
"description": "Get Ensembl regulatory features (enhancers, promoters, CTCF binding sites, open chromatin, TF binding sites) for a genomic region from the Ensembl Regulatory Build. The Ensembl Regulatory Build integrates epigenomic data from ENCODE, Roadmap Epigenomics, and BLUEPRINT to annotate regulatory elements across the human genome. Returns feature IDs, types, coordinates, and extended bounds. Use this to identify known regulatory elements in a region of interest for epigenomic analysis or variant interpretation.",
"parameter": {
"type": "object",
"properties": {
"species": {
"type": "string",
"default": "homo_sapiens",
"description": "Species name (e.g., 'homo_sapiens', 'mus_musculus')."
},
"chrom": {
"type": "string",
"description": "Chromosome number without 'chr' prefix (e.g., '17', '7', 'X')."
},
"start": {
"type": "integer",
"description": "Start position (1-based)."
},
"end": {
"type": "integer",
"description": "End position (1-based)."
}
},
"required": ["chrom", "start", "end"]
},
"fields": {
"endpoint": "ensembl_regulatory"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"species": {"type": "string"},
"region": {"type": "string"},
"feature_count": {"type": "integer"},
"regulatory_features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"description": {"type": "string"},
"feature_type": {"type": "string"},
"start": {"type": "integer"},
"end": {"type": "integer"},
"strand": {"type": "integer"},
"seq_region_name": {"type": "string"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"species": "homo_sapiens", "chrom": "17", "start": 7668421, "end": 7687490},
{"species": "homo_sapiens", "chrom": "7", "start": 140424943, "end": 140524564}
],
"label": ["Ensembl", "Regulatory", "Enhancer", "Promoter", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "regulatory-elements", "ensembl", "enhancers", "promoters"],
"estimated_execution_time": "< 5 seconds"
}
},
{
"name": "ENCODE_get_chromatin_state",
"type": "EpigenomicsTool",
"description": "Search ENCODE chromatin state annotations (ChromHMM segmentations) for specific biosamples or tissues. Chromatin states are genome-wide annotations that classify each genomic position into a functional state (e.g., active TSS, flanking active TSS, strong transcription, weak transcription, genic enhancers, active enhancers, bivalent enhancer, bivalent/poised TSS, flanking bivalent TSS, repressed polycomb, weak repressed polycomb, quiescent, heterochromatin) based on combinatorial patterns of histone marks. Use this to understand the chromatin landscape of specific cell types.",
"parameter": {
"type": "object",
"properties": {
"biosample_term_name": {
"type": ["string", "null"],
"description": "Biosample name (e.g., 'K562', 'HepG2', 'GM12878', 'liver'). Leave empty for all."
},
"organism": {
"type": "string",
"default": "Homo sapiens",
"description": "Organism scientific name."
},
"limit": {
"type": "integer",
"default": 25,
"minimum": 1,
"maximum": 100,
"description": "Maximum number of results."
}
}
},
"fields": {
"endpoint": "chromatin_state"
},
"return_schema": {
"oneOf": [
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"total": {"type": "integer"},
"annotations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accession": {"type": "string"},
"annotation_type": {"type": ["string", "null"]},
"description": {"type": "string"},
"biosample_summary": {"type": ["string", "null"]},
"status": {"type": "string"}
}
}
}
}
},
"metadata": {"type": "object"}
}
},
{
"type": "object",
"properties": {
"error": {"type": "string"}
},
"required": ["error"]
}
]
},
"test_examples": [
{"biosample_term_name": "K562", "organism": "Homo sapiens", "limit": 3},
{"organism": "Homo sapiens", "limit": 5}
],
"label": ["ENCODE", "Chromatin State", "ChromHMM", "Epigenomics"],
"metadata": {
"tags": ["epigenomics", "chromatin-state", "chromhmm", "functional-annotation"],
"estimated_execution_time": "< 5 seconds"
}
}
]
+23 -75
View File
@@ -487,83 +487,31 @@ default_tool_files = {
"disease_ontology": os.path.join(
current_dir, "data", "disease_ontology_tools.json"
),
# PDBe SIFTS - UniProt-to-PDB structure mapping (best structures, chain mapping, coverage)
"pdbe_sifts": os.path.join(current_dir, "data", "pdbe_sifts_tools.json"),
# OrthoDB v12 - Orthologous groups at different taxonomic levels (search, details, members)
"orthodb": os.path.join(current_dir, "data", "orthodb_tools.json"),
# BioPortal (NCBO) - Cross-ontology search, concept details, text annotation, hierarchy browsing (900+ ontologies)
"bioportal": os.path.join(current_dir, "data", "bioportal_tools.json"),
# SynBioHub - Synthetic biology parts repository (iGEM BioBricks, SBOL genetic designs)
"synbiohub": os.path.join(current_dir, "data", "synbiohub_tools.json"),
# EBI Proteins Epitopes - Experimentally-determined immune epitope regions (from IEDB)
"ebi_proteins_epitope": os.path.join(
current_dir, "data", "ebi_proteins_epitope_tools.json"
# RCSB PDB Data API - Direct REST access to PDB entry details, assemblies, non-polymer entities
"rcsb_data": os.path.join(current_dir, "data", "rcsb_data_tools.json"),
# EBI Proteins Features - Domain/site annotations, molecule processing, secondary structure
"ebi_proteins_features": os.path.join(
current_dir, "data", "ebi_proteins_features_tools.json"
),
# Reactome Interactors - Protein-protein interactions and entity pathway discovery
"reactome_interactors": os.path.join(
current_dir, "data", "reactome_interactors_tools.json"
# InterPro Extended - Reverse lookup: find proteins containing a specific domain
"interpro_ext": os.path.join(current_dir, "data", "interpro_ext_tools.json"),
# STRING Extended - Per-protein functional annotations (GO, KEGG, disease, tissue)
"string_ext": os.path.join(current_dir, "data", "string_ext_tools.json"),
# Ensembl Info - Genome assembly metadata and species catalog
"ensembl_info": os.path.join(current_dir, "data", "ensembl_info_tools.json"),
# Epigenomics - Histone marks, DNA methylation, chromatin accessibility, regulatory elements
"epigenomics": os.path.join(current_dir, "data", "epigenomics_tools.json"),
# 3D Beacons - Aggregated 3D structure models from PDBe, AlphaFold, SWISS-MODEL, PED
"three_d_beacons": os.path.join(current_dir, "data", "three_d_beacons_tools.json"),
# Reactome Content Service - Pathway search, contained events, enhanced details
"reactome_content": os.path.join(
current_dir, "data", "reactome_content_tools.json"
),
# Ensembl Structural Variants - SV overlap queries and detailed SV info (DGVa, ClinGen)
"ensembl_sv": os.path.join(current_dir, "data", "ensembl_sv_tools.json"),
# ClinGen Dosage API - JSON API for dosage sensitivity (haploinsufficiency, triplosensitivity)
"clingen_dosage_api": os.path.join(
current_dir, "data", "clingen_dosage_api_tools.json"
),
# OmniPath - Integrated intercellular signaling (ligand-receptor, signaling, complexes, PTMs)
"omnipath": os.path.join(current_dir, "data", "omnipath_tools.json"),
# RCSB PDB Advanced Search - Multi-attribute structure search (organism, resolution, method, motif)
"rcsb_advanced_search": os.path.join(
current_dir, "data", "rcsb_advanced_search_tools.json"
),
# RCSB PDB GraphQL Data API - Rich structure details, ligand info, polymer entities
"rcsb_graphql": os.path.join(current_dir, "data", "rcsb_graphql_tools.json"),
# UniProt Subcellular Locations - Cell compartment definitions and protein localization
"uniprot_locations": os.path.join(
current_dir, "data", "uniprot_locations_tools.json"
),
# UniProt UniRef Clusters - Protein sequence clustering at 50/90/100% identity
"uniref": os.path.join(current_dir, "data", "uniref_tools.json"),
# Ensembl Assembly Mapping - Coordinate conversion between genome assemblies and protein/cDNA to genomic
"ensembl_map": os.path.join(current_dir, "data", "ensembl_map_tools.json"),
# Ensembl Variation Extended - Variant population frequencies and detailed variant records
"ensembl_variation_ext": os.path.join(
current_dir, "data", "ensembl_variation_ext_tools.json"
),
# PDBe Validation - Structure quality percentile scores and residue-level outliers
"pdbe_validation": os.path.join(current_dir, "data", "pdbe_validation_tools.json"),
# UniProt Taxonomy - Species taxonomy details, lineage, protein statistics, and search
"uniprot_taxonomy": os.path.join(
current_dir, "data", "uniprot_taxonomy_tools.json"
),
# Harmonizome - Gene information from 100+ integrated genomics datasets (Ma'ayan Lab)
"harmonizome": os.path.join(current_dir, "data", "harmonizome_tools.json"),
# EBI Proteins Interactions - Protein-protein interactions from IntAct via EBI Proteins API
"ebi_proteins_interactions": os.path.join(
current_dir, "data", "ebi_proteins_interactions_tools.json"
),
# Genome Nexus - Cancer variant annotation aggregator (MSK: VEP + SIFT + PolyPhen + AlphaMissense + cancer hotspots)
"genome_nexus": os.path.join(current_dir, "data", "genome_nexus_tools.json"),
# g:Profiler - Functional enrichment analysis, gene ID conversion, ortholog mapping (University of Tartu)
"gprofiler": os.path.join(current_dir, "data", "gprofiler_tools.json"),
# Dfam - Transposable element / repeat element families, consensus sequences, genome annotations
"dfam": os.path.join(current_dir, "data", "dfam_tools.json"),
# DisProt - Intrinsically disordered proteins, experimentally validated disorder regions
"disprot": os.path.join(current_dir, "data", "disprot_tools.json"),
# MobiDB - Protein disorder predictions, binding modes, phase separation, PTMs
"mobidb": os.path.join(current_dir, "data", "mobidb_tools.json"),
# UniProt UniParc - Non-redundant protein sequence archive across all databases
"uniparc": os.path.join(current_dir, "data", "uniparc_tools.json"),
# PDBe Compound - Chemical compound details from PDB (formula, SMILES, cross-refs)
"pdbe_compound": os.path.join(current_dir, "data", "pdbe_compound_tools.json"),
# PDBe Ligands - Structure-bound ligands and per-residue listing
"pdbe_ligands": os.path.join(current_dir, "data", "pdbe_ligands_tools.json"),
# Ensembl Overlap - Genomic features overlapping regions or genes
"ensembl_overlap": os.path.join(current_dir, "data", "ensembl_overlap_tools.json"),
# Ensembl Cross-references - External database links for Ensembl IDs
"ensembl_xrefs": os.path.join(current_dir, "data", "ensembl_xrefs_tools.json"),
# EBI Proteins Coordinates - Protein-to-genomic coordinate mapping (exon-level)
"ebi_proteins_coordinates": os.path.join(
current_dir, "data", "ebi_proteins_coordinates_tools.json"
# InterPro Entry - Protein-to-domain mappings and keyword-based entry search
"interpro_entry": os.path.join(current_dir, "data", "interpro_entry_tools.json"),
# Ensembl Sequence - Region DNA and ID-based protein/cDNA sequence retrieval
"ensembl_sequence": os.path.join(
current_dir, "data", "ensembl_sequence_tools.json"
),
}
+767
View File
@@ -0,0 +1,767 @@
# epigenomics_tool.py
"""
Epigenomics and methylation analysis tools for ToolUniverse.
Integrates data from:
- ENCODE Project (histone ChIP-seq, WGBS methylation, ATAC-seq, DNase-seq, annotations)
- UCSC Genome Browser (CpG islands, ENCODE4 cCREs, TF binding clusters)
- NCBI GEO (methylation array datasets, ChIP-seq datasets)
- Ensembl Regulatory Build (regulatory features, enhancers, promoters)
No authentication required for any of these APIs.
"""
import json
import requests
from typing import Dict, Any, Optional
from .base_tool import BaseTool
from .tool_registry import register_tool
ENCODE_BASE_URL = "https://www.encodeproject.org"
UCSC_API_URL = "https://api.genome.ucsc.edu"
NCBI_EUTILS_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"
ENSEMBL_REST_URL = "https://rest.ensembl.org"
@register_tool("EpigenomicsTool")
class EpigenomicsTool(BaseTool):
"""
Tool for epigenomics and methylation analysis across multiple databases.
Supports:
- ENCODE histone ChIP-seq, methylation (WGBS/RRBS), chromatin accessibility
- ENCODE annotations (cCREs, chromatin states)
- GEO methylation and ChIP-seq dataset search
- Ensembl regulatory features
No authentication required.
"""
def __init__(self, tool_config: Dict[str, Any]):
super().__init__(tool_config)
self.timeout = tool_config.get("timeout", 30)
fields = tool_config.get("fields", {})
self.endpoint = fields.get("endpoint", "histone_chipseq")
def run(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Execute the epigenomics API call."""
try:
return self._dispatch(arguments)
except requests.exceptions.Timeout:
return {"error": f"API request timed out after {self.timeout}s"}
except requests.exceptions.ConnectionError:
return {"error": "Failed to connect to API. Check network connectivity."}
except requests.exceptions.HTTPError as e:
status = e.response.status_code if e.response is not None else "unknown"
return {"error": f"API HTTP error: {status}"}
except Exception as e:
return {"error": f"Unexpected error: {str(e)}"}
def _dispatch(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Route to appropriate endpoint based on config."""
if self.endpoint == "histone_chipseq":
return self._encode_histone_search(arguments)
elif self.endpoint == "methylation":
return self._encode_methylation_search(arguments)
elif self.endpoint == "chromatin_accessibility":
return self._encode_chromatin_accessibility_search(arguments)
elif self.endpoint == "annotations":
return self._encode_annotations_search(arguments)
elif self.endpoint == "chromatin_state":
return self._encode_chromatin_state_search(arguments)
elif self.endpoint == "geo_methylation_search":
return self._geo_methylation_search(arguments)
elif self.endpoint == "geo_chipseq_search":
return self._geo_chipseq_search(arguments)
elif self.endpoint == "geo_dataset_details":
return self._geo_dataset_details(arguments)
elif self.endpoint == "ensembl_regulatory":
return self._ensembl_regulatory_features(arguments)
else:
return {"error": f"Unknown endpoint: {self.endpoint}"}
# =========================================================================
# ENCODE Search Tools
# =========================================================================
def _encode_search(self, params: Dict[str, Any]) -> Dict[str, Any]:
"""Generic ENCODE search helper."""
url = f"{ENCODE_BASE_URL}/search/"
params["format"] = "json"
response = requests.get(
url,
params=params,
headers={"Accept": "application/json"},
timeout=self.timeout,
)
response.raise_for_status()
return response.json()
def _encode_histone_search(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Search ENCODE histone ChIP-seq experiments."""
params = {
"type": "Experiment",
"assay_title": "Histone ChIP-seq",
"status": "released",
}
histone_mark = arguments.get("histone_mark")
if histone_mark:
params["target.label"] = histone_mark
biosample = arguments.get("biosample_term_name")
if biosample:
params["biosample_ontology.term_name"] = biosample
organism = arguments.get("organism", "Homo sapiens")
if organism:
params["replicates.library.biosample.organism.scientific_name"] = organism
limit = arguments.get("limit", 25)
params["limit"] = min(int(limit), 100)
raw = self._encode_search(params)
experiments = []
for exp in raw.get("@graph", []):
target = exp.get("target", {})
mark = target.get("label", "") if isinstance(target, dict) else str(target)
lab = exp.get("lab", {})
lab_name = lab.get("title", "") if isinstance(lab, dict) else str(lab)
experiments.append(
{
"accession": exp.get("accession", ""),
"histone_mark": mark,
"biosample_summary": exp.get("biosample_summary", ""),
"status": exp.get("status", ""),
"lab": lab_name,
"date_released": exp.get("date_released"),
}
)
return {
"data": {
"total": raw.get("total", 0),
"experiments": experiments,
},
"metadata": {
"source": "ENCODE Project (encodeproject.org)",
"assay": "Histone ChIP-seq",
"histone_mark_filter": histone_mark,
"organism": organism,
},
}
def _encode_methylation_search(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Search ENCODE methylation experiments (WGBS/RRBS)."""
assay_type = arguments.get("assay_type", "WGBS")
params = {
"type": "Experiment",
"assay_title": assay_type,
"status": "released",
}
biosample = arguments.get("biosample_term_name")
if biosample:
params["biosample_ontology.term_name"] = biosample
organism = arguments.get("organism", "Homo sapiens")
if organism:
params["replicates.library.biosample.organism.scientific_name"] = organism
limit = arguments.get("limit", 25)
params["limit"] = min(int(limit), 100)
raw = self._encode_search(params)
experiments = []
for exp in raw.get("@graph", []):
lab = exp.get("lab", {})
lab_name = lab.get("title", "") if isinstance(lab, dict) else str(lab)
experiments.append(
{
"accession": exp.get("accession", ""),
"assay_title": exp.get("assay_title", ""),
"biosample_summary": exp.get("biosample_summary", ""),
"status": exp.get("status", ""),
"lab": lab_name,
}
)
return {
"data": {
"total": raw.get("total", 0),
"experiments": experiments,
},
"metadata": {
"source": "ENCODE Project (encodeproject.org)",
"assay": assay_type,
"organism": organism,
},
}
def _encode_chromatin_accessibility_search(
self, arguments: Dict[str, Any]
) -> Dict[str, Any]:
"""Search ENCODE chromatin accessibility experiments (ATAC-seq / DNase-seq)."""
assay_type = arguments.get("assay_type", "ATAC-seq")
params = {
"type": "Experiment",
"assay_title": assay_type,
"status": "released",
}
biosample = arguments.get("biosample_term_name")
if biosample:
params["biosample_ontology.term_name"] = biosample
organism = arguments.get("organism", "Homo sapiens")
if organism:
params["replicates.library.biosample.organism.scientific_name"] = organism
limit = arguments.get("limit", 25)
params["limit"] = min(int(limit), 100)
raw = self._encode_search(params)
experiments = []
for exp in raw.get("@graph", []):
lab = exp.get("lab", {})
lab_name = lab.get("title", "") if isinstance(lab, dict) else str(lab)
experiments.append(
{
"accession": exp.get("accession", ""),
"assay_title": exp.get("assay_title", ""),
"biosample_summary": exp.get("biosample_summary", ""),
"status": exp.get("status", ""),
"lab": lab_name,
}
)
return {
"data": {
"total": raw.get("total", 0),
"experiments": experiments,
},
"metadata": {
"source": "ENCODE Project (encodeproject.org)",
"assay": assay_type,
"organism": organism,
},
}
def _encode_annotations_search(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Search ENCODE annotations (cCREs, chromatin states)."""
annotation_type = arguments.get(
"annotation_type", "candidate Cis-Regulatory Elements"
)
params = {
"type": "Annotation",
"annotation_type": annotation_type,
"status": "released",
}
biosample = arguments.get("biosample_term_name")
if biosample:
params["biosample_ontology.term_name"] = biosample
organism = arguments.get("organism", "Homo sapiens")
if organism:
params["organism.scientific_name"] = organism
assembly = arguments.get("assembly", "GRCh38")
if assembly:
params["assembly"] = assembly
limit = arguments.get("limit", 25)
params["limit"] = min(int(limit), 100)
raw = self._encode_search(params)
annotations = []
for ann in raw.get("@graph", []):
annotations.append(
{
"accession": ann.get("accession", ""),
"annotation_type": ann.get("annotation_type"),
"description": ann.get("description", ""),
"biosample_summary": ann.get("biosample_summary"),
"status": ann.get("status", ""),
}
)
return {
"data": {
"total": raw.get("total", 0),
"annotations": annotations,
},
"metadata": {
"source": "ENCODE Project (encodeproject.org)",
"annotation_type": annotation_type,
"organism": organism,
"assembly": assembly,
},
}
def _encode_chromatin_state_search(
self, arguments: Dict[str, Any]
) -> Dict[str, Any]:
"""Search ENCODE chromatin state annotations (ChromHMM)."""
params = {
"type": "Annotation",
"annotation_type": "chromatin state",
"status": "released",
}
biosample = arguments.get("biosample_term_name")
if biosample:
params["biosample_ontology.term_name"] = biosample
organism = arguments.get("organism", "Homo sapiens")
if organism:
params["organism.scientific_name"] = organism
limit = arguments.get("limit", 25)
params["limit"] = min(int(limit), 100)
raw = self._encode_search(params)
annotations = []
for ann in raw.get("@graph", []):
annotations.append(
{
"accession": ann.get("accession", ""),
"annotation_type": ann.get("annotation_type"),
"description": ann.get("description", ""),
"biosample_summary": ann.get("biosample_summary"),
"status": ann.get("status", ""),
}
)
return {
"data": {
"total": raw.get("total", 0),
"annotations": annotations,
},
"metadata": {
"source": "ENCODE Project (encodeproject.org)",
"annotation_type": "chromatin state",
"organism": organism,
},
}
# =========================================================================
# GEO Search Tools
# =========================================================================
def _geo_esearch(self, term: str, limit: int = 20) -> Dict[str, Any]:
"""Search GEO datasets via NCBI E-utilities."""
url = f"{NCBI_EUTILS_URL}/esearch.fcgi"
params = {
"db": "gds",
"term": term,
"retmax": min(int(limit), 100),
"retmode": "json",
}
response = requests.get(url, params=params, timeout=self.timeout)
response.raise_for_status()
return response.json()
def _geo_esummary(self, ids: list) -> Dict[str, Any]:
"""Get summary for GEO dataset IDs via NCBI E-utilities."""
if not ids:
return {"result": {}}
url = f"{NCBI_EUTILS_URL}/esummary.fcgi"
params = {
"db": "gds",
"id": ",".join(str(i) for i in ids),
"retmode": "json",
}
response = requests.get(url, params=params, timeout=self.timeout)
response.raise_for_status()
return response.json()
def _geo_methylation_search(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Search GEO for methylation array datasets."""
query = arguments.get("query", "")
organism = arguments.get("organism", "Homo sapiens")
limit = arguments.get("limit", 20)
# Build search term with methylation context
term_parts = [query, "methylation"]
if organism:
term_parts.append(f"{organism}[Organism]")
term = " AND ".join(term_parts)
search_result = self._geo_esearch(term, limit)
esearch = search_result.get("esearchresult", {})
total = int(esearch.get("count", 0))
ids = esearch.get("idlist", [])
datasets = []
if ids:
summary_result = self._geo_esummary(ids)
result = summary_result.get("result", {})
for uid in ids:
uid_data = result.get(str(uid), {})
if isinstance(uid_data, dict) and "accession" in uid_data:
datasets.append(
{
"accession": uid_data.get("accession", ""),
"title": uid_data.get("title", ""),
"summary": uid_data.get("summary", "")[:500],
"platform": uid_data.get("gpl"),
"organism": uid_data.get("taxon", ""),
"n_samples": uid_data.get("n_samples", 0),
"date_published": uid_data.get("pdat"),
}
)
return {
"data": {
"total": total,
"datasets": datasets,
},
"metadata": {
"source": "NCBI GEO (ncbi.nlm.nih.gov/geo)",
"query": query,
"search_term": term,
"organism": organism,
},
}
def _geo_chipseq_search(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Search GEO for ChIP-seq datasets."""
query = arguments.get("query", "")
organism = arguments.get("organism", "Homo sapiens")
limit = arguments.get("limit", 20)
# Build search term with ChIP-seq context
term_parts = [query, "ChIP-seq"]
if organism:
term_parts.append(f"{organism}[Organism]")
term = " AND ".join(term_parts)
search_result = self._geo_esearch(term, limit)
esearch = search_result.get("esearchresult", {})
total = int(esearch.get("count", 0))
ids = esearch.get("idlist", [])
datasets = []
if ids:
summary_result = self._geo_esummary(ids)
result = summary_result.get("result", {})
for uid in ids:
uid_data = result.get(str(uid), {})
if isinstance(uid_data, dict) and "accession" in uid_data:
datasets.append(
{
"accession": uid_data.get("accession", ""),
"title": uid_data.get("title", ""),
"summary": uid_data.get("summary", "")[:500],
"organism": uid_data.get("taxon", ""),
"n_samples": uid_data.get("n_samples", 0),
"date_published": uid_data.get("pdat"),
}
)
return {
"data": {
"total": total,
"datasets": datasets,
},
"metadata": {
"source": "NCBI GEO (ncbi.nlm.nih.gov/geo)",
"query": query,
"search_term": term,
"organism": organism,
},
}
def _geo_dataset_details(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Get detailed metadata for a GEO dataset."""
geo_id = arguments.get("geo_id", "")
if not geo_id:
return {"error": "geo_id parameter is required (e.g., '200291249')"}
summary_result = self._geo_esummary([geo_id])
result = summary_result.get("result", {})
uid_data = result.get(str(geo_id), {})
if not isinstance(uid_data, dict) or "accession" not in uid_data:
return {"error": f"Dataset with ID '{geo_id}' not found in GEO"}
ftplink = uid_data.get("ftplink", "")
suppfile = uid_data.get("suppfile", "")
supp_data = []
if ftplink:
supp_data.append(ftplink)
if suppfile:
supp_data.append(suppfile)
return {
"data": {
"accession": uid_data.get("accession", ""),
"title": uid_data.get("title", ""),
"summary": uid_data.get("summary", ""),
"experiment_type": uid_data.get("gdstype"),
"platform": uid_data.get("gpl"),
"organism": uid_data.get("taxon", ""),
"n_samples": uid_data.get("n_samples", 0),
"date_published": uid_data.get("pdat"),
"supplementary_data": supp_data if supp_data else None,
},
"metadata": {
"source": "NCBI GEO (ncbi.nlm.nih.gov/geo)",
"geo_id": geo_id,
},
}
# =========================================================================
# Ensembl Regulatory Features
# =========================================================================
def _ensembl_regulatory_features(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Get Ensembl regulatory features for a genomic region."""
species = arguments.get("species", "homo_sapiens")
chrom = arguments.get("chrom", "")
start = arguments.get("start")
end = arguments.get("end")
if not chrom or start is None or end is None:
return {"error": "chrom, start, and end parameters are required"}
# Ensure region is not too large (max 5Mb)
if end - start > 5000000:
return {"error": "Region too large. Maximum region size is 5 Mb."}
url = (
f"{ENSEMBL_REST_URL}/overlap/region/{species}/{chrom}:{start}-{end}"
f"?feature=regulatory;content-type=application/json"
)
# Ensembl REST API can be slow - use 90s timeout
response = requests.get(url, timeout=max(self.timeout, 90))
response.raise_for_status()
raw = response.json()
features = []
for feat in raw:
features.append(
{
"id": feat.get("id", ""),
"description": feat.get("description", ""),
"feature_type": feat.get("feature_type", ""),
"start": feat.get("start"),
"end": feat.get("end"),
"strand": feat.get("strand", 0),
"seq_region_name": feat.get("seq_region_name", ""),
}
)
return {
"data": {
"species": species,
"region": f"{chrom}:{start}-{end}",
"feature_count": len(features),
"regulatory_features": features,
},
"metadata": {
"source": "Ensembl Regulatory Build (rest.ensembl.org)",
"species": species,
"region": f"{chrom}:{start}-{end}",
},
}
@register_tool("UCSCEpigenomicsTool")
class UCSCEpigenomicsTool(BaseTool):
"""
UCSC Genome Browser epigenomics-specific tools.
Provides access to:
- CpG island annotations
- ENCODE4 candidate cis-Regulatory Elements (cCREs)
- Transcription Factor binding site clusters
No authentication required.
"""
def __init__(self, tool_config: Dict[str, Any]):
super().__init__(tool_config)
self.timeout = tool_config.get("timeout", 30)
fields = tool_config.get("fields", {})
self.endpoint = fields.get("endpoint", "cpg_islands")
def run(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Execute the UCSC epigenomics API call."""
try:
return self._dispatch(arguments)
except requests.exceptions.Timeout:
return {"error": f"UCSC API request timed out after {self.timeout}s"}
except requests.exceptions.ConnectionError:
return {"error": "Failed to connect to UCSC API."}
except requests.exceptions.HTTPError as e:
status = e.response.status_code if e.response is not None else "unknown"
return {"error": f"UCSC API HTTP error: {status}"}
except Exception as e:
return {"error": f"Unexpected error: {str(e)}"}
def _dispatch(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Route to appropriate endpoint."""
if self.endpoint == "cpg_islands":
return self._get_cpg_islands(arguments)
elif self.endpoint == "encode_ccres":
return self._get_encode_ccres(arguments)
elif self.endpoint == "tf_binding":
return self._get_tf_binding_clusters(arguments)
else:
return {"error": f"Unknown endpoint: {self.endpoint}"}
def _ucsc_get_track(
self, genome: str, track: str, chrom: str, start: int, end: int
) -> Dict[str, Any]:
"""Helper to fetch UCSC track data."""
url = (
f"{UCSC_API_URL}/getData/track"
f"?genome={genome}&track={track}&chrom={chrom}&start={start}&end={end}"
)
response = requests.get(url, timeout=self.timeout)
response.raise_for_status()
return response.json()
def _get_cpg_islands(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Get CpG island annotations for a genomic region."""
genome = arguments.get("genome", "hg38")
chrom = arguments.get("chrom", "")
start = arguments.get("start")
end = arguments.get("end")
if not chrom or start is None or end is None:
return {"error": "chrom, start, and end parameters are required"}
raw = self._ucsc_get_track(genome, "cpgIslandExt", chrom, start, end)
items = raw.get("cpgIslandExt", [])
if not isinstance(items, list):
items = []
cpg_islands = []
for item in items:
cpg_islands.append(
{
"chrom": item.get("chrom", ""),
"chromStart": item.get("chromStart"),
"chromEnd": item.get("chromEnd"),
"name": item.get("name", ""),
"length": item.get("length", 0),
"cpgNum": item.get("cpgNum", 0),
"gcNum": item.get("gcNum", 0),
"perCpg": item.get("perCpg", 0),
"perGc": item.get("perGc", 0),
"obsExp": item.get("obsExp", 0),
}
)
return {
"data": {
"genome": genome,
"region": f"{chrom}:{start}-{end}",
"cpg_island_count": len(cpg_islands),
"cpg_islands": cpg_islands,
},
"metadata": {
"source": "UCSC Genome Browser (api.genome.ucsc.edu)",
"track": "cpgIslandExt",
"genome": genome,
},
}
def _get_encode_ccres(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Get ENCODE4 candidate cis-Regulatory Elements for a genomic region."""
genome = arguments.get("genome", "hg38")
chrom = arguments.get("chrom", "")
start = arguments.get("start")
end = arguments.get("end")
if not chrom or start is None or end is None:
return {"error": "chrom, start, and end parameters are required"}
raw = self._ucsc_get_track(genome, "cCREregistry", chrom, start, end)
items = raw.get("cCREregistry", [])
if not isinstance(items, list):
items = []
ccres = []
for item in items:
ccres.append(
{
"name": item.get("name", ""),
"chrom": item.get("chrom", ""),
"chromStart": item.get("chromStart"),
"chromEnd": item.get("chromEnd"),
"cCRE_class": item.get("cCRE_class", ""),
"DNase_maxZ": item.get("DNase_maxZ", 0),
"H3K4me3_maxZ": item.get("H3K4me3_maxZ", 0),
"H3K27ac_maxZ": item.get("H3K27ac_maxZ", 0),
"CTCF_maxZ": item.get("CTCF_maxZ", 0),
}
)
return {
"data": {
"genome": genome,
"region": f"{chrom}:{start}-{end}",
"ccre_count": len(ccres),
"ccres": ccres,
},
"metadata": {
"source": "UCSC Genome Browser / ENCODE4 (api.genome.ucsc.edu)",
"track": "cCREregistry",
"genome": genome,
},
}
def _get_tf_binding_clusters(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
"""Get TF binding site clusters from ENCODE3."""
genome = arguments.get("genome", "hg38")
chrom = arguments.get("chrom", "")
start = arguments.get("start")
end = arguments.get("end")
if not chrom or start is None or end is None:
return {"error": "chrom, start, and end parameters are required"}
raw = self._ucsc_get_track(genome, "encRegTfbsClustered", chrom, start, end)
items = raw.get("encRegTfbsClustered", [])
if not isinstance(items, list):
items = []
tf_clusters = []
for item in items:
tf_clusters.append(
{
"name": item.get("name", ""),
"chrom": item.get("chrom", ""),
"chromStart": item.get("chromStart"),
"chromEnd": item.get("chromEnd"),
"score": item.get("score", 0),
"sourceCount": item.get("sourceCount", 0),
}
)
return {
"data": {
"genome": genome,
"region": f"{chrom}:{start}-{end}",
"tf_cluster_count": len(tf_clusters),
"tf_clusters": tf_clusters,
},
"metadata": {
"source": "UCSC Genome Browser / ENCODE3 (api.genome.ucsc.edu)",
"track": "encRegTfbsClustered",
"genome": genome,
"description": "340 TFs across 129 cell types",
},
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,46 +0,0 @@
"""
ClinGen_dosage_by_gene
Get ClinGen dosage sensitivity curation for a specific gene using the JSON API. Returns haploinsu...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ClinGen_dosage_by_gene(
gene: str,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> dict[str, Any]:
"""
Get ClinGen dosage sensitivity curation for a specific gene using the JSON API. Returns haploinsu...
Parameters
----------
gene : str
Gene symbol to search for (e.g., 'BRCA1', 'MECP2', 'TP53'). Case-insensitive.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
dict[str, Any]
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{"name": "ClinGen_dosage_by_gene", "arguments": {"gene": gene}},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ClinGen_dosage_by_gene"]
@@ -1,49 +0,0 @@
"""
EBIProteins_get_coordinate_mapping
Map UniProt protein positions to genomic coordinates at exon-level resolution. Returns chromosome...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def EBIProteins_get_coordinate_mapping(
accession: str,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Map UniProt protein positions to genomic coordinates at exon-level resolution. Returns chromosome...
Parameters
----------
accession : str
UniProt accession. Examples: 'P04637' (TP53), 'P00533' (EGFR), 'P38398' (BRCA...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "EBIProteins_get_coordinate_mapping",
"arguments": {"accession": accession},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["EBIProteins_get_coordinate_mapping"]
@@ -0,0 +1,59 @@
"""
ENCODE_get_chromatin_state
Search ENCODE chromatin state annotations (ChromHMM segmentations) for specific biosamples or tis...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ENCODE_get_chromatin_state(
biosample_term_name: Optional[str | Any] = None,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 25,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search ENCODE chromatin state annotations (ChromHMM segmentations) for specific biosamples or tis...
Parameters
----------
biosample_term_name : str | Any
Biosample name (e.g., 'K562', 'HepG2', 'GM12878', 'liver'). Leave empty for all.
organism : str
Organism scientific name.
limit : int
Maximum number of results.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ENCODE_get_chromatin_state",
"arguments": {
"biosample_term_name": biosample_term_name,
"organism": organism,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ENCODE_get_chromatin_state"]
@@ -0,0 +1,67 @@
"""
ENCODE_search_annotations
Search ENCODE annotations including candidate cis-Regulatory Elements (cCREs), chromatin states, ...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ENCODE_search_annotations(
annotation_type: Optional[str] = "candidate Cis-Regulatory Elements",
biosample_term_name: Optional[str | Any] = None,
organism: Optional[str] = "Homo sapiens",
assembly: Optional[str] = "GRCh38",
limit: Optional[int] = 25,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search ENCODE annotations including candidate cis-Regulatory Elements (cCREs), chromatin states, ...
Parameters
----------
annotation_type : str
Annotation type filter. Options: 'candidate Cis-Regulatory Elements' (cCREs),...
biosample_term_name : str | Any
Biosample filter (e.g., 'K562', 'HepG2'). Leave empty for all.
organism : str
Organism scientific name.
assembly : str
Genome assembly (e.g., 'GRCh38', 'hg19', 'mm10').
limit : int
Maximum number of results.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ENCODE_search_annotations",
"arguments": {
"annotation_type": annotation_type,
"biosample_term_name": biosample_term_name,
"organism": organism,
"assembly": assembly,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ENCODE_search_annotations"]
@@ -0,0 +1,63 @@
"""
ENCODE_search_chromatin_accessibility
Search ENCODE chromatin accessibility experiments (ATAC-seq and DNase-seq). ATAC-seq and DNase-se...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ENCODE_search_chromatin_accessibility(
assay_type: Optional[str] = "ATAC-seq",
biosample_term_name: Optional[str | Any] = None,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 25,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search ENCODE chromatin accessibility experiments (ATAC-seq and DNase-seq). ATAC-seq and DNase-se...
Parameters
----------
assay_type : str
Chromatin accessibility assay: 'ATAC-seq' (Assay for Transposase-Accessible C...
biosample_term_name : str | Any
Biosample name filter (e.g., 'K562', 'GM12878', 'liver'). Leave empty for all.
organism : str
Organism scientific name.
limit : int
Maximum number of results to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ENCODE_search_chromatin_accessibility",
"arguments": {
"assay_type": assay_type,
"biosample_term_name": biosample_term_name,
"organism": organism,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ENCODE_search_chromatin_accessibility"]
@@ -0,0 +1,63 @@
"""
ENCODE_search_histone_experiments
Search ENCODE histone ChIP-seq experiments by histone modification mark, biosample, or organism. ...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ENCODE_search_histone_experiments(
histone_mark: Optional[str | Any] = None,
biosample_term_name: Optional[str | Any] = None,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 25,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search ENCODE histone ChIP-seq experiments by histone modification mark, biosample, or organism. ...
Parameters
----------
histone_mark : str | Any
Histone modification mark to filter by (e.g., 'H3K4me3', 'H3K27ac', 'H3K27me3...
biosample_term_name : str | Any
Biosample name filter (e.g., 'K562', 'HepG2', 'GM12878', 'liver', 'brain'). L...
organism : str
Organism scientific name (e.g., 'Homo sapiens', 'Mus musculus').
limit : int
Maximum number of results to return (1-100).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ENCODE_search_histone_experiments",
"arguments": {
"histone_mark": histone_mark,
"biosample_term_name": biosample_term_name,
"organism": organism,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ENCODE_search_histone_experiments"]
@@ -0,0 +1,63 @@
"""
ENCODE_search_methylation_experiments
Search ENCODE whole-genome bisulfite sequencing (WGBS) and reduced-representation bisulfite seque...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ENCODE_search_methylation_experiments(
assay_type: Optional[str] = "WGBS",
biosample_term_name: Optional[str | Any] = None,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 25,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search ENCODE whole-genome bisulfite sequencing (WGBS) and reduced-representation bisulfite seque...
Parameters
----------
assay_type : str
Methylation assay type: 'WGBS' (whole-genome bisulfite sequencing, comprehens...
biosample_term_name : str | Any
Biosample name filter (e.g., 'K562', 'liver', 'brain', 'motor neuron'). Leave...
organism : str
Organism scientific name.
limit : int
Maximum number of results to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ENCODE_search_methylation_experiments",
"arguments": {
"assay_type": assay_type,
"biosample_term_name": biosample_term_name,
"organism": organism,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ENCODE_search_methylation_experiments"]
@@ -1,36 +1,36 @@
"""
ClinGen_dosage_region_search
EnsemblReg_get_regulatory_elements
Search ClinGen dosage sensitivity curations by genomic region. Returns all genes and recurrent CN...
Get Ensembl regulatory features (enhancers, promoters, CTCF binding sites, open chromatin, TF bin...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ClinGen_dosage_region_search(
chromosome: str,
def EnsemblReg_get_regulatory_elements(
chrom: str,
start: int,
end: int,
assembly: Optional[str] = "GRCh38",
species: Optional[str] = "homo_sapiens",
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> dict[str, Any]:
) -> Any:
"""
Search ClinGen dosage sensitivity curations by genomic region. Returns all genes and recurrent CN...
Get Ensembl regulatory features (enhancers, promoters, CTCF binding sites, open chromatin, TF bin...
Parameters
----------
chromosome : str
Chromosome (e.g., '17', 'X').
species : str
Species name (e.g., 'homo_sapiens', 'mus_musculus').
chrom : str
Chromosome number without 'chr' prefix (e.g., '17', '7', 'X').
start : int
Start position.
Start position (1-based).
end : int
End position.
assembly : str
Genome assembly version.
End position (1-based).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
@@ -40,18 +40,18 @@ def ClinGen_dosage_region_search(
Returns
-------
dict[str, Any]
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ClinGen_dosage_region_search",
"name": "EnsemblReg_get_regulatory_elements",
"arguments": {
"chromosome": chromosome,
"species": species,
"chrom": chrom,
"start": start,
"end": end,
"assembly": assembly,
},
},
stream_callback=stream_callback,
@@ -60,4 +60,4 @@ def ClinGen_dosage_region_search(
)
__all__ = ["ClinGen_dosage_region_search"]
__all__ = ["EnsemblReg_get_regulatory_elements"]
@@ -1,52 +0,0 @@
"""
Ensembl_get_cross_references
Get all external database cross-references for an Ensembl stable identifier. Returns linked recor...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def Ensembl_get_cross_references(
ensembl_id: str,
external_db: Optional[str | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get all external database cross-references for an Ensembl stable identifier. Returns linked recor...
Parameters
----------
ensembl_id : str
Ensembl stable identifier. Can be gene (ENSG*), transcript (ENST*), or transl...
external_db : str | Any
Optional: filter by external database name. Examples: 'HGNC', 'EntrezGene', '...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "Ensembl_get_cross_references",
"arguments": {"ensembl_id": ensembl_id, "external_db": external_db},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["Ensembl_get_cross_references"]
@@ -1,52 +0,0 @@
"""
Ensembl_get_gene_overlapping_features
Get features overlapping an Ensembl gene by gene ID. Returns all genomic features co-located with...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def Ensembl_get_gene_overlapping_features(
gene_id: str,
feature_types: Optional[str] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get features overlapping an Ensembl gene by gene ID. Returns all genomic features co-located with...
Parameters
----------
gene_id : str
Ensembl gene ID. Examples: 'ENSG00000141510' (TP53), 'ENSG00000012048' (BRCA1...
feature_types : str
Comma-separated feature types. Options: 'gene', 'transcript', 'regulatory', '...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "Ensembl_get_gene_overlapping_features",
"arguments": {"gene_id": gene_id, "feature_types": feature_types},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["Ensembl_get_gene_overlapping_features"]
@@ -1,59 +0,0 @@
"""
Ensembl_get_region_features
Get all genomic features overlapping a specified chromosomal region. Returns genes, transcripts, ...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def Ensembl_get_region_features(
region: str,
species: Optional[str] = None,
feature_types: Optional[str] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get all genomic features overlapping a specified chromosomal region. Returns genes, transcripts, ...
Parameters
----------
species : str
Species name. Default: 'human'. Examples: 'human', 'mouse', 'rat', 'zebrafish'.
region : str
Genomic region in format 'chr:start-end'. Examples: '17:7661779-7687546' (TP5...
feature_types : str
Comma-separated feature types to retrieve. Options: 'gene', 'transcript', 're...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "Ensembl_get_region_features",
"arguments": {
"species": species,
"region": region,
"feature_types": feature_types,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["Ensembl_get_region_features"]
@@ -1,59 +0,0 @@
"""
Ensembl_lookup_gene_by_symbol
Look up Ensembl gene IDs for a gene symbol across external databases. Given a gene symbol (e.g., ...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def Ensembl_lookup_gene_by_symbol(
symbol: str,
species: Optional[str] = None,
external_db: Optional[str | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Look up Ensembl gene IDs for a gene symbol across external databases. Given a gene symbol (e.g., ...
Parameters
----------
symbol : str
Gene symbol to look up. Examples: 'TP53', 'BRCA1', 'EGFR', 'BRAF', 'KRAS'.
species : str
Species name. Default: 'human'. Examples: 'human', 'mouse', 'rat', 'zebrafish'.
external_db : str | Any
Optional: filter by external database. Examples: 'HGNC', 'EntrezGene'.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "Ensembl_lookup_gene_by_symbol",
"arguments": {
"symbol": symbol,
"species": species,
"external_db": external_db,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["Ensembl_lookup_gene_by_symbol"]
@@ -1,27 +1,27 @@
"""
PDBe_get_structure_ligands
GEO_get_dataset_details
Get all ligands (drug-like molecules, cofactors, ions) bound in a PDB crystal structure. Returns ...
Get detailed metadata for a specific GEO dataset by its accession (GSE ID). Returns comprehensive...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def PDBe_get_structure_ligands(
pdb_id: str,
def GEO_get_dataset_details(
geo_id: str,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get all ligands (drug-like molecules, cofactors, ions) bound in a PDB crystal structure. Returns ...
Get detailed metadata for a specific GEO dataset by its accession (GSE ID). Returns comprehensive...
Parameters
----------
pdb_id : str
PDB entry ID (4-character code). Examples: '4hhb' (hemoglobin), '3ert' (estro...
geo_id : str
GEO dataset accession (numeric part only, e.g., '200291249' for GSE291249). G...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
@@ -36,11 +36,11 @@ def PDBe_get_structure_ligands(
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{"name": "PDBe_get_structure_ligands", "arguments": {"pdb_id": pdb_id}},
{"name": "GEO_get_dataset_details", "arguments": {"geo_id": geo_id}},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["PDBe_get_structure_ligands"]
__all__ = ["GEO_get_dataset_details"]
@@ -1,30 +1,33 @@
"""
gProfiler_annotate_snps
GEO_search_chipseq_datasets
Map SNP rsIDs to genes and annotate their functional consequences using g:Profiler (g:SNPense) fr...
Search NCBI GEO for ChIP-seq (Chromatin Immunoprecipitation followed by sequencing) datasets. ChI...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def gProfiler_annotate_snps(
snp_list: str,
organism: Optional[str] = None,
def GEO_search_chipseq_datasets(
query: str,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 20,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Map SNP rsIDs to genes and annotate their functional consequences using g:Profiler (g:SNPense) fr...
Search NCBI GEO for ChIP-seq (Chromatin Immunoprecipitation followed by sequencing) datasets. ChI...
Parameters
----------
snp_list : str
Comma-separated list of SNP rsIDs. Examples: 'rs11540652,rs429358,rs7903146' ...
query : str
Search terms for ChIP-seq datasets (e.g., 'H3K27ac liver', 'CTCF cancer', 'p5...
organism : str
Organism identifier. Default: 'hsapiens'. Examples: 'hsapiens' (human), 'mmus...
Organism filter.
limit : int
Maximum number of dataset IDs to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
@@ -40,8 +43,8 @@ def gProfiler_annotate_snps(
return get_shared_client().run_one_function(
{
"name": "gProfiler_annotate_snps",
"arguments": {"snp_list": snp_list, "organism": organism},
"name": "GEO_search_chipseq_datasets",
"arguments": {"query": query, "organism": organism, "limit": limit},
},
stream_callback=stream_callback,
use_cache=use_cache,
@@ -49,4 +52,4 @@ def gProfiler_annotate_snps(
)
__all__ = ["gProfiler_annotate_snps"]
__all__ = ["GEO_search_chipseq_datasets"]
@@ -0,0 +1,55 @@
"""
GEO_search_methylation_datasets
Search NCBI GEO for DNA methylation array datasets, including Illumina 450K, EPIC (850K), and oth...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def GEO_search_methylation_datasets(
query: str,
organism: Optional[str] = "Homo sapiens",
limit: Optional[int] = 20,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Search NCBI GEO for DNA methylation array datasets, including Illumina 450K, EPIC (850K), and oth...
Parameters
----------
query : str
Search terms for methylation datasets (e.g., 'breast cancer methylation', 'br...
organism : str
Organism filter (e.g., 'Homo sapiens', 'Mus musculus').
limit : int
Maximum number of dataset IDs to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "GEO_search_methylation_datasets",
"arguments": {"query": query, "organism": organism, "limit": limit},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["GEO_search_methylation_datasets"]
@@ -1,59 +0,0 @@
"""
OmniPath_get_cell_communication_annotations
Get cell-cell communication annotations for proteins from databases like CellPhoneDB, CellChatDB,...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_cell_communication_annotations(
proteins: str,
databases: Optional[str | Any] = None,
genesymbols: Optional[bool | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get cell-cell communication annotations for proteins from databases like CellPhoneDB, CellChatDB,...
Parameters
----------
proteins : str
UniProt accession(s) or gene symbol(s), comma-separated. Examples: 'P01137,P3...
databases : str | Any
Filter by annotation database(s), comma-separated. Cell communication databas...
genesymbols : bool | Any
Whether to include gene symbols in output (default: true).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_cell_communication_annotations",
"arguments": {
"proteins": proteins,
"databases": databases,
"genesymbols": genesymbols,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_cell_communication_annotations"]
@@ -1,52 +0,0 @@
"""
OmniPath_get_complexes
Get protein complex compositions from OmniPath's comprehensive complex database. Integrates 22,00...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_complexes(
proteins: str,
databases: Optional[str | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get protein complex compositions from OmniPath's comprehensive complex database. Integrates 22,00...
Parameters
----------
proteins : str
UniProt accession(s), comma-separated. Note: gene symbols are NOT supported f...
databases : str | Any
Filter by source database(s), comma-separated. Options: CORUM, CellPhoneDB, C...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_complexes",
"arguments": {"proteins": proteins, "databases": databases},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_complexes"]
@@ -1,67 +0,0 @@
"""
OmniPath_get_enzyme_substrate
Get enzyme-substrate (post-translational modification) interactions from OmniPath. Integrates dat...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_enzyme_substrate(
enzymes: Optional[str | Any] = None,
substrates: Optional[str | Any] = None,
types: Optional[str | Any] = None,
organisms: Optional[int | Any] = None,
limit: Optional[int | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get enzyme-substrate (post-translational modification) interactions from OmniPath. Integrates dat...
Parameters
----------
enzymes : str | Any
Gene symbol(s) or UniProt ID(s) for enzyme/kinase. Comma-separated for multip...
substrates : str | Any
Gene symbol(s) or UniProt ID(s) for substrate. Examples: 'STAT3', 'P40763'.
types : str | Any
Modification type filter. Options include: phosphorylation, ubiquitination, a...
organisms : int | Any
NCBI taxonomy ID. Default: 9606 (human).
limit : int | Any
Maximum number of results to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_enzyme_substrate",
"arguments": {
"enzymes": enzymes,
"substrates": substrates,
"types": types,
"organisms": organisms,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_enzyme_substrate"]
@@ -1,75 +0,0 @@
"""
OmniPath_get_intercell_roles
Get intercellular communication roles for proteins from OmniPath. Classifies proteins as ligands,...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_intercell_roles(
proteins: Optional[str | Any] = None,
categories: Optional[str | Any] = None,
scope: Optional[str | Any] = None,
transmitter: Optional[bool | Any] = None,
receiver: Optional[bool | Any] = None,
secreted: Optional[bool | Any] = None,
limit: Optional[int | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get intercellular communication roles for proteins from OmniPath. Classifies proteins as ligands,...
Parameters
----------
proteins : str | Any
Gene symbol(s) or UniProt ID(s), comma-separated. Examples: 'EGFR', 'TGFB1,PD...
categories : str | Any
Filter by intercellular role category. Examples: 'ligand', 'receptor', 'adhes...
scope : str | Any
Filter by annotation scope: 'generic' (general role) or 'specific' (cell-type...
transmitter : bool | Any
Filter for transmitter/sender proteins (true) or non-transmitters (false).
receiver : bool | Any
Filter for receiver proteins (true) or non-receivers (false).
secreted : bool | Any
Filter for secreted proteins (true) or non-secreted (false).
limit : int | Any
Maximum number of results to return. Default: no limit.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_intercell_roles",
"arguments": {
"proteins": proteins,
"categories": categories,
"scope": scope,
"transmitter": transmitter,
"receiver": receiver,
"secreted": secreted,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_intercell_roles"]
@@ -1,71 +0,0 @@
"""
OmniPath_get_ligand_receptor_interactions
Get ligand-receptor interaction pairs from OmniPath, the largest integrated intercellular communi...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_ligand_receptor_interactions(
partners: Optional[str | Any] = None,
sources: Optional[str | Any] = None,
targets: Optional[str | Any] = None,
databases: Optional[str | Any] = None,
organisms: Optional[int | Any] = None,
limit: Optional[int | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get ligand-receptor interaction pairs from OmniPath, the largest integrated intercellular communi...
Parameters
----------
partners : str | Any
Gene symbol(s) or UniProt ID(s) to query as interaction partners (either sour...
sources : str | Any
Gene symbol(s) or UniProt ID(s) for source (ligand) proteins only. Use instea...
targets : str | Any
Gene symbol(s) or UniProt ID(s) for target (receptor) proteins only. Use inst...
databases : str | Any
Filter by specific source database(s), comma-separated. Options include: Cell...
organisms : int | Any
NCBI taxonomy ID for species filter. Default: 9606 (human). Options: 9606 (hu...
limit : int | Any
Maximum number of interactions to return. Default: no limit (returns all).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_ligand_receptor_interactions",
"arguments": {
"partners": partners,
"sources": sources,
"targets": targets,
"databases": databases,
"organisms": organisms,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_ligand_receptor_interactions"]
@@ -1,79 +0,0 @@
"""
OmniPath_get_signaling_interactions
Get intracellular signaling pathway interactions from OmniPath's curated datasets. Supports query...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def OmniPath_get_signaling_interactions(
partners: Optional[str | Any] = None,
sources: Optional[str | Any] = None,
targets: Optional[str | Any] = None,
datasets: Optional[str | Any] = None,
directed: Optional[bool | Any] = None,
signed: Optional[bool | Any] = None,
organisms: Optional[int | Any] = None,
limit: Optional[int | Any] = None,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get intracellular signaling pathway interactions from OmniPath's curated datasets. Supports query...
Parameters
----------
partners : str | Any
Gene symbol(s) or UniProt ID(s) to query. Comma-separated for multiple. Examp...
sources : str | Any
Gene symbol(s) or UniProt ID(s) for source/upstream proteins only.
targets : str | Any
Gene symbol(s) or UniProt ID(s) for target/downstream proteins only.
datasets : str | Any
Which OmniPath dataset(s) to query, comma-separated. Options: 'omnipath' (cur...
directed : bool | Any
Filter for directed interactions only (default: true for signaling).
signed : bool | Any
Filter for interactions with known stimulation/inhibition sign.
organisms : int | Any
NCBI taxonomy ID. Default: 9606 (human). Options: 9606, 10090, 10116.
limit : int | Any
Maximum number of interactions to return.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "OmniPath_get_signaling_interactions",
"arguments": {
"partners": partners,
"sources": sources,
"targets": targets,
"datasets": datasets,
"directed": directed,
"signed": signed,
"organisms": organisms,
"limit": limit,
},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["OmniPath_get_signaling_interactions"]
@@ -0,0 +1,58 @@
"""
UCSC_get_cpg_islands
Get CpG island annotations for a genomic region from UCSC Genome Browser. CpG islands are genomic...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def UCSC_get_cpg_islands(
chrom: str,
start: int,
end: int,
genome: Optional[str] = "hg38",
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get CpG island annotations for a genomic region from UCSC Genome Browser. CpG islands are genomic...
Parameters
----------
genome : str
Genome assembly (e.g., 'hg38', 'hg19', 'mm10', 'mm39').
chrom : str
Chromosome name (e.g., 'chr17', 'chr1', 'chrX').
start : int
Start position (0-based, inclusive).
end : int
End position (0-based, exclusive).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "UCSC_get_cpg_islands",
"arguments": {"genome": genome, "chrom": chrom, "start": start, "end": end},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["UCSC_get_cpg_islands"]
@@ -1,30 +1,36 @@
"""
PDBe_get_residue_listing
UCSC_get_encode_cCREs
Get per-residue information for a PDB structure, optionally filtered by chain. Returns residue nu...
Get ENCODE4 candidate cis-Regulatory Elements (cCREs) for a genomic region from UCSC Genome Brows...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def PDBe_get_residue_listing(
pdb_id: str,
chain_id: Optional[str | Any] = None,
def UCSC_get_encode_cCREs(
chrom: str,
start: int,
end: int,
genome: Optional[str] = "hg38",
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get per-residue information for a PDB structure, optionally filtered by chain. Returns residue nu...
Get ENCODE4 candidate cis-Regulatory Elements (cCREs) for a genomic region from UCSC Genome Brows...
Parameters
----------
pdb_id : str
PDB entry ID (4-character code). Examples: '4hhb', '3ert', '1tup', '6lu7'. Ca...
chain_id : str | Any
Optional chain ID to filter (e.g., 'A', 'B'). If not provided, all chains are...
genome : str
Genome assembly (e.g., 'hg38', 'mm10').
chrom : str
Chromosome name (e.g., 'chr17').
start : int
Start position (0-based).
end : int
End position (0-based).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
@@ -40,8 +46,8 @@ def PDBe_get_residue_listing(
return get_shared_client().run_one_function(
{
"name": "PDBe_get_residue_listing",
"arguments": {"pdb_id": pdb_id, "chain_id": chain_id},
"name": "UCSC_get_encode_cCREs",
"arguments": {"genome": genome, "chrom": chrom, "start": start, "end": end},
},
stream_callback=stream_callback,
use_cache=use_cache,
@@ -49,4 +55,4 @@ def PDBe_get_residue_listing(
)
__all__ = ["PDBe_get_residue_listing"]
__all__ = ["UCSC_get_encode_cCREs"]
@@ -0,0 +1,58 @@
"""
UCSC_get_tf_binding_clusters
Get Transcription Factor ChIP-seq Clusters from ENCODE3 for a genomic region via UCSC Genome Brow...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def UCSC_get_tf_binding_clusters(
chrom: str,
start: int,
end: int,
genome: Optional[str] = "hg38",
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> Any:
"""
Get Transcription Factor ChIP-seq Clusters from ENCODE3 for a genomic region via UCSC Genome Brow...
Parameters
----------
genome : str
Genome assembly (e.g., 'hg38', 'hg19').
chrom : str
Chromosome name (e.g., 'chr17').
start : int
Start position (0-based).
end : int
End position (0-based).
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
Any
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "UCSC_get_tf_binding_clusters",
"arguments": {"genome": genome, "chrom": chrom, "start": start, "end": end},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["UCSC_get_tf_binding_clusters"]
+139 -157
View File
@@ -1,7 +1,7 @@
"""
ToolUniverse Tools
Type-safe Python interface to 1551 scientific tools.
Type-safe Python interface to 1546 scientific tools.
Each tool is in its own module for minimal import overhead.
Usage:
@@ -68,7 +68,10 @@ from .ArXiv_search_papers import ArXiv_search_papers
from .ArgumentDescriptionOptimizer import ArgumentDescriptionOptimizer
from .BLAST_nucleotide_search import BLAST_nucleotide_search
from .BLAST_protein_search import BLAST_protein_search
from .BRENDA_get_enzyme_info import BRENDA_get_enzyme_info
from .BRENDA_get_inhibitors import BRENDA_get_inhibitors
from .BRENDA_get_kcat import BRENDA_get_kcat
from .BRENDA_get_km import BRENDA_get_km
from .BVBRC_get_genome import BVBRC_get_genome
from .BVBRC_search_amr import BVBRC_search_amr
from .BVBRC_search_genome_features import BVBRC_search_genome_features
@@ -98,10 +101,6 @@ from .BioModels_download_model import BioModels_download_model
from .BioModels_get_model import BioModels_get_model
from .BioModels_list_files import BioModels_list_files
from .BioModels_search_parameters import BioModels_search_parameters
from .BioPortal_annotate_text import BioPortal_annotate_text
from .BioPortal_get_concept import BioPortal_get_concept
from .BioPortal_get_hierarchy import BioPortal_get_hierarchy
from .BioPortal_search_ontology_terms import BioPortal_search_ontology_terms
from .BioRxiv_get_preprint import BioRxiv_get_preprint
from .BioSamples_get_sample import BioSamples_get_sample
from .BioSamples_search import BioSamples_search
@@ -170,8 +169,6 @@ from .ChIPAtlas_get_peak_data import ChIPAtlas_get_peak_data
from .ChIPAtlas_search_datasets import ChIPAtlas_search_datasets
from .ClinGenAR_get_external_records import ClinGenAR_get_external_records
from .ClinGenAR_lookup_allele import ClinGenAR_lookup_allele
from .ClinGen_dosage_by_gene import ClinGen_dosage_by_gene
from .ClinGen_dosage_region_search import ClinGen_dosage_region_search
from .ClinGen_get_actionability_adult import ClinGen_get_actionability_adult
from .ClinGen_get_actionability_pediatric import ClinGen_get_actionability_pediatric
from .ClinGen_get_dosage_sensitivity import ClinGen_get_dosage_sensitivity
@@ -215,15 +212,15 @@ from .DepMap_search_cell_lines import DepMap_search_cell_lines
from .DepMap_search_genes import DepMap_search_genes
from .DescriptionAnalyzer import DescriptionAnalyzer
from .DescriptionQualityEvaluator import DescriptionQualityEvaluator
from .Dfam_get_annotations import Dfam_get_annotations
from .Dfam_get_family import Dfam_get_family
from .Dfam_search_families import Dfam_search_families
from .DigiKey_get_categories import DigiKey_get_categories
from .DigiKey_get_manufacturers import DigiKey_get_manufacturers
from .DigiKey_get_product_details import DigiKey_get_product_details
from .DigiKey_search_by_keyword import DigiKey_search_by_keyword
from .DisProt_get_entry import DisProt_get_entry
from .DisProt_search import DisProt_search
from .DisGeNET_get_disease_genes import DisGeNET_get_disease_genes
from .DisGeNET_get_gda import DisGeNET_get_gda
from .DisGeNET_get_vda import DisGeNET_get_vda
from .DisGeNET_search_disease import DisGeNET_search_disease
from .DisGeNET_search_gene import DisGeNET_search_gene
from .DiseaseAnalyzerAgent import DiseaseAnalyzerAgent
from .DiseaseOntology_get_parents import DiseaseOntology_get_parents
from .DiseaseOntology_get_term import DiseaseOntology_get_term
@@ -232,15 +229,14 @@ from .DrugInteractionAnalyzerAgent import DrugInteractionAnalyzerAgent
from .DrugOptimizationAgent import DrugOptimizationAgent
from .DrugSafetyAnalyzer import DrugSafetyAnalyzer
from .EBIProteins_get_antigen import EBIProteins_get_antigen
from .EBIProteins_get_coordinate_mapping import EBIProteins_get_coordinate_mapping
from .EBIProteins_get_coordinates import EBIProteins_get_coordinates
from .EBIProteins_get_epitopes import EBIProteins_get_epitopes
from .EBIProteins_get_domains_sites import EBIProteins_get_domains_sites
from .EBIProteins_get_features import EBIProteins_get_features
from .EBIProteins_get_interaction_details import EBIProteins_get_interaction_details
from .EBIProteins_get_interactions import EBIProteins_get_interactions
from .EBIProteins_get_molecule_processing import EBIProteins_get_molecule_processing
from .EBIProteins_get_mutagenesis import EBIProteins_get_mutagenesis
from .EBIProteins_get_proteomics_peptides import EBIProteins_get_proteomics_peptides
from .EBIProteins_get_proteomics_ptm import EBIProteins_get_proteomics_ptm
from .EBIProteins_get_structural_features import EBIProteins_get_structural_features
from .EBIProteins_get_variation import EBIProteins_get_variation
from .EBITaxonomy_get_by_id import EBITaxonomy_get_by_id
from .EBITaxonomy_get_by_scientific_name import EBITaxonomy_get_by_scientific_name
@@ -257,11 +253,16 @@ from .ENAPortal_count_records import ENAPortal_count_records
from .ENAPortal_search_samples import ENAPortal_search_samples
from .ENAPortal_search_studies import ENAPortal_search_studies
from .ENCODE_get_biosample import ENCODE_get_biosample
from .ENCODE_get_chromatin_state import ENCODE_get_chromatin_state
from .ENCODE_get_experiment import ENCODE_get_experiment
from .ENCODE_get_file import ENCODE_get_file
from .ENCODE_list_files import ENCODE_list_files
from .ENCODE_search_annotations import ENCODE_search_annotations
from .ENCODE_search_biosamples import ENCODE_search_biosamples
from .ENCODE_search_chromatin_accessibility import ENCODE_search_chromatin_accessibility
from .ENCODE_search_experiments import ENCODE_search_experiments
from .ENCODE_search_histone_experiments import ENCODE_search_histone_experiments
from .ENCODE_search_methylation_experiments import ENCODE_search_methylation_experiments
from .EVE_get_gene_info import EVE_get_gene_info
from .EVE_get_variant_score import EVE_get_variant_score
from .Enamine_get_compound import Enamine_get_compound
@@ -273,23 +274,20 @@ from .EnsemblCompara_get_orthologues import EnsemblCompara_get_orthologues
from .EnsemblCompara_get_paralogues import EnsemblCompara_get_paralogues
from .EnsemblLD_get_ld_pairwise import EnsemblLD_get_ld_pairwise
from .EnsemblLD_get_ld_variants import EnsemblLD_get_ld_variants
from .EnsemblMap_convert_coordinates import EnsemblMap_convert_coordinates
from .EnsemblMap_translate_coordinates import EnsemblMap_translate_coordinates
from .EnsemblPheno_get_by_gene import EnsemblPheno_get_by_gene
from .EnsemblPheno_get_by_region import EnsemblPheno_get_by_region
from .EnsemblPheno_get_by_variant import EnsemblPheno_get_by_variant
from .EnsemblReg_get_binding_matrix import EnsemblReg_get_binding_matrix
from .EnsemblReg_get_constrained_elements import EnsemblReg_get_constrained_elements
from .EnsemblReg_get_motif_features import EnsemblReg_get_motif_features
from .EnsemblReg_get_regulatory_elements import EnsemblReg_get_regulatory_elements
from .EnsemblSeq_get_id_sequence import EnsemblSeq_get_id_sequence
from .EnsemblSeq_get_region_sequence import EnsemblSeq_get_region_sequence
from .EnsemblVEP_annotate_hgvs import EnsemblVEP_annotate_hgvs
from .EnsemblVEP_annotate_rsid import EnsemblVEP_annotate_rsid
from .EnsemblVEP_variant_recoder import EnsemblVEP_variant_recoder
from .EnsemblVar_get_population_frequencies import EnsemblVar_get_population_frequencies
from .EnsemblVar_get_variant_consequences import EnsemblVar_get_variant_consequences
from .Ensembl_get_cross_references import Ensembl_get_cross_references
from .Ensembl_get_gene_overlapping_features import Ensembl_get_gene_overlapping_features
from .Ensembl_get_region_features import Ensembl_get_region_features
from .Ensembl_lookup_gene_by_symbol import Ensembl_lookup_gene_by_symbol
from .Ensembl_get_assembly_info import Ensembl_get_assembly_info
from .Ensembl_get_species_info import Ensembl_get_species_info
from .EthicalComplianceReviewer import EthicalComplianceReviewer
from .EuroPMCAnnot_get_annotations_by_type import EuroPMCAnnot_get_annotations_by_type
from .EuroPMCAnnot_get_article_annotations import EuroPMCAnnot_get_article_annotations
@@ -727,6 +725,9 @@ from .GDC_get_ssm_by_gene import GDC_get_ssm_by_gene
from .GDC_list_files import GDC_list_files
from .GDC_list_projects import GDC_list_projects
from .GDC_search_cases import GDC_search_cases
from .GEO_get_dataset_details import GEO_get_dataset_details
from .GEO_search_chipseq_datasets import GEO_search_chipseq_datasets
from .GEO_search_methylation_datasets import GEO_search_methylation_datasets
from .GIN_Guidelines_Search import GIN_Guidelines_Search
from .GNPS_compare_spectra import GNPS_compare_spectra
from .GNPS_get_spectrum import GNPS_get_spectrum
@@ -756,10 +757,6 @@ from .GTEx_get_tissue_sites import GTEx_get_tissue_sites
from .GTEx_get_top_expressed_genes import GTEx_get_top_expressed_genes
from .GTEx_query_eqtl import GTEx_query_eqtl
from .GWAS_search_associations_by_gene import GWAS_search_associations_by_gene
from .GenomeNexus_annotate_mutation import GenomeNexus_annotate_mutation
from .GenomeNexus_annotate_variant import GenomeNexus_annotate_variant
from .GenomeNexus_get_cancer_hotspots import GenomeNexus_get_cancer_hotspots
from .GenomeNexus_get_canonical_transcript import GenomeNexus_get_canonical_transcript
from .GlyGen_get_glycan import GlyGen_get_glycan
from .GlyGen_get_glycoprotein import GlyGen_get_glycoprotein
from .GlyGen_get_site import GlyGen_get_site
@@ -808,8 +805,6 @@ from .HPA_search_genes_by_query import HPA_search_genes_by_query
from .HPO_get_term import HPO_get_term
from .HPO_get_term_hierarchy import HPO_get_term_hierarchy
from .HPO_search_terms import HPO_search_terms
from .Harmonizome_get_gene import Harmonizome_get_gene
from .Harmonizome_list_datasets import Harmonizome_list_datasets
from .HypothesisGenerator import HypothesisGenerator
from .ICD10_get_code_info import ICD10_get_code_info
from .ICD10_search_codes import ICD10_search_codes
@@ -832,8 +827,11 @@ from .InterProScan_get_job_results import InterProScan_get_job_results
from .InterProScan_get_job_status import InterProScan_get_job_status
from .InterProScan_scan_sequence import InterProScan_scan_sequence
from .InterPro_get_domain_details import InterPro_get_domain_details
from .InterPro_get_entries_for_protein import InterPro_get_entries_for_protein
from .InterPro_get_protein_domains import InterPro_get_protein_domains
from .InterPro_get_proteins_by_domain import InterPro_get_proteins_by_domain
from .InterPro_search_domains import InterPro_search_domains
from .InterPro_search_entries import InterPro_search_entries
from .JASPAR_get_transcription_factors import JASPAR_get_transcription_factors
from .JLCSearch_list_categories import JLCSearch_list_categories
from .JLCSearch_search_capacitors import JLCSearch_search_capacitors
@@ -892,8 +890,6 @@ from .MetabolomicsWorkbench_search_compound_by_name import (
MetabolomicsWorkbench_search_compound_by_name,
)
from .MethodologyRigorReviewer import MethodologyRigorReviewer
from .MobiDB_get_consensus import MobiDB_get_consensus
from .MobiDB_get_protein import MobiDB_get_protein
from .MonarchV3_get_associations import MonarchV3_get_associations
from .MonarchV3_get_entity import MonarchV3_get_entity
from .MonarchV3_search import MonarchV3_search
@@ -943,24 +939,34 @@ from .NeuroMorpho_search_neurons import NeuroMorpho_search_neurons
from .Nextstrain_get_dataset import Nextstrain_get_dataset
from .Nextstrain_list_datasets import Nextstrain_list_datasets
from .NoveltySignificanceReviewer import NoveltySignificanceReviewer
from .NvidiaNIM_alphafold2 import NvidiaNIM_alphafold2
from .NvidiaNIM_alphafold2_multimer import NvidiaNIM_alphafold2_multimer
from .NvidiaNIM_boltz2 import NvidiaNIM_boltz2
from .NvidiaNIM_diffdock import NvidiaNIM_diffdock
from .NvidiaNIM_esm2_650m import NvidiaNIM_esm2_650m
from .NvidiaNIM_esmfold import NvidiaNIM_esmfold
from .NvidiaNIM_evo2 import NvidiaNIM_evo2
from .NvidiaNIM_genmol import NvidiaNIM_genmol
from .NvidiaNIM_maisi import NvidiaNIM_maisi
from .NvidiaNIM_molmim import NvidiaNIM_molmim
from .NvidiaNIM_msa_search import NvidiaNIM_msa_search
from .NvidiaNIM_openfold2 import NvidiaNIM_openfold2
from .NvidiaNIM_openfold3 import NvidiaNIM_openfold3
from .NvidiaNIM_proteinmpnn import NvidiaNIM_proteinmpnn
from .NvidiaNIM_rfdiffusion import NvidiaNIM_rfdiffusion
from .NvidiaNIM_vista3d import NvidiaNIM_vista3d
from .OBIS_search_occurrences import OBIS_search_occurrences
from .OBIS_search_taxa import OBIS_search_taxa
from .OMA_get_group import OMA_get_group
from .OMA_get_hog import OMA_get_hog
from .OMA_get_orthologs import OMA_get_orthologs
from .OMA_get_protein import OMA_get_protein
from .OMIM_get_clinical_synopsis import OMIM_get_clinical_synopsis
from .OMIM_get_entry import OMIM_get_entry
from .OMIM_get_gene_map import OMIM_get_gene_map
from .OMIM_search import OMIM_search
from .OSF_search_preprints import OSF_search_preprints
from .OSL_get_efo_id_by_disease_name import OSL_get_efo_id_by_disease_name
from .OmniPath_get_cell_communication_annotations import (
OmniPath_get_cell_communication_annotations,
)
from .OmniPath_get_complexes import OmniPath_get_complexes
from .OmniPath_get_enzyme_substrate import OmniPath_get_enzyme_substrate
from .OmniPath_get_intercell_roles import OmniPath_get_intercell_roles
from .OmniPath_get_ligand_receptor_interactions import (
OmniPath_get_ligand_receptor_interactions,
)
from .OmniPath_get_signaling_interactions import OmniPath_get_signaling_interactions
from .OncoKB_annotate_copy_number import OncoKB_annotate_copy_number
from .OncoKB_annotate_variant import OncoKB_annotate_variant
from .OncoKB_get_cancer_genes import OncoKB_get_cancer_genes
@@ -1153,31 +1159,19 @@ from .Orphanet_get_disease import Orphanet_get_disease
from .Orphanet_get_genes import Orphanet_get_genes
from .Orphanet_search_by_name import Orphanet_search_by_name
from .Orphanet_search_diseases import Orphanet_search_diseases
from .OrthoDB_get_group_details import OrthoDB_get_group_details
from .OrthoDB_get_orthologs import OrthoDB_get_orthologs
from .OrthoDB_search_groups import OrthoDB_search_groups
from .OutputSummarizationComposer import OutputSummarizationComposer
from .OverallSummaryAgent import OverallSummaryAgent
from .PANTHER_enrichment import PANTHER_enrichment
from .PANTHER_gene_info import PANTHER_gene_info
from .PANTHER_ortholog import PANTHER_ortholog
from .PDB_search_similar_structures import PDB_search_similar_structures
from .PDBeSIFTS_get_all_structures import PDBeSIFTS_get_all_structures
from .PDBeSIFTS_get_best_structures import PDBeSIFTS_get_best_structures
from .PDBeSIFTS_get_pdb_to_uniprot import PDBeSIFTS_get_pdb_to_uniprot
from .PDBeSearch_get_compound import PDBeSearch_get_compound
from .PDBeSearch_search_by_organism import PDBeSearch_search_by_organism
from .PDBeSearch_search_structures import PDBeSearch_search_structures
from .PDBeValidation_get_outlier_residues import PDBeValidation_get_outlier_residues
from .PDBeValidation_get_quality_scores import PDBeValidation_get_quality_scores
from .PDBe_KB_get_interface_residues import PDBe_KB_get_interface_residues
from .PDBe_KB_get_ligand_sites import PDBe_KB_get_ligand_sites
from .PDBe_KB_get_summary_stats import PDBe_KB_get_summary_stats
from .PDBe_KB_get_superposition_clusters import PDBe_KB_get_superposition_clusters
from .PDBe_get_compound_structures import PDBe_get_compound_structures
from .PDBe_get_compound_summary import PDBe_get_compound_summary
from .PDBe_get_residue_listing import PDBe_get_residue_listing
from .PDBe_get_structure_ligands import PDBe_get_structure_ligands
from .PMC_search_papers import PMC_search_papers
from .PRIDE_get_project import PRIDE_get_project
from .PRIDE_get_project_files import PRIDE_get_project_files
@@ -1259,11 +1253,9 @@ from .QuickGO_annotations_by_gene import QuickGO_annotations_by_gene
from .QuickGO_annotations_by_goterm import QuickGO_annotations_by_goterm
from .QuickGO_get_term_children import QuickGO_get_term_children
from .QuickGO_get_term_detail import QuickGO_get_term_detail
from .RCSBAdvSearch_search_by_motif import RCSBAdvSearch_search_by_motif
from .RCSBAdvSearch_search_structures import RCSBAdvSearch_search_structures
from .RCSBGraphQL_get_ligand_info import RCSBGraphQL_get_ligand_info
from .RCSBGraphQL_get_polymer_entity import RCSBGraphQL_get_polymer_entity
from .RCSBGraphQL_get_structure_summary import RCSBGraphQL_get_structure_summary
from .RCSBData_get_assembly import RCSBData_get_assembly
from .RCSBData_get_entry import RCSBData_get_entry
from .RCSBData_get_nonpolymer_entity import RCSBData_get_nonpolymer_entity
from .RNAcentral_get_by_accession import RNAcentral_get_by_accession
from .RNAcentral_search import RNAcentral_search
from .ReMap_get_transcription_factor_binding import (
@@ -1272,13 +1264,9 @@ from .ReMap_get_transcription_factor_binding import (
from .ReactomeAnalysis_pathway_enrichment import ReactomeAnalysis_pathway_enrichment
from .ReactomeAnalysis_species_comparison import ReactomeAnalysis_species_comparison
from .ReactomeAnalysis_token_result import ReactomeAnalysis_token_result
from .ReactomeInteractors_get_entity_pathways import (
ReactomeInteractors_get_entity_pathways,
)
from .ReactomeInteractors_get_protein_interactors import (
ReactomeInteractors_get_protein_interactors,
)
from .ReactomeInteractors_search_entity import ReactomeInteractors_search_entity
from .ReactomeContent_get_contained_events import ReactomeContent_get_contained_events
from .ReactomeContent_get_enhanced_pathway import ReactomeContent_get_enhanced_pathway
from .ReactomeContent_search import ReactomeContent_search
from .Reactome_get_complex import Reactome_get_complex
from .Reactome_get_database_version import Reactome_get_database_version
from .Reactome_get_diseases import Reactome_get_diseases
@@ -1341,6 +1329,7 @@ from .STITCH_get_chemical_protein_interactions import (
from .STITCH_get_interaction_partners import STITCH_get_interaction_partners
from .STITCH_resolve_identifier import STITCH_resolve_identifier
from .STRING_functional_enrichment import STRING_functional_enrichment
from .STRING_get_functional_annotations import STRING_get_functional_annotations
from .STRING_get_interaction_partners import STRING_get_interaction_partners
from .STRING_get_network import STRING_get_network
from .STRING_get_protein_interactions import STRING_get_protein_interactions
@@ -1357,15 +1346,14 @@ from .SwissDock_dock_ligand import SwissDock_dock_ligand
from .SwissDock_retrieve_results import SwissDock_retrieve_results
from .SwissModel_get_models import SwissModel_get_models
from .SwissModel_get_summary import SwissModel_get_summary
from .SynBioHub_get_collections import SynBioHub_get_collections
from .SynBioHub_get_part import SynBioHub_get_part
from .SynBioHub_search_parts import SynBioHub_search_parts
from .TRIP_Database_Guidelines_Search import TRIP_Database_Guidelines_Search
from .TestCaseGenerator import TestCaseGenerator
from .TestResultsAnalyzer import TestResultsAnalyzer
from .TheraSAbDab_get_all_therapeutics import TheraSAbDab_get_all_therapeutics
from .TheraSAbDab_search_by_target import TheraSAbDab_search_by_target
from .TheraSAbDab_search_therapeutics import TheraSAbDab_search_therapeutics
from .ThreeDBeacons_get_structure_summary import ThreeDBeacons_get_structure_summary
from .ThreeDBeacons_get_structures import ThreeDBeacons_get_structures
from .ToolCompatibilityAnalyzer import ToolCompatibilityAnalyzer
from .ToolDescriptionOptimizer import ToolDescriptionOptimizer
from .ToolDiscover import ToolDiscover
@@ -1381,27 +1369,24 @@ from .Tool_Finder import Tool_Finder
from .Tool_Finder_Keyword import Tool_Finder_Keyword
from .Tool_Finder_LLM import Tool_Finder_LLM
from .Tool_RAG import Tool_RAG
from .UCSC_get_cpg_islands import UCSC_get_cpg_islands
from .UCSC_get_encode_cCREs import UCSC_get_encode_cCREs
from .UCSC_get_sequence import UCSC_get_sequence
from .UCSC_get_tf_binding_clusters import UCSC_get_tf_binding_clusters
from .UCSC_get_track import UCSC_get_track
from .UCSC_search import UCSC_search
from .UniChem_list_sources import UniChem_list_sources
from .UniChem_search_compound import UniChem_search_compound
from .UniParc_get_entry import UniParc_get_entry
from .UniParc_search import UniParc_search
from .UniProtIDMap_convert_ids import UniProtIDMap_convert_ids
from .UniProtIDMap_gene_to_uniprot import UniProtIDMap_gene_to_uniprot
from .UniProtIDMap_list_databases import UniProtIDMap_list_databases
from .UniProtIDMap_to_pdb import UniProtIDMap_to_pdb
from .UniProtLocations_get_location import UniProtLocations_get_location
from .UniProtLocations_search import UniProtLocations_search
from .UniProtRef_get_disease import UniProtRef_get_disease
from .UniProtRef_get_keyword import UniProtRef_get_keyword
from .UniProtRef_get_proteome import UniProtRef_get_proteome
from .UniProtRef_search_diseases import UniProtRef_search_diseases
from .UniProtRef_search_keywords import UniProtRef_search_keywords
from .UniProtRef_search_proteomes import UniProtRef_search_proteomes
from .UniProtTaxonomy_get_taxon import UniProtTaxonomy_get_taxon
from .UniProtTaxonomy_search import UniProtTaxonomy_search
from .UniProt_get_alternative_names_by_accession import (
UniProt_get_alternative_names_by_accession,
)
@@ -1429,8 +1414,6 @@ from .UniProt_id_mapping import UniProt_id_mapping
from .UniProt_search import UniProt_search
from .UniProt_search_uniparc import UniProt_search_uniparc
from .UniProt_search_uniref import UniProt_search_uniref
from .UniRef_get_cluster import UniRef_get_cluster
from .UniRef_search_clusters import UniRef_search_clusters
from .UnifiedToolGenerator import UnifiedToolGenerator
from .Unpaywall_check_oa_status import Unpaywall_check_oa_status
from .WHO_Guideline_Full_Text import WHO_Guideline_Full_Text
@@ -1609,8 +1592,6 @@ from .ensembl_get_overlap_features import ensembl_get_overlap_features
from .ensembl_get_regulatory_features import ensembl_get_regulatory_features
from .ensembl_get_sequence import ensembl_get_sequence
from .ensembl_get_species import ensembl_get_species
from .ensembl_get_structural_variants import ensembl_get_structural_variants
from .ensembl_get_sv_detail import ensembl_get_sv_detail
from .ensembl_get_taxonomy import ensembl_get_taxonomy
from .ensembl_get_variants import ensembl_get_variants
from .ensembl_get_variation import ensembl_get_variation
@@ -1666,10 +1647,6 @@ from .expression_atlas_disease_target_score import expression_atlas_disease_targ
from .extract_clinical_trial_adverse_events import extract_clinical_trial_adverse_events
from .extract_clinical_trial_outcomes import extract_clinical_trial_outcomes
from .fda_pharmacogenomic_biomarkers import fda_pharmacogenomic_biomarkers
from .gProfiler_annotate_snps import gProfiler_annotate_snps
from .gProfiler_convert_ids import gProfiler_convert_ids
from .gProfiler_enrichment import gProfiler_enrichment
from .gProfiler_find_orthologs import gProfiler_find_orthologs
from .genomics_england_disease_target_score import genomics_england_disease_target_score
from .geo_get_dataset_info import geo_get_dataset_info
from .geo_get_sample_info import geo_get_sample_info
@@ -1683,6 +1660,7 @@ from .get_arxiv_info import get_arxiv_info
from .get_ase_info import get_ase_info
from .get_assembly_info_by_pdb_id import get_assembly_info_by_pdb_id
from .get_assembly_summary import get_assembly_summary
from .get_associated_documents_metadata import get_associated_documents_metadata
from .get_astropy_info import get_astropy_info
from .get_binding_affinity_by_pdb_id import get_binding_affinity_by_pdb_id
from .get_biopandas_info import get_biopandas_info
@@ -1809,6 +1787,11 @@ from .get_optlang_info import get_optlang_info
from .get_optuna_info import get_optuna_info
from .get_palantir_info import get_palantir_info
from .get_pandas_info import get_pandas_info
from .get_patent_application_metadata import get_patent_application_metadata
from .get_patent_continuity_data import get_patent_continuity_data
from .get_patent_foreign_priority_data import get_patent_foreign_priority_data
from .get_patent_overview_by_text_query import get_patent_overview_by_text_query
from .get_patent_term_adjustment_data import get_patent_term_adjustment_data
from .get_patsy_info import get_patsy_info
from .get_pdbfixer_info import get_pdbfixer_info
from .get_phenotype_by_HPO_ID import get_phenotype_by_HPO_ID
@@ -1976,6 +1959,10 @@ from .kegg_list_organisms import kegg_list_organisms
from .kegg_search_pathway import kegg_search_pathway
from .list_tools import list_tools
from .loinc_search_codes import loinc_search_codes
from .mcp_auto_loader_boltz import mcp_auto_loader_boltz
from .mcp_auto_loader_expert_feedback import mcp_auto_loader_expert_feedback
from .mcp_auto_loader_txagent import mcp_auto_loader_txagent
from .mcp_auto_loader_uspto_downloader import mcp_auto_loader_uspto_downloader
from .mesh_get_subjects_by_pharmacological_action import (
mesh_get_subjects_by_pharmacological_action,
)
@@ -2093,7 +2080,10 @@ __all__ = [
"ArgumentDescriptionOptimizer",
"BLAST_nucleotide_search",
"BLAST_protein_search",
"BRENDA_get_enzyme_info",
"BRENDA_get_inhibitors",
"BRENDA_get_kcat",
"BRENDA_get_km",
"BVBRC_get_genome",
"BVBRC_search_amr",
"BVBRC_search_genome_features",
@@ -2123,10 +2113,6 @@ __all__ = [
"BioModels_get_model",
"BioModels_list_files",
"BioModels_search_parameters",
"BioPortal_annotate_text",
"BioPortal_get_concept",
"BioPortal_get_hierarchy",
"BioPortal_search_ontology_terms",
"BioRxiv_get_preprint",
"BioSamples_get_sample",
"BioSamples_search",
@@ -2193,8 +2179,6 @@ __all__ = [
"ChIPAtlas_search_datasets",
"ClinGenAR_get_external_records",
"ClinGenAR_lookup_allele",
"ClinGen_dosage_by_gene",
"ClinGen_dosage_region_search",
"ClinGen_get_actionability_adult",
"ClinGen_get_actionability_pediatric",
"ClinGen_get_dosage_sensitivity",
@@ -2238,15 +2222,15 @@ __all__ = [
"DepMap_search_genes",
"DescriptionAnalyzer",
"DescriptionQualityEvaluator",
"Dfam_get_annotations",
"Dfam_get_family",
"Dfam_search_families",
"DigiKey_get_categories",
"DigiKey_get_manufacturers",
"DigiKey_get_product_details",
"DigiKey_search_by_keyword",
"DisProt_get_entry",
"DisProt_search",
"DisGeNET_get_disease_genes",
"DisGeNET_get_gda",
"DisGeNET_get_vda",
"DisGeNET_search_disease",
"DisGeNET_search_gene",
"DiseaseAnalyzerAgent",
"DiseaseOntology_get_parents",
"DiseaseOntology_get_term",
@@ -2255,15 +2239,14 @@ __all__ = [
"DrugOptimizationAgent",
"DrugSafetyAnalyzer",
"EBIProteins_get_antigen",
"EBIProteins_get_coordinate_mapping",
"EBIProteins_get_coordinates",
"EBIProteins_get_epitopes",
"EBIProteins_get_domains_sites",
"EBIProteins_get_features",
"EBIProteins_get_interaction_details",
"EBIProteins_get_interactions",
"EBIProteins_get_molecule_processing",
"EBIProteins_get_mutagenesis",
"EBIProteins_get_proteomics_peptides",
"EBIProteins_get_proteomics_ptm",
"EBIProteins_get_structural_features",
"EBIProteins_get_variation",
"EBITaxonomy_get_by_id",
"EBITaxonomy_get_by_scientific_name",
@@ -2280,11 +2263,16 @@ __all__ = [
"ENAPortal_search_samples",
"ENAPortal_search_studies",
"ENCODE_get_biosample",
"ENCODE_get_chromatin_state",
"ENCODE_get_experiment",
"ENCODE_get_file",
"ENCODE_list_files",
"ENCODE_search_annotations",
"ENCODE_search_biosamples",
"ENCODE_search_chromatin_accessibility",
"ENCODE_search_experiments",
"ENCODE_search_histone_experiments",
"ENCODE_search_methylation_experiments",
"EVE_get_gene_info",
"EVE_get_variant_score",
"Enamine_get_compound",
@@ -2296,23 +2284,20 @@ __all__ = [
"EnsemblCompara_get_paralogues",
"EnsemblLD_get_ld_pairwise",
"EnsemblLD_get_ld_variants",
"EnsemblMap_convert_coordinates",
"EnsemblMap_translate_coordinates",
"EnsemblPheno_get_by_gene",
"EnsemblPheno_get_by_region",
"EnsemblPheno_get_by_variant",
"EnsemblReg_get_binding_matrix",
"EnsemblReg_get_constrained_elements",
"EnsemblReg_get_motif_features",
"EnsemblReg_get_regulatory_elements",
"EnsemblSeq_get_id_sequence",
"EnsemblSeq_get_region_sequence",
"EnsemblVEP_annotate_hgvs",
"EnsemblVEP_annotate_rsid",
"EnsemblVEP_variant_recoder",
"EnsemblVar_get_population_frequencies",
"EnsemblVar_get_variant_consequences",
"Ensembl_get_cross_references",
"Ensembl_get_gene_overlapping_features",
"Ensembl_get_region_features",
"Ensembl_lookup_gene_by_symbol",
"Ensembl_get_assembly_info",
"Ensembl_get_species_info",
"EthicalComplianceReviewer",
"EuroPMCAnnot_get_annotations_by_type",
"EuroPMCAnnot_get_article_annotations",
@@ -2534,6 +2519,9 @@ __all__ = [
"GDC_list_files",
"GDC_list_projects",
"GDC_search_cases",
"GEO_get_dataset_details",
"GEO_search_chipseq_datasets",
"GEO_search_methylation_datasets",
"GIN_Guidelines_Search",
"GNPS_compare_spectra",
"GNPS_get_spectrum",
@@ -2563,10 +2551,6 @@ __all__ = [
"GTEx_get_top_expressed_genes",
"GTEx_query_eqtl",
"GWAS_search_associations_by_gene",
"GenomeNexus_annotate_mutation",
"GenomeNexus_annotate_variant",
"GenomeNexus_get_cancer_hotspots",
"GenomeNexus_get_canonical_transcript",
"GlyGen_get_glycan",
"GlyGen_get_glycoprotein",
"GlyGen_get_site",
@@ -2605,8 +2589,6 @@ __all__ = [
"HPO_get_term",
"HPO_get_term_hierarchy",
"HPO_search_terms",
"Harmonizome_get_gene",
"Harmonizome_list_datasets",
"HypothesisGenerator",
"ICD10_get_code_info",
"ICD10_search_codes",
@@ -2629,8 +2611,11 @@ __all__ = [
"InterProScan_get_job_status",
"InterProScan_scan_sequence",
"InterPro_get_domain_details",
"InterPro_get_entries_for_protein",
"InterPro_get_protein_domains",
"InterPro_get_proteins_by_domain",
"InterPro_search_domains",
"InterPro_search_entries",
"JASPAR_get_transcription_factors",
"JLCSearch_list_categories",
"JLCSearch_search_capacitors",
@@ -2681,8 +2666,6 @@ __all__ = [
"MetabolomicsWorkbench_search_by_mz",
"MetabolomicsWorkbench_search_compound_by_name",
"MethodologyRigorReviewer",
"MobiDB_get_consensus",
"MobiDB_get_protein",
"MonarchV3_get_associations",
"MonarchV3_get_entity",
"MonarchV3_search",
@@ -2728,20 +2711,34 @@ __all__ = [
"Nextstrain_get_dataset",
"Nextstrain_list_datasets",
"NoveltySignificanceReviewer",
"NvidiaNIM_alphafold2",
"NvidiaNIM_alphafold2_multimer",
"NvidiaNIM_boltz2",
"NvidiaNIM_diffdock",
"NvidiaNIM_esm2_650m",
"NvidiaNIM_esmfold",
"NvidiaNIM_evo2",
"NvidiaNIM_genmol",
"NvidiaNIM_maisi",
"NvidiaNIM_molmim",
"NvidiaNIM_msa_search",
"NvidiaNIM_openfold2",
"NvidiaNIM_openfold3",
"NvidiaNIM_proteinmpnn",
"NvidiaNIM_rfdiffusion",
"NvidiaNIM_vista3d",
"OBIS_search_occurrences",
"OBIS_search_taxa",
"OMA_get_group",
"OMA_get_hog",
"OMA_get_orthologs",
"OMA_get_protein",
"OMIM_get_clinical_synopsis",
"OMIM_get_entry",
"OMIM_get_gene_map",
"OMIM_search",
"OSF_search_preprints",
"OSL_get_efo_id_by_disease_name",
"OmniPath_get_cell_communication_annotations",
"OmniPath_get_complexes",
"OmniPath_get_enzyme_substrate",
"OmniPath_get_intercell_roles",
"OmniPath_get_ligand_receptor_interactions",
"OmniPath_get_signaling_interactions",
"OncoKB_annotate_copy_number",
"OncoKB_annotate_variant",
"OncoKB_get_cancer_genes",
@@ -2822,31 +2819,19 @@ __all__ = [
"Orphanet_get_genes",
"Orphanet_search_by_name",
"Orphanet_search_diseases",
"OrthoDB_get_group_details",
"OrthoDB_get_orthologs",
"OrthoDB_search_groups",
"OutputSummarizationComposer",
"OverallSummaryAgent",
"PANTHER_enrichment",
"PANTHER_gene_info",
"PANTHER_ortholog",
"PDB_search_similar_structures",
"PDBeSIFTS_get_all_structures",
"PDBeSIFTS_get_best_structures",
"PDBeSIFTS_get_pdb_to_uniprot",
"PDBeSearch_get_compound",
"PDBeSearch_search_by_organism",
"PDBeSearch_search_structures",
"PDBeValidation_get_outlier_residues",
"PDBeValidation_get_quality_scores",
"PDBe_KB_get_interface_residues",
"PDBe_KB_get_ligand_sites",
"PDBe_KB_get_summary_stats",
"PDBe_KB_get_superposition_clusters",
"PDBe_get_compound_structures",
"PDBe_get_compound_summary",
"PDBe_get_residue_listing",
"PDBe_get_structure_ligands",
"PMC_search_papers",
"PRIDE_get_project",
"PRIDE_get_project_files",
@@ -2914,20 +2899,18 @@ __all__ = [
"QuickGO_annotations_by_goterm",
"QuickGO_get_term_children",
"QuickGO_get_term_detail",
"RCSBAdvSearch_search_by_motif",
"RCSBAdvSearch_search_structures",
"RCSBGraphQL_get_ligand_info",
"RCSBGraphQL_get_polymer_entity",
"RCSBGraphQL_get_structure_summary",
"RCSBData_get_assembly",
"RCSBData_get_entry",
"RCSBData_get_nonpolymer_entity",
"RNAcentral_get_by_accession",
"RNAcentral_search",
"ReMap_get_transcription_factor_binding",
"ReactomeAnalysis_pathway_enrichment",
"ReactomeAnalysis_species_comparison",
"ReactomeAnalysis_token_result",
"ReactomeInteractors_get_entity_pathways",
"ReactomeInteractors_get_protein_interactors",
"ReactomeInteractors_search_entity",
"ReactomeContent_get_contained_events",
"ReactomeContent_get_enhanced_pathway",
"ReactomeContent_search",
"Reactome_get_complex",
"Reactome_get_database_version",
"Reactome_get_diseases",
@@ -2986,6 +2969,7 @@ __all__ = [
"STITCH_get_interaction_partners",
"STITCH_resolve_identifier",
"STRING_functional_enrichment",
"STRING_get_functional_annotations",
"STRING_get_interaction_partners",
"STRING_get_network",
"STRING_get_protein_interactions",
@@ -3002,15 +2986,14 @@ __all__ = [
"SwissDock_retrieve_results",
"SwissModel_get_models",
"SwissModel_get_summary",
"SynBioHub_get_collections",
"SynBioHub_get_part",
"SynBioHub_search_parts",
"TRIP_Database_Guidelines_Search",
"TestCaseGenerator",
"TestResultsAnalyzer",
"TheraSAbDab_get_all_therapeutics",
"TheraSAbDab_search_by_target",
"TheraSAbDab_search_therapeutics",
"ThreeDBeacons_get_structure_summary",
"ThreeDBeacons_get_structures",
"ToolCompatibilityAnalyzer",
"ToolDescriptionOptimizer",
"ToolDiscover",
@@ -3026,27 +3009,24 @@ __all__ = [
"Tool_Finder_Keyword",
"Tool_Finder_LLM",
"Tool_RAG",
"UCSC_get_cpg_islands",
"UCSC_get_encode_cCREs",
"UCSC_get_sequence",
"UCSC_get_tf_binding_clusters",
"UCSC_get_track",
"UCSC_search",
"UniChem_list_sources",
"UniChem_search_compound",
"UniParc_get_entry",
"UniParc_search",
"UniProtIDMap_convert_ids",
"UniProtIDMap_gene_to_uniprot",
"UniProtIDMap_list_databases",
"UniProtIDMap_to_pdb",
"UniProtLocations_get_location",
"UniProtLocations_search",
"UniProtRef_get_disease",
"UniProtRef_get_keyword",
"UniProtRef_get_proteome",
"UniProtRef_search_diseases",
"UniProtRef_search_keywords",
"UniProtRef_search_proteomes",
"UniProtTaxonomy_get_taxon",
"UniProtTaxonomy_search",
"UniProt_get_alternative_names_by_accession",
"UniProt_get_disease_variants_by_accession",
"UniProt_get_entry_by_accession",
@@ -3064,8 +3044,6 @@ __all__ = [
"UniProt_search",
"UniProt_search_uniparc",
"UniProt_search_uniref",
"UniRef_get_cluster",
"UniRef_search_clusters",
"UnifiedToolGenerator",
"Unpaywall_check_oa_status",
"WHO_Guideline_Full_Text",
@@ -3212,8 +3190,6 @@ __all__ = [
"ensembl_get_regulatory_features",
"ensembl_get_sequence",
"ensembl_get_species",
"ensembl_get_structural_variants",
"ensembl_get_sv_detail",
"ensembl_get_taxonomy",
"ensembl_get_variants",
"ensembl_get_variation",
@@ -3251,10 +3227,6 @@ __all__ = [
"extract_clinical_trial_adverse_events",
"extract_clinical_trial_outcomes",
"fda_pharmacogenomic_biomarkers",
"gProfiler_annotate_snps",
"gProfiler_convert_ids",
"gProfiler_enrichment",
"gProfiler_find_orthologs",
"genomics_england_disease_target_score",
"geo_get_dataset_info",
"geo_get_sample_info",
@@ -3268,6 +3240,7 @@ __all__ = [
"get_ase_info",
"get_assembly_info_by_pdb_id",
"get_assembly_summary",
"get_associated_documents_metadata",
"get_astropy_info",
"get_binding_affinity_by_pdb_id",
"get_biopandas_info",
@@ -3380,6 +3353,11 @@ __all__ = [
"get_optuna_info",
"get_palantir_info",
"get_pandas_info",
"get_patent_application_metadata",
"get_patent_continuity_data",
"get_patent_foreign_priority_data",
"get_patent_overview_by_text_query",
"get_patent_term_adjustment_data",
"get_patsy_info",
"get_pdbfixer_info",
"get_phenotype_by_HPO_ID",
@@ -3537,6 +3515,10 @@ __all__ = [
"kegg_search_pathway",
"list_tools",
"loinc_search_codes",
"mcp_auto_loader_boltz",
"mcp_auto_loader_expert_feedback",
"mcp_auto_loader_txagent",
"mcp_auto_loader_uspto_downloader",
"mesh_get_subjects_by_pharmacological_action",
"mesh_get_subjects_by_subject_id",
"mesh_get_subjects_by_subject_name",
@@ -1,55 +0,0 @@
"""
ensembl_get_structural_variants
Get structural variants overlapping a genomic region from Ensembl. Returns known SVs from DGVa (D...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ensembl_get_structural_variants(
species: str,
region: str,
feature: Optional[str] = "structural_variation",
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> list[Any]:
"""
Get structural variants overlapping a genomic region from Ensembl. Returns known SVs from DGVa (D...
Parameters
----------
species : str
Species name (e.g., 'human', 'homo_sapiens').
region : str
Genomic region in format 'chr:start-end' (e.g., '17:43044295-43125370'). Maxi...
feature : str
Feature type to retrieve. Fixed to 'structural_variation' for this tool.
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
list[Any]
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{
"name": "ensembl_get_structural_variants",
"arguments": {"species": species, "region": region, "feature": feature},
},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ensembl_get_structural_variants"]
@@ -1,49 +0,0 @@
"""
ensembl_get_sv_detail
Get detailed information for a specific structural variant from Ensembl by its accession (nsv/esv...
"""
from typing import Any, Optional, Callable
from ._shared_client import get_shared_client
def ensembl_get_sv_detail(
species: str,
id: str,
*,
stream_callback: Optional[Callable[[str], None]] = None,
use_cache: bool = False,
validate: bool = True,
) -> dict[str, Any]:
"""
Get detailed information for a specific structural variant from Ensembl by its accession (nsv/esv...
Parameters
----------
species : str
Species name (e.g., 'human', 'homo_sapiens').
id : str
Structural variant accession from Ensembl/DGVa (e.g., 'nsv2769779', 'esv36474...
stream_callback : Callable, optional
Callback for streaming output
use_cache : bool, default False
Enable caching
validate : bool, default True
Validate parameters
Returns
-------
dict[str, Any]
"""
# Handle mutable defaults to avoid B006 linting error
return get_shared_client().run_one_function(
{"name": "ensembl_get_sv_detail", "arguments": {"species": species, "id": id}},
stream_callback=stream_callback,
use_cache=use_cache,
validate=validate,
)
__all__ = ["ensembl_get_sv_detail"]
+8
View File
@@ -190,6 +190,14 @@ def evaluate_function_call(tool_definition, function_call):
# Case 1: Simple schema with direct "type" field
if "type" in param_schema:
expected_type = param_schema["type"]
# Handle list-style type (e.g., ["string", "null"]) - treat as nullable
if isinstance(expected_type, list):
# Allow None for nullable types
if value is None and "null" in expected_type:
continue
# Extract primary non-null type
non_null_types = [t for t in expected_type if t != "null"]
expected_type = non_null_types[0] if non_null_types else None
# Case 2: Complex schema with "anyOf" (common in MCP tools)
elif "anyOf" in param_schema: