=============== LIBRARY RULES =============== From library maintainers: - Use `import isabl_cli as ii` convention - Filter queries with Django-style syntax: status='SUCCEEDED', application__name='MUTECT' - Applications inherit from AbstractApplication - Data model hierarchy: Individual -> Sample -> Experiment -> Analysis - Analysis statuses: CREATED -> STAGED -> SUBMITTED -> STARTED -> SUCCEEDED / FAILED - Use system_id for experiments/individuals/samples, pk for analyses/projects/applications ### Install Isabl Plugin Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/README.md Use these commands to install the Isabl plugin from the marketplace. ```bash /plugin marketplace add juanesarango/isabl-mcp ``` ```bash /plugin install isabl ``` -------------------------------- ### Run Isabl MCP Server Directly or Install Globally Source: https://github.com/juanesarango/isabl-mcp/blob/main/README.md These commands allow you to run the Isabl MCP server directly without installation using 'uvx', or install it globally using pip for persistent access. ```bash uvx isabl-mcp # run directly, no install needed ``` ```bash pip install isabl-mcp # or install globally ``` -------------------------------- ### Example Isabl CLI Command Source: https://github.com/juanesarango/isabl-mcp/blob/main/README.md An example of using the Isabl CLI to check the status of RNA apps within a specific project. This command is part of the broader Isabl ecosystem for managing bioinformatics workflows. ```bash /isabl:isabl-monitor-analyses check the status of RNA apps in project 455 ``` -------------------------------- ### Development Commands for MCP Server Source: https://github.com/juanesarango/isabl-mcp/blob/main/README.md Commands for setting up the development environment, running tests, linting, and starting the MCP server locally. Ensure you are in the 'mcp-server' directory before executing. ```bash cd mcp-server uv sync --dev ``` ```bash uv run pytest ``` ```bash uv run ruff check isabl_mcp/ # lint ``` ```bash uv run mcp dev isabl_mcp/server.py # test with MCP Inspector ``` ```bash uv run isabl-mcp # start server locally ``` -------------------------------- ### Build and Print Isabl Experiment Queries Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Constructs a query to find experiments filtered by project and sample category, then iterates through the results to print system IDs and sample identifiers. Ensure the `isabl_cli` library is installed and configured. ```python 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}") ``` -------------------------------- ### Get FASTQ Files Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Returns the paired FASTQ file lists (R1 and R2) for an experiment. Validates pairing and raises an error if counts do not match. ```APIDOC ## GET /api/experiments/{experiment_id}/fastq ### Description Retrieves the paired FASTQ R1 and R2 file lists for a given experiment. ### Method GET ### Endpoint /api/experiments/{experiment_id}/fastq ### Parameters #### Path Parameters - **experiment_id** (string) - Required - The ID of the experiment. ### Response #### Success Response (200) - **r1_files** (array) - A list of R1 FASTQ file paths. - **r2_files** (array) - A list of R2 FASTQ file paths. #### Response Example ```json { "r1_files": ["path/to/file1_R1.fastq.gz"], "r2_files": ["path/to/file1_R2.fastq.gz"] } ``` ``` -------------------------------- ### Get Experiment or Analysis Instance by ID Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Instantiate an Experiment object using its system ID or an Analysis object using its primary key. Requires 'isabl_cli'. ```python import isabl_cli as ii # By system_id exp = ii.Experiment("SAMPLE_001") # By primary key analysis = ii.Analysis(12345) ``` -------------------------------- ### GET /projects/{pk}/drive-directory Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-models-serializers-endpoints/views-endpoints/README.md Retrieves or creates a Google Drive directory for a project. ```APIDOC ## GET /projects/{pk}/drive-directory ### Description Maps a project to a Google Drive folder, creating the folder structure if it does not exist. ### Method GET ### Endpoint /projects/{pk}/drive-directory ### Parameters #### Path Parameters - **pk** (integer) - Required - The primary key of the project. ``` -------------------------------- ### GET /igv/experiment/{system_id} Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-models-serializers-endpoints/views-endpoints/README.md Renders an experiment in the IGV genome viewer. ```APIDOC ## GET /igv/experiment/{system_id} ### Description Loads experiment data into the IGV HTML interface. ### Method GET ### Parameters #### Path Parameters - **system_id** (string) - Required - The system identifier for the experiment. ``` -------------------------------- ### Configure Isabl MCP Server in Codex Source: https://github.com/juanesarango/isabl-mcp/blob/main/README.md Add this TOML configuration to your ~/.codex/config.toml file to integrate the Isabl MCP server with Codex. Remember to substitute the example API URL and token with your specific credentials. ```toml [mcp_servers.isabl] command = "uvx" args = ["isabl-mcp"] env = { "ISABL_API_URL" = "https://your-isabl-instance.com/api/v1/", "ISABL_API_TOKEN" = "your-token" } ``` -------------------------------- ### Get Isabl Entity Types with Python SDK Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Demonstrates the main entity types available in the Isabl SDK and their corresponding query functions. Use these to initiate data retrieval. ```python 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 ``` -------------------------------- ### GET /projects/{pk}/jira-epic Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-models-serializers-endpoints/views-endpoints/README.md Retrieves or creates a JIRA epic associated with a given project. ```APIDOC ## GET /projects/{pk}/jira-epic ### Description Retrieves or creates a JIRA epic associated with a given project using the project primary key. ### Method GET ### Endpoint /projects/{pk}/jira-epic ### Parameters #### Path Parameters - **pk** (integer) - Required - The primary key of the project. ``` -------------------------------- ### Get Specific or All Results from an Analysis Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Extract specific results (like a VCF file path) or all results for an application from an experiment. Uses 'isabl_cli.utils'. ```python 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" ) ``` -------------------------------- ### Initialize ISABL CLI Application Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/applications-analysis-workflows/validation-preconditions/README.md Sets up the main entry point for the ISABL command-line interface application. This function is typically called when the script is executed. ```python def main(): app = ISABLCLI() app.run() if __name__ == "__main__": main() ``` -------------------------------- ### Track Running Isabl Analyses Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-monitor-analyses/SKILL.md Retrieves and displays details for analyses currently in the 'STARTED' status, ordered by start time. Shows the analysis primary key, application name, target system ID, and duration in hours. ```python running = ii.get_analyses( projects=PROJECT_PK, status="STARTED", ordering="-started" ) if running: print(f"\n=== RUNNING ({len(running)}) ===") for a in running[:20]: hours = (datetime.now() - a.started).total_seconds() / 3600 target = a.targets[0].system_id if a.targets else "N/A" print(f" [{a.pk}] {a.application.name}: {target} ({hours:.1f}h)") ``` -------------------------------- ### GET /igv/analysis/{pk} Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-models-serializers-endpoints/views-endpoints/README.md Renders an analysis in the IGV genome viewer. ```APIDOC ## GET /igv/analysis/{pk} ### Description Loads analysis data into the IGV HTML interface. ### Method GET ### Parameters #### Path Parameters - **pk** (integer) - Required - The primary key of the analysis. ``` -------------------------------- ### Create Individual, Samples, and Experiments via API Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-submit-data/SKILL.md Demonstrates the step-by-step creation of biological entities (individual, samples, experiments) using the ISABL API. Each entity is created individually, providing granular control. ```python # 1. Create individual individual = ii.create_instance("individuals", { "identifier": submission_data["individual"]["identifier"], "species": submission_data["individual"]["species"], "gender": submission_data["individual"]["gender"], "center": submission_data["individual"]["center"], }) print(f"Created individual: {individual.system_id}") # 2. Create samples samples = {} for sample_data in submission_data["samples"]: sample = ii.create_instance("samples", { "identifier": sample_data["identifier"], "category": sample_data["category"], "disease": sample_data["disease"], "individual": {"pk": individual.pk}, }) samples[sample_data["identifier"]] = sample print(f"Created sample: {sample.system_id}") # 3. Create experiments for exp_data in submission_data["experiments"]: sample = samples[exp_data["sample_identifier"]] experiment = ii.create_instance("experiments", { "identifier": exp_data["identifier"], "sample": {"pk": sample.pk}, "technique": exp_data["technique"], "platform": exp_data["platform"], "center": exp_data["center"], "raw_data": exp_data["raw_data"], "projects": [{"pk": PROJECT_PK}], }) print(f"Created experiment: {experiment.system_id}") ``` -------------------------------- ### Find Stale Analyses Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-project-report/SKILL.md Identifies analyses that have been in 'STARTED' status for more than 7 days. ```python from datetime import datetime, timedelta stale_cutoff = datetime.now() - timedelta(days=7) stale = ii.get_analyses( projects=PROJECT_PK, status="STARTED", modified__lt=stale_cutoff.isoformat() ) if stale: print(f"Stale analyses (started > 7 days ago): {len(stale)}") ``` -------------------------------- ### GET /reference/data Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/cli-commands-user-tools/user-facing-commands-authentication-retrieval-management/README.md Retrieves reference data based on assemblies or sequencing techniques. ```APIDOC ## GET /reference/data ### Description Retrieves reference data from assemblies or sequencing techniques depending on provided arguments. ### Method GET ### Endpoint /reference/data ### Parameters #### Query Parameters - **identifier** (string) - Optional - Identifier for the reference. - **data_id** (string) - Optional - Specific data ID. - **resources** (list) - Optional - Resources to include. - **model** (string) - Optional - Internal model for reference lookup. ``` -------------------------------- ### Define a Complete Isabl Application Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-write-app/SKILL.md Use the AbstractApplication base class to define metadata, CLI options, validation logic, and execution commands. ```python from isabl_cli import AbstractApplication, options class MyApplication(AbstractApplication): """ Brief description of what this application does. """ # Required metadata NAME = "my_application" VERSION = "1.0.0" # Optional: restrict to specific assembly/species ASSEMBLY = "GRCh37" # or "GRCh38", None for any SPECIES = "HUMAN" # or None for any # CLI configuration cli_help = "Run my application on experiments" cli_options = [options.TARGETS] # or REFERENCES, PAIRS # Configurable settings (can be overridden in database) application_settings = { "tool_path": "/usr/bin/mytool", "threads": 4, } # Define expected results application_results = { "output_file": { "frontend_type": "text-file", "description": "Main output file", "verbose_name": "Output", } } def validate_experiments(self, targets, references): """ Raise AssertionError if experiments are invalid for this app. Called before creating analyses. """ assert len(targets) == 1, "Requires exactly one target experiment" assert targets[0].technique.method == "WGS", "Only WGS supported" def get_dependencies(self, targets, references, settings): """ Return (dependency_analyses, inputs_dict) if this app needs results from other applications. """ return [], {} def get_command(self, analysis, inputs, settings): """ Return the shell command to execute. This is the core of the application. """ target = analysis.targets[0] output_dir = analysis.storage_url return f""" {settings.tool_path} \ --input {target.bam_files["GRCh37"]["url"]} \ --output {output_dir}/result.txt \ --threads {settings.threads} """ def get_analysis_results(self, analysis): """ Return dict of result paths after successful completion. Keys should match application_results. """ return { "output_file": f"{analysis.storage_url}/result.txt" } ``` -------------------------------- ### GET /instances/count Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/cli-commands-user-tools/user-facing-commands-authentication-retrieval-management/README.md Retrieves the number of database instances that match the provided criteria. ```APIDOC ## GET /instances/count ### Description Returns the count of database instances matching the specified endpoint and filters. ### Method GET ### Endpoint /instances/count ### Parameters #### Query Parameters - **endpoint** (string) - Required - The target database endpoint. - **filters** (object) - Optional - Criteria to filter the instances. ``` -------------------------------- ### Define Application Settings and Results Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-write-app/SKILL.md Configure settings that can be overridden in the database and define expected output results. ```python from isabl_cli import AbstractApplication, options class MyApplication(AbstractApplication): NAME = "my_application" VERSION = "1.0.0" cli_options = [options.TARGETS] # Configurable settings (can be overridden in database) application_settings = { "tool_path": "/usr/bin/mytool", "threads": 4, "memory_gb": 16, } # Define expected results application_results = { "output_file": { "frontend_type": "text-file", "description": "Main output file", "verbose_name": "Output", } } ``` -------------------------------- ### GET /instances Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/cli-usage-tooling/api-client-helpers-cli/README.md Retrieve instances from a list API endpoint with optional identifiers and filters. ```APIDOC ## GET /instances ### Description Fetches objects from list endpoints. Supports optional identifiers and filters. Returns a list of types.SimpleNamespace objects. ### Method GET ### Endpoint /instances ### Parameters #### Query Parameters - **identifiers** (list/str) - Optional - List of identifiers to filter by. - **filters** (dict) - Optional - Keyword arguments for filtering results. - **verbose** (bool) - Optional - If true, prints a count of retrieved objects. ``` -------------------------------- ### Retrieve Project Information Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-project-report/SKILL.md Fetches basic project metadata using the project primary key. ```python import isabl_cli as ii project = ii.get_instance("projects", PROJECT_PK) print(f"Project: {project.title}") print(f"Short title: {project.short_title}") print(f"PI: {project.principal_investigator}") print(f"Analyst: {project.analyst}") print(f"Description: {project.description}") ``` -------------------------------- ### Configure Isabl MCP Server in Cursor Source: https://github.com/juanesarango/isabl-mcp/blob/main/README.md Add this JSON configuration to your .cursor/mcp.json file to set up the Isabl MCP server connection in Cursor. Ensure you replace the placeholder URL and token with your actual Isabl instance details. ```json { "mcpServers": { "isabl": { "command": "uvx", "args": ["isabl-mcp"], "env": { "ISABL_API_URL": "https://your-isabl-instance.com/api/v1/", "ISABL_API_TOKEN": "your-token" } } } } ``` -------------------------------- ### Get Individual Data Tree Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Fetches all related data for a single individual identified by an identifier. ```APIDOC ## GET /api/individuals/{identifier}/tree ### Description Retrieves the complete aggregated data tree for a single individual. ### Method GET ### Endpoint /api/individuals/{identifier}/tree ### Parameters #### Path Parameters - **identifier** (string) - Required - The identifier for the individual. ### Response #### Success Response (200) - **tree** (object) - The aggregated data tree for the individual. #### Response Example ```json { "individual_id": "ind_123", "experiments": [...], "analyses": [...] } ``` ``` -------------------------------- ### Get Analyses Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Fetches analysis objects from the API by either identifiers or filter keyword arguments. ```APIDOC ## GET /api/analyses ### Description Fetches analysis objects from the API. ### Method GET ### Endpoint /api/analyses ### Parameters #### Query Parameters - **identifiers** (list) - Optional - A list of analysis identifiers. - **filter_kwargs** (object) - Optional - Key-value pairs for filtering analyses. ### Response #### Success Response (200) - **analyses** (array) - A list of analysis objects. #### Response Example ```json [ { "id": "analysis_a", "name": "Analysis A" }, { "id": "analysis_b", "name": "Analysis B" } ] ``` ``` -------------------------------- ### Verify Application Settings Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-debug-analysis/SKILL.md Inspects application-level settings and specific tool paths to ensure correct configuration. ```python # Get application settings app = ii.get_instance("applications", analysis.application.pk) print(f"Settings: {app.settings}") # Check specific setting from my_apps import MyApplication instance = MyApplication() print(f"Tool path: {instance.settings.tool_path}") ``` -------------------------------- ### Get Experiments Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Retrieves experiment resources by accepting optional identifiers or filter keyword arguments. ```APIDOC ## GET /api/experiments ### Description Fetches experiment resources from the API. ### Method GET ### Endpoint /api/experiments ### Parameters #### Query Parameters - **identifiers** (list) - Optional - A list of experiment identifiers. - **filter_kwargs** (object) - Optional - Key-value pairs for filtering experiments. ### Response #### Success Response (200) - **experiments** (array) - A list of experiment objects. #### Response Example ```json [ { "id": "exp_001", "name": "Experiment Alpha" }, { "id": "exp_002", "name": "Experiment Beta" } ] ``` ``` -------------------------------- ### Implement get_command for Isabl Application Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-write-app/SKILL.md Defines the shell command execution logic for an application by inheriting from AbstractApplication. ```python from isabl_cli import AbstractApplication, options class MyApplication(AbstractApplication): NAME = "my_application" VERSION = "1.0.0" cli_options = [options.TARGETS] application_settings = { "tool_path": "/usr/bin/mytool", "threads": 4, } def get_command(self, analysis, inputs, settings): """ Return the shell command to execute. This is the core of the application. """ target = analysis.targets[0] output_dir = analysis.storage_url return f""" {settings.tool_path} \ --input {target.bam_files["GRCh37"]["url"]} \ --output {output_dir}/result.txt \ --threads {settings.threads} """ ``` -------------------------------- ### GET /data/files Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/cli-commands-user-tools/user-facing-commands-authentication-retrieval-management/README.md Fetches file paths for raw experimental data based on filters and identifiers. ```APIDOC ## GET /data/files ### Description Returns file paths for experiments' raw data according to provided filters, identifiers, and desired data types. ### Method GET ### Endpoint /data/files ### Parameters #### Query Parameters - **filters** (object) - Optional - Criteria to filter experiments. - **identifiers** (list) - Optional - Specific identifiers for data retrieval. - **verbose** (boolean) - Optional - Enables detailed output. - **dtypes** (list) - Optional - Specific data types to fetch. ``` -------------------------------- ### GET /analyses/{pk}/result-file Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-models-serializers-endpoints/views-endpoints/README.md Endpoints for reading, downloading, or streaming analysis result files. ```APIDOC ## GET /analyses/{pk}/result-file ### Description Provides access to files within an analysis output directory. Supports rendering content (cat-like), downloading, or HTTP streaming. ### Method GET ### Parameters #### Path Parameters - **pk** (integer) - Required - The primary key of the analysis. ``` -------------------------------- ### Use Cursor Pagination for Large Datasets Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Employ cursor-based pagination for efficiently retrieving very large datasets of instances. Uses 'isabl_cli'. ```python import isabl_cli as ii # Use cursor pagination for very large datasets experiments = ii.get_instances( "experiments", projects=102, paginator="cursor" ) ``` -------------------------------- ### Get Projects Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Retrieves project resources from the API using optional identifiers or filter keyword arguments. ```APIDOC ## GET /api/projects ### Description Fetches project resources from the API. ### Method GET ### Endpoint /api/projects ### Parameters #### Query Parameters - **identifiers** (list) - Optional - A list of project identifiers. - **filter_kwargs** (object) - Optional - Key-value pairs for filtering projects. ### Response #### Success Response (200) - **projects** (array) - A list of project objects. #### Response Example ```json [ { "id": "proj_xyz", "name": "Project XYZ" }, { "id": "proj_abc", "name": "Project ABC" } ] ``` ``` -------------------------------- ### Define Scope for Analysis Monitoring Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-monitor-analyses/SKILL.md Set up parameters like project ID, application name, and time range for monitoring analyses. Imports necessary libraries for date and time manipulation. ```python import isabl_cli as ii from datetime import datetime, timedelta # Define what to monitor PROJECT_PK = 102 APPLICATION_NAME = "MUTECT" # or None for all HOURS_BACK = 24 # Look at last N hours cutoff = datetime.now() - timedelta(hours=HOURS_BACK) ``` -------------------------------- ### Get Multiple Individual Data Trees Source: https://github.com/juanesarango/isabl-mcp/blob/main/knowledge/output/site/api-client-resource-utilities/resource-crud-retrieval/README.md Retrieves the complete aggregated data trees for multiple individuals by accepting identifiers or filters. ```APIDOC ## GET /api/individuals/trees ### Description Retrieves the complete aggregated data trees for multiple individuals. ### Method GET ### Endpoint /api/individuals/trees ### Parameters #### Query Parameters - **identifiers** (list) - Optional - A list of individual identifiers. - **filter_kwargs** (object) - Optional - Key-value pairs for filtering individuals. ### Response #### Success Response (200) - **trees** (array) - A list of aggregated data trees for the individuals. #### Response Example ```json [ { "individual_id": "ind_123", "experiments": [...] }, { "individual_id": "ind_456", "analyses": [...] } ] ``` ``` -------------------------------- ### Import OS Module Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-submit-data/SKILL.md Initial import statement for validation scripts. ```python import os ``` -------------------------------- ### Define Application Metadata Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-write-app/SKILL.md Create the application class by inheriting from AbstractApplication and specifying required metadata like NAME and VERSION. ```python from isabl_cli import AbstractApplication, options class MyApplication(AbstractApplication): """ Brief description of what this application does. """ # Required metadata NAME = "my_application" VERSION = "1.0.0" # Optional: restrict to specific assembly/species ASSEMBLY = "GRCh37" # or "GRCh38", None for any SPECIES = "HUMAN" # or None for any ``` -------------------------------- ### Optimize Data Fetching with Field Selection Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Improve performance by fetching only necessary fields when retrieving experiments. Uses 'isabl_cli'. ```python import isabl_cli as ii # Only fetch needed fields experiments = ii.get_experiments( projects=102, fields=["pk", "system_id", "sample"] ) ``` -------------------------------- ### Retrieve Specific Fields for Isabl Experiments Source: https://github.com/juanesarango/isabl-mcp/blob/main/skills/isabl-query-data/SKILL.md Fetches only the 'system_id' and 'sample' fields for Isabl experiments to optimize data retrieval. This is useful when only specific attributes are needed, adhering to ID display conventions. ```python 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}") ```