From isabl
Help construct queries to retrieve data from Isabl using the Python SDK. Use when searching for experiments, analyses, samples, or other data.
How this skill is triggered — by the user, by Claude, or both
Slash command
/isabl:isabl-query-datainheritThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping the user query data from the Isabl platform using the Python SDK.
You are helping the user query data from the Isabl platform using the Python SDK.
Work through these steps systematically:
system_id (or identifier if system_id is not available); avoid pk unless explicitly requestedindividual_level_analysis -> show individual system_id (e.g., IID_H210514)
- project_level_analysis -> show project pk
- avoid listing long targets/references experiment arrays unless explicitly requestedISABL_API_URL, remove /api/v1/ before appending query params (e.g., ?analysis=<pk>)Ask clarifying questions if needed:
import isabl_cli as ii
# Main entity types and their query functions
experiments = ii.get_experiments(...) # Sequencing data
analyses = ii.get_analyses(...) # Pipeline results
samples = ii.get_instances("samples", ...) # Tissue specimens
individuals = ii.get_instances("individuals", ...) # Patients/subjects
applications = ii.get_instances("applications", ...) # Pipelines
projects = ii.get_instances("projects", ...) # Project groupings
# Filter by project
experiments = ii.get_experiments(projects=102)
# Filter by status
analyses = ii.get_analyses(status="SUCCEEDED")
# Filter by application
analyses = ii.get_analyses(application__name="MUTECT")
# Filter by date range
analyses = ii.get_analyses(created__gte="2024-01-01")
# Combine multiple filters
experiments = ii.get_experiments(
projects=102,
sample__category="TUMOR",
technique__method="WGS"
)
| Operator | Example | Purpose |
|---|---|---|
| (none) | status="SUCCEEDED" | Exact match |
__contains | name__contains="tumor" | Substring |
__icontains | name__icontains="TUMOR" | Case-insensitive substring |
__startswith | name__startswith="PT" | Starts with |
__in | status__in=["SUCCEEDED","FAILED"] | One of values |
__gt, __gte | created__gt="2024-01-01" | Greater than |
__lt, __lte | total__lte=100 | Less than |
__isnull | results__isnull=False | Is/isn't null |
! prefix | status!="FAILED" | Negation |
Use double underscore to traverse related objects:
import isabl_cli as ii
# Experiments for a specific individual
experiments = ii.get_experiments(sample__individual__pk=500)
# Analyses by application name
analyses = ii.get_analyses(application__name="variant_caller")
# Experiments with specific technique
experiments = ii.get_experiments(technique__method="WGS")
import isabl_cli as ii
experiments = ii.get_experiments(
projects=102,
sample__category="TUMOR"
)
for exp in experiments:
print(f"{exp.system_id}: {exp.sample.identifier}")
When users ask for an experiment/sample/individual "ID", prefer the human-readable identifier (system_id or identifier) and omit numeric pk unless asked.
import isabl_cli as ii
experiments = ii.get_experiments(projects=102, fields=["system_id", "sample"])
for exp in experiments:
print(f"experiment_id={exp.system_id}")
For MCP isabl_query, prefer:
isabl_query(
endpoint="experiments",
filters={"projects": 102},
output_fields=["system_id"]
)
When listing analyses, use identifiers that match the analysis scope:
WGTS_REPORT), display the individual id (IID_H...).pk.targets/references experiment lists unless the user asks for them.Before rendering a table, include one concise summary line that states what is being shown.
Examples:
import isabl_cli as ii
analyses = ii.get_analyses(
application__name="variant_caller",
application__version="2.0.0",
status="SUCCEEDED"
)
for a in analyses:
print(f"Analysis {a.pk}: {a.results}")
import isabl_cli as ii
failed = ii.get_analyses(
status="FAILED",
created__gt="2024-01-01"
)
for a in failed:
print(f"{a.pk}: {a.application.name}")
import isabl_cli as ii
# By system_id
exp = ii.Experiment("SAMPLE_001")
# By primary key
analysis = ii.Analysis(12345)
import isabl_cli as ii
count = ii.get_instances_count("experiments", projects=102)
print(f"Total experiments: {count}")
import isabl_cli as ii
individual = ii.get_tree(individual_pk)
for sample in individual.sample_set:
print(f"Sample: {sample.identifier}")
for exp in sample.experiment_set:
print(f" Experiment: {exp.system_id}")
import isabl_cli as ii
from isabl_cli import utils
# Get specific result from an experiment
vcf_path, analysis = utils.get_result(
experiment=experiment,
application_key=123,
result_key="vcf"
)
print(f"VCF: {vcf_path}")
# Get all results for an application
results = utils.get_results(
experiment=experiment,
application_name="variant_caller"
)
import isabl_cli as ii
# Only fetch needed fields
experiments = ii.get_experiments(
projects=102,
fields=["pk", "system_id", "sample"]
)
# Stop after N results
experiments = ii.get_experiments(
projects=102,
count_limit=100
)
# Use cursor pagination for very large datasets
experiments = ii.get_instances(
"experiments",
projects=102,
paginator="cursor"
)
import isabl_cli as ii
import pandas as pd
experiments = ii.get_experiments(projects=102)
df = pd.DataFrame([
{
"system_id": e.system_id,
"sample": e.sample.identifier,
"category": e.sample.category,
"technique": e.technique.method,
}
for e in experiments
])
df.head()
Individual
├── identifier (unique)
├── species (HUMAN, MOUSE, etc.)
├── gender
└── sample_set → [Sample]
Sample
├── identifier
├── individual → Individual
├── category (TUMOR, NORMAL, etc.)
└── experiment_set → [Experiment]
Experiment
├── system_id (unique)
├── sample → Sample
├── technique → Technique
├── platform → Platform
├── raw_data (dict)
├── bam_files (dict)
└── analysis_set → [Analysis]
Analysis
├── pk
├── application → Application
├── targets → [Experiment]
├── references → [Experiment]
├── status (CREATED, STAGED, SUBMITTED, STARTED, SUCCEEDED, FAILED)
├── storage_url (path to results)
└── results (dict)
Application
├── name
├── version
├── assembly
├── species
└── settings (dict)
npx claudepluginhub juanesarango/isabl-mcp --plugin isablSearches ENCODE genomics data for experiments and files by assay, organ, cell line, or target. Explores availability via facets, metadata, and counts before downloading.
Integrates the Benchling R&D platform via its REST API and SDK — access the registry (DNA, proteins), inventory, ELN entries and workflows, build Benchling Apps, and query the Benchling Data Warehouse.
Manages biological datasets (scRNA-seq, spatial, flow cytometry) with queryable, traceable, FAIR data lakehouse. Tracks lineage, validates schemas, annotates with ontologies, and integrates with Nextflow, Snakemake, W&B, MLflow.