Skip to main content
Glama

gigwa-mcp MCP server

MCP Badge

Gigwa MCP Server

An MCP server that drives a local or remote Gigwa installation over its REST API. It lets an MCP client (Claude Desktop / Claude Code) run the whole genotyping workflow in plain language: connect → import genotype data & metadata → run QC and diversity analyses → audit databases for import artifacts. Built for genomic-resources teams and genebanks, but works with any Gigwa instance.

  • Import DArTseq SNP/Silico xlsx reports (with correct 2-row genotype calling) or plain VCF, plus per-individual metadata.

  • Analyse read-only: genotypes are pulled out of Gigwa and all statistics are computed in Python (scikit-allel / numpy / scipy). Nothing is written back.

  • Audit an existing instance to find databases that were imported badly.

  • Every analysis returns a chat summary and writes full tables as CSV under ./gigwa_results/<database>/.

Table of contents

Related MCP server: Cloud Life Sciences API MCP Server

Overview

Gigwa is a web platform for storing and querying genotyping data. Loading data into it and getting analyses out is normally manual (massaging xlsx into Gigwa's import format, clicking through the web UI, uploading .dart/.vcf, exporting VCFs, running pop-gen tools separately).

This server exposes Gigwa as a set of MCP tools. You talk to your MCP client in natural language; it picks the matching tool and fills in the arguments. There is no chat API of its own, meaning the "interface" is the tool list below plus your prompts.

The analysis tools are read-only: they extract genotypes (via async VCF export or paged BrAPI allelematrix), compute everything in Python, and write CSVs locally. They never modify the data in Gigwa.

Features

Import pipeline

Tool

What it does

gigwa_connect

Switch the active Gigwa server at runtime (credentials from the environment, never the chat)

gigwa_server_info

Verify connectivity/auth and report the server version

list_content

List databases → projects → runs on the instance

import_dartseq

Call genotypes from DArTseq SNP/Silico xlsx report(s) → VCF and import (optionally genome-anchored via reference_fasta)

import_vcf

Import a .vcf / .vcf.gz (any technology)

map_dartseq_to_reference

Align DArT tag sequences to a reference genome to infer each marker's chromosome/position

validate_metadata

Validate an individual-metadata TSV without importing

import_metadata

Import per-individual attributes into a database

get_import_progress

Poll a running import by its progress token

abort_import

Cancel a running import (or other process) by its progress token

Discovery, search & export (read-only)

Tool

What it does

list_variant_sets

List every run with its exact BrAPI variantSetDbId (the id the analysis tools take)

list_sequences

List the chromosomes/contigs of a variant set (valid reference_name values)

count_variants

Count variants matching region / MAF / missing-data filters, server-side (no download)

search_variants

Search variants server-side and write the matching list (variant_search.csv)

list_export_formats

List the export formats this build actually offers, with variant-type/ploidy limits

export_genotypes

Export a variant set — or a filtered/selected subset — to a file; wait=False for long runs

get_export_progress

Status of this session's running export (started with wait=False)

fetch_export_file

Download a completed export once get_export_progress reports it done

search_callsets

Dump per-sample (callset) metadata — names + additionalInfo attributes (sample_metadata.csv)

get_germplasm_metadata

Pull server-stored per-individual attributes (germplasm_metadata.csv)

list_metadata_values

List individual-metadata field names and their distinct values

filter_individuals_by_metadata

Select individuals by metadata field/value filters (feeds export_genotypes)

QC & diversity (read-only)

Tool

What it does

qc_call_rate

Per-sample & per-marker call rate; flag low-call samples/markers

qc_heterozygosity

Per-sample Ho; flag outliers (contamination / off-type / selfed)

qc_duplicate_accessions

Pairwise IBS → group duplicate/clonal accessions

qc_maf_filter

Report markers that MAF / missingness filters would remove

diversity_summary

Per-marker MAF, He, Ho, PIC, Fis + dataset means

diversity_pca

PCA of population structure; variance explained + PC coords (optional group column)

diversity_kinship

VanRaden genomic relationship (kinship) matrix

diversity_fst

Pairwise Weir & Cockerham Fst between groups

diversity_by_group

Per-population He, Ho, Fis, MAF, % polymorphic + (rarefied) allelic richness

diversity_core_collection

Greedy allele-coverage core: smallest accession set capturing the most diversity

diversity_structure

Lightweight ancestry with PCA + K-means, pseudo-F suggests K (no ADMIXTURE binary)

diversity_tree

UPGMA dendrogram of accessions from IBS distance, written as Newick (tree.nwk)

Every QC & diversity tool also accepts region ("chrom" or "chrom:start-end", 1-based; from list_sequences) to restrict the analysis to one genomic window.

Import-quality audit

Tool

What it does

audit_import_quality

Scan a whole instance (or one run) for genotype-encoding artifacts left by a bad import; rank runs BROKEN / SUSPECT / OK

How it works

MCP client (Claude Desktop / Code)
        │  natural language → tool call
        ▼
  gigwa_mcp (this server, stdio)
        │  GigwaClient: token auth, multipart upload, async progress, BrAPI v2
        ▼
     Gigwa REST API  ──►  genotypes (async VCF export  ‖  paged search/allelematrix)
        │
        ▼
  scikit-allel / numpy / scipy  →  chat summary + CSV under ./gigwa_results/<module>/

Analyses load genotypes through gigwa_mcp/analysis/genotypes.py:load_genotypes, which has two backends:

  • method="vcf" (default) : exports the whole variant set once via async VCF and caches it on disk for reuse. Best for small/medium sets and when you will run several tools on the same run.

  • method="allelematrix" : pages the genotype matrix via BrAPI search/allelematrix, honouring a server-side max_markers subset and sizing pages to the server's per-response cell cap, and caches the result in-process per (variant set, caps) so repeat tool calls reuse it. Best for large datasets where a full export is wasteful (see Performance & scaling).

Variant sets are addressed by their BrAPI variantSetDbId, of the form MODULE§projectNumber§run (e.g. MyDatabase§1§run1). list_content shows them.

Requirements

  • Python ≥ 3.10

  • uv (provides the uvx command) is required if you launch the server with uvx gigwa-mcp (the recommended MCP-client setup below). Not needed if you pip/pipx-install the package and point your client at the resulting executable instead. Install it with curl -LsSf https://astral.sh/uv/install.sh | sh (macOS/Linux) or pip install uv, then make sure uvx is on your PATH (see the note below).

  • A reachable Gigwa server (local or remote) and credentials.

  • Optional: the minimap2 CLI on PATH for DArTseq genome-anchoring of very large genomes (otherwise the in-process mappy binding is used).

  • Optional: the [viz] extra (matplotlib) to run the plotting recipes / regenerate the example figures.

Core Python dependencies (installed automatically): mcp, httpx, pandas, openpyxl, numpy, python-dotenv, scikit-allel, scipy, mappy.

Installation

Find & try it on Glama

gigwa-mcp is listed in the Glama MCP directory — the quickest way to see what it does. Browse its tools, prompts and resources and try it live in the in-browser MCP Inspector: it defaults to the public ICARDA instance with anonymous access, so no setup or credentials are needed for a first look. Glama also generates a ready-to-paste connection config for common MCP clients; under the hood that just runs uvx gigwa-mcp (or the Docker image) — the same as the steps below.

Install it yourself

From PyPI (recommended):

pip install gigwa-mcp                # core + analysis (scikit-allel/scipy)
pip install "gigwa-mcp[viz]"         # + matplotlib, for the plotting recipes

Or run it without installing into your environment using pipx or uv which is handy as the command in an MCP client config (see below):

pipx install gigwa-mcp        # then: gigwa-mcp
uvx gigwa-mcp                 # run on demand, no install step

From source (for development or an unreleased version):

git clone https://github.com/gkanogiannis/Gigwa-MCP.git gigwa-mcp && cd gigwa-mcp
python -m venv venv && source venv/bin/activate
pip install -e .            # core + analysis (scikit-allel/scipy)
pip install -e ".[dev]"     # + pytest, to run the test suite
pip install -e ".[viz]"     # + matplotlib, for plotting recipes / example figures

Run the stdio server directly to smoke-test:

python -m gigwa_mcp         # or: gigwa-mcp

(Normally you don't run it by hand as your MCP client launches it; see below.)

Add it to Claude Code (the simple version)

Think of this as plugging a new tool into Claude Code so you can just talk to your Gigwa server. You do it once, with a single command without editting any files by hand.

  1. Install uv, which provides the uvx command. It's a small helper that downloads and runs gigwa-mcp for you, so you don't have to install anything else first:

    curl -LsSf https://astral.sh/uv/install.sh | sh   # macOS / Linux
    # or, on Windows PowerShell:
    #   powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    # or, if you already have Python/pip:
    #   pip install uv

    Then confirm it's reachable: uvx --version should print a version. If it says "command not found", uvx isn't on your PATH yet, then see the note below. (If you'd rather not use uv at all, pipx install gigwa-mcp works too; then use gigwa-mcp in place of uvx gigwa-mcp everywhere below.)

  2. Run this one command in your terminal, swapping in your own Gigwa address, username, and password:

    claude mcp add gigwa --scope user \
      -e GIGWA_URL=http://localhost:8080/gigwa \
      -e GIGWA_USER=your_user \
      -e GIGWA_PASS=your_password \
      -- uvx gigwa-mcp

    What the pieces mean, in plain words:

    • gigwa : the nickname you're giving this tool.

    • --scope user : "make it available in all my projects" (use --scope project instead to share it with your team via a .mcp.json file in the repo).

    • the three -e lines : your Gigwa address and login, handed to the tool privately.

    • everything after -- : the command that actually starts the server (uvx gigwa-mcp).

  3. Check it worked. In Claude Code, type /mcp. You should see gigwa listed.

  4. Just ask. Try: "Is my Gigwa up, and what version?" or "List the databases." Claude picks the right tool and fills in the details for you.

Note that uvx must be on your client's PATH. If /mcp shows the server as failed with Executable not found in $PATH: "uvx", the MCP client couldn't find uvx. The uv installer drops uvx in ~/.local/bin (or ~/.cargo/bin); make sure that directory is on the PATH of the shell/app that launches Claude (restart the app or your terminal after installing). As a workaround you can point the config at the absolute path ("command": "/home/you/.local/bin/uvx"), or avoid uvx entirely by pipx install gigwa-mcp and using gigwa-mcp as the command.

Run with Docker

Prefer a container instead of uvx/pipx? Use the prebuilt image or build it yourself, then let your MCP client launch it. The server speaks stdio, so the client starts it with docker run -i the same way it would start uvx gigwa-mcp.

Pull the prebuilt image (published to the GitHub Container Registry, multi-arch linux/amd64 + linux/arm64):

docker pull ghcr.io/gkanogiannis/gigwa-mcp:latest

…or build it yourself:

docker build -t gigwa-mcp .

The examples below use the local tag gigwa-mcp; swap in ghcr.io/gkanogiannis/gigwa-mcp:latest to run the prebuilt image instead.

The image starts in stdio mode by default. To serve Streamable HTTP instead, explicitly set a port and publish it:

docker run -d --rm -p 8184:8184 -e GIGWA_MCP_PORT=8184 \
  -e GIGWA_URL -e GIGWA_USER -e GIGWA_PASS gigwa-mcp

MCP client config (Claude Desktop / Claude Code) — use docker as the command:

{
  "mcpServers": {
    "gigwa": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "GIGWA_URL", "-e", "GIGWA_USER", "-e", "GIGWA_PASS",
        "-v", "/host/data:/data",
        "gigwa-mcp"
      ],
      "env": {
        "GIGWA_URL": "http://host.docker.internal:8080/gigwa",
        "GIGWA_USER": "your_user",
        "GIGWA_PASS": "your_password"
      }
    }
  }
}
  • -i is required (stdio); --rm cleans up the container on exit.

  • The bare -e GIGWA_URL form forwards each value from the env block above into the container, so credentials stay in your client config, not in the image.

Files (volume mount). Mount a host directory at /data (the container's working directory). Put import inputs there and reference them by their in-container path, e.g. /data/report_snps.xlsx and /data/reference.sr.mmi. Analysis outputs are written to /data/gigwa_results/<module>/, which appears in your mounted host directory.

Reaching Gigwa. A Gigwa running on your host is not at localhost from inside the container:

  • macOS / Windows: use http://host.docker.internal:8080/gigwa (works out of the box).

  • Linux: add "--add-host=host.docker.internal:host-gateway" to args and use the same URL, or use "--network", "host" and point GIGWA_URL at http://localhost:8080/gigwa.

  • Remote Gigwa: just set GIGWA_URL to its address — no extra networking flags needed.

Configuration

Connection settings come from the environment, optionally seeded from a .env file in the working directory or any parent (cp .env.example .env and edit):

GIGWA_URL=http://localhost:8080/gigwa
GIGWA_USER=your_user
GIGWA_PASS=your_password
# GIGWA_TIMEOUT=120          # optional, seconds — read/request timeout
# GIGWA_CONNECT_TIMEOUT=10   # optional, seconds — TCP connect only

GIGWA_URL is the Gigwa base URL without the /rest suffix (it is appended automatically). The target Gigwa may be local or remote. .env files are gitignored; keep credentials out of version control.

Zero config. Every setting is optional — with no environment at all, the server connects anonymously to the public ICARDA instance (https://gigwa.icarda.org:8443/gigwa), so it works out of the box for a first look (a notice is printed to stderr). Set GIGWA_URL to point at your own server.

Anonymous access. GIGWA_USER/GIGWA_PASS are optional — omit both to connect as Gigwa's anonymous user, which can perform the public/read-only operations a given instance exposes (discovery, list_content/list_variant_sets, search_callsets, count_variants, and the read-only analyses on public data). Set both to authenticate (required for import/write operations and private databases); setting only one is an error.

Switching servers mid-conversation. The gigwa_connect tool re-points every subsequent tool at a different Gigwa server without a restart — e.g. "connect to https://other.example:8443/gigwa". The new connection is verified with a live round-trip before it takes effect (a failure rolls back to the previous one), and the change lasts for the session (env config is restored on restart). Credentials never pass through the chat: to reach a server that needs credentials, pre-set a named profile in the environment and reference it by name — gigwa_connect(url, profile="prod") reads GIGWA_USER_PROD / GIGWA_PASS_PROD. Use gigwa_connect(url, anonymous=true) to force unauthenticated access. The default GIGWA_USER/GIGWA_PASS are reused only when reconnecting to the configured GIGWA_URL — switching to a different server without a profile connects anonymously, so your home credentials are never sent to another host by accident.

# A named credential profile for gigwa_connect(url, profile="prod")
GIGWA_USER_PROD=your_user
GIGWA_PASS_PROD=your_password

Connecting from an MCP client

Add a stdio server entry (Claude Desktop claude_desktop_config.json or Claude Code MCP settings). If you pip installed into a venv, point command at that venv's gigwa-mcp; with uv you can have it fetch and run the published package on demand with no separate install:

{
  "mcpServers": {
    "gigwa": {
      "command": "uvx",
      "args": ["gigwa-mcp"],
      "env": {
        "GIGWA_URL": "http://localhost:8080/gigwa",
        "GIGWA_USER": "your_user",
        "GIGWA_PASS": "your_password"
      }
    }
  }
}

Or with an explicit interpreter path ("command": "/abs/path/to/venv/bin/gigwa-mcp", no args) if you installed it into a virtual environment.

Credentials live in this config and every tool call authenticates on its own (token generated and refreshed automatically), so no per-chat "connect" step is required. To drive several Gigwa servers you can either register one entry each (e.g. gigwa-local, gigwa-remote) with its own GIGWA_URL/credentials and name the one you mean in the prompt, or stay in one session and switch at runtime with the gigwa_connect tool (see Switching servers mid-conversation above) — pre-set a GIGWA_USER_<PROFILE> / GIGWA_PASS_<PROFILE> pair per server so no secret is ever typed into the chat.

Quick start

You talk to your MCP client in plain language; it calls the matching tool and fills in arguments (paths, thresholds, module names) from what you say. A typical first session:

You ask

Tool called

"Is my Gigwa up, and what version?"

gigwa_server_info

"Connect and list the databases."

list_content

"Import report_snps.xlsx into a new database MYDB, anchored to reference.sr.mmi."

import_dartseq(..., reference_fasta=...)

"Now run call-rate QC and a PCA on that run."

qc_call_ratediversity_pca

"Scan the whole instance for badly imported databases."

audit_import_quality

More example prompts:

You ask

Tool called

"Load this VCF into project trial1."

import_vcf

"Validate then import this individual-metadata TSV."

validate_metadataimport_metadata

"Find duplicate / clonal accessions."

qc_duplicate_accessions

"Flag heterozygosity outliers (contamination / off-types)."

qc_heterozygosity

"Which markers would a MAF 5% / 50%-missing filter drop?"

qc_maf_filter

"Give me per-marker MAF, He, Ho, PIC."

diversity_summary

"Compute the kinship matrix."

diversity_kinship

"Compute Fst between these two groups of accessions."

diversity_fst

"Compare diversity (He/Ho/allelic richness) across my populations."

diversity_by_group

"Pick a core collection of ~10% that captures the most diversity."

diversity_core_collection

"How many genetic clusters are in this collection?"

diversity_structure

"Build a UPGMA tree of the accessions."

diversity_tree

Tool reference

All variant-set tools take variant_set_db_id (MODULE§projectNumber§run). QC/diversity tools also accept output_dir (defaults to ./gigwa_results/<module>/), the scaling args max_markers / method ("vcf" | "allelematrix"), and region ("chrom" / "chrom:start-end"); see Performance & scaling.

Connection & import

Tool

Key arguments

Returns / writes

gigwa_connect

url, profile?, anonymous=False

switches the active server (verified); creds from env (GIGWA_USER[_PROFILE]), never the chat

gigwa_server_info

(none)

server version + auth check

list_content

(none)

database → project → run hierarchy

import_dartseq

snp_xlsx?, silico_xlsx?, module, project, run, ploidy=2, reference_fasta?, positions_csv?, wait=True

imports a DArTseq report; marker/sample counts + final status

import_vcf

vcf_path, module, project, run, ploidy=2, wait=True

imports a .vcf/.vcf.gz

map_dartseq_to_reference

snp_xlsx, reference_fasta, min_mapq, backend="auto"

dartseq_positions.csv (chrom/pos/strand per marker)

validate_metadata

tsv_path, module, metadata_type="Individual"

validation issues (no import)

import_metadata

tsv_path, module, metadata_type="Individual"

imports per-individual attributes

get_import_progress

progress_token

current async-job status

abort_import

progress_token

requests cancellation of a running process

Discovery, search & export

Tool

Key arguments

Returns / writes

list_variant_sets

(none)

every run's exact variantSetDbId + counts

list_sequences

variant_set_db_id

chromosomes/contigs (valid reference_names)

count_variants

reference_name?, start?, end?, min_maf?, max_maf?, max_missing_data?

server-side match count (no download)

search_variants

same filters as count_variants, max_variants=100000

variant_search.csv (id/chrom/pos/ref/alt)

list_export_formats

(none)

the instance's export handlers + type/ploidy limits

export_genotypes

output_path, format="VCF", plus region?, min_maf?, individuals?, metadata_fields?, wait=True

writes the export file; wait=False returns a URL or saves an immediately returned file

get_export_progress

(none)

status of this session's export

fetch_export_file

download_url, output_path

writes the completed export

search_callsets

variant_set_db_id

sample_metadata.csv (per-sample attributes)

get_germplasm_metadata

variant_set_db_id

germplasm_metadata.csv (join on sample_name)

list_metadata_values

variant_set_db_id

metadata fields + distinct values

filter_individuals_by_metadata

variant_set_db_id, filters_json

matching individual identifiers

QC & diversity (output files listed in Output files)

Tool

Key arguments

Flags / interprets

qc_call_rate

min_sample_call_rate=0.5, min_marker_call_rate=0.5

samples/markers below threshold

qc_heterozygosity

outlier_sd=3.0

Ho outliers; warns if cohort mean Ho implausibly high

qc_duplicate_accessions

similarity_threshold=0.95, max_markers=5000

duplicate/clone groups; warns on degenerate clustering

qc_maf_filter

maf_threshold=0.05, max_missing=0.5

counts monomorphic / low-MAF / high-missing markers

diversity_summary

(none)

dataset means; warns on strongly negative Fis

diversity_pca

n_components=10, outlier_sd=6.0, metadata_tsv?, group_column?

variance explained + PC1/PC2 outliers

diversity_kinship

top_pairs=15

mean off-diagonal, top related pairs, inbreeding diagonal

diversity_fst

groups_json? or metadata_tsv+group_column, id_column="individual"

pairwise Fst

diversity_by_group

groups_json? / metadata_tsv+group_column

per-group He/Ho/Fis/MAF/%poly/allelic richness

diversity_core_collection

size? or fraction=0.1

core set + % of diversity captured

diversity_structure

k_min=2, k_max=10

suggested K (pseudo-F) + per-K table; warns on degenerate clustering

diversity_tree

max_markers=5000

UPGMA Newick (tree.nwk)

Audit

Tool

Key arguments

Returns / writes

audit_import_quality

variant_set_db_id? (omit = whole instance), max_markers=1000, max_samples=300, thresholds

ranked BROKEN/SUSPECT/OK + import_quality_scan.csv

Prompts & resources

Besides tools, the server exposes MCP prompts and resources (visible in clients that support them, and in directories like glama.ai).

Prompts — reusable, argument-driven workflows that chain the right tools for a task:

Prompt

Arguments

What it walks you through

import_and_qc

data_path, module, project, run, reference?

import a DArTseq/VCF dataset, then the standard QC + audit

diversity_report

variant_set_db_id, metadata_tsv?, group_column?

summary → PCA/structure → kinship → tree (+ per-group Fst)

qc_triage

variant_set_db_id

full QC suite + a go/no-go verdict for downstream analysis

explore_instance

(none)

server info → list content/variant sets → instance-wide audit

region_scan

variant_set_db_id, region

sequences → count/search variants → region-filtered diversity

Resources — read-only endpoints a client can fetch:

Resource

Contents

catalog://tools

categorised catalog of all tools with their EDAM operation/topic tags

gigwa://server/info

configured connection info (target URL + auth mode); no network call

Skills

The repo also ships Agent Skills (the open SKILL.md standard) under skills/ — task-oriented guides that teach an agent how to drive the tools above. They mirror the five workflow prompts and are discoverable on the LobeHub Skills Marketplace and other SKILL.md directories. The capability stays in the MCP server; the skills just sequence and explain the tools.

Skill

Mirrors prompt

What it does

gigwa-import-and-qc

import_and_qc

import DArTseq/VCF, then the full QC + audit and a clean/not-clean judgement

gigwa-diversity-report

diversity_report

diversity + structure + relatedness (PCA, structure, kinship, tree; optional by-group/Fst)

gigwa-qc-triage

qc_triage

full QC suite on an imported run → go/no-go verdict

gigwa-explore-instance

explore_instance

no-arg instance survey + health check

gigwa-region-scan

region_scan

variant density + local diversity within one region

See skills/README.md for the layout, prerequisites, and how to validate or install them.

Usage scenarios

A. Import a DArTseq report, genome-anchored. Map the tag sequences once, inspect, then import reusing the positions:

"Where do these DArT markers sit on the X genome at reference.sr.mmi?" → map_dartseq_to_reference "Looks good, import report_snps.xlsx into MYDB reusing that mapping." → import_dartseq(..., positions_csv=...)

B. Vet an instance you inherited. Before trusting any analysis, triage every run for encoding artifacts:

"Scan my whole Gigwa for databases that were imported badly." → audit_import_quality Runs are ranked BROKEN / SUSPECT / OK with reasons, and the full table lands in import_quality_scan.csv.

C. Genebank cleaning. Classic data-cleaning sweep on one run:

"Check call rates, flag heterozygosity outliers, and find duplicate accessions in MYDB§1§run1." → qc_call_rateqc_heterozygosityqc_duplicate_accessions.

D. Diversity & structure study.

"Give me a diversity summary, a PCA, the number of clusters, and a UPGMA tree for MYDB§1§run1." → diversity_summarydiversity_pcadiversity_structurediversity_tree.

E. Build a core collection.

"Pick a core of ~10% of accessions that captures the most allelic diversity." → diversity_core_collection(fraction=0.1).

F. Population comparisons from metadata. Provide a metadata TSV with a grouping column (e.g. country, population):

"Using meta.tsv grouped by population, compare per-group diversity and compute pairwise Fst." → diversity_by_group(metadata_tsv="meta.tsv", group_column="population")diversity_fst(...).

Output files

Each analysis writes one or more CSVs (Newick for the tree) under ./gigwa_results/<module>/ (the audit writes to ./gigwa_results/):

File

Written by

Contents

call_rate_samples.csv / call_rate_markers.csv

qc_call_rate

per-sample / per-marker call rate + flags

heterozygosity_samples.csv

qc_heterozygosity

per-sample Ho, z-score, flag

duplicate_pairs.csv / duplicate_groups.csv

qc_duplicate_accessions

IBS pairs ≥ threshold, grouped

marker_filter_stats.csv

qc_maf_filter

per-marker MAF, missingness, would-remove flags

diversity_markers.csv

diversity_summary

per-marker MAF, He, Ho, PIC

pca_coords.csv

diversity_pca

per-sample PC coords (+ optional group, outlier)

kinship_matrix.csv

diversity_kinship

samples × samples GRM

fst_pairwise.csv

diversity_fst

Fst for every group pair

diversity_by_group.csv

diversity_by_group

per-group He/Ho/Fis/MAF/%poly/allelic richness

core_collection.csv

diversity_core_collection

rank, accession, cumulative allele coverage

structure_clusters.csv

diversity_structure

per-sample cluster + PC coords

tree.nwk

diversity_tree

UPGMA tree (Newick)

import_quality_scan.csv

audit_import_quality

one row per run: status + diagnostics + reasons

variant_search.csv

search_variants

matching variants (id, chrom, pos, ref, alt)

germplasm_metadata.csv

get_germplasm_metadata

server-stored per-individual attributes; join on sample_name

sample_metadata.csv

search_callsets

per-sample (callset) attributes

dartseq_positions.csv

map_dartseq_to_reference

per-marker chrom/pos/strand/mapq/status

Visualizing results

The tools output tables, not images, which keeps them composable. The figures below were produced from a synthetic dataset by docs/make_example_figures.py (run pip install -e ".[viz]" && python docs/make_example_figures.py to regenerate). The same recipes work on the real CSVs the tools write.

PCA: pca_coords.csv

PCA

import pandas as pd, matplotlib.pyplot as plt
df = pd.read_csv("gigwa_results/MYDB/pca_coords.csv")
groups = df["group"] if "group" in df else pd.Series("all", index=df.index)
for g, sub in df.groupby(groups):
    plt.scatter(sub.PC1, sub.PC2, s=20, label=g)
plt.xlabel("PC1"); plt.ylabel("PC2"); plt.legend(); plt.savefig("pca.png")

Population structure: structure_clusters.csv

Structure

df = pd.read_csv("gigwa_results/MYDB/structure_clusters.csv")
plt.scatter(df.PC1, df.PC2, c=df.cluster, cmap="tab10", s=20)
plt.xlabel("PC1"); plt.ylabel("PC2"); plt.title("K-means clusters"); plt.savefig("structure.png")

Kinship: kinship_matrix.csv

Kinship

g = pd.read_csv("gigwa_results/MYDB/kinship_matrix.csv", index_col=0)
plt.imshow(g.values, cmap="viridis"); plt.colorbar(label="relatedness"); plt.savefig("kinship.png")

Per-group diversity: diversity_by_group.csv

Per-group diversity

d = pd.read_csv("gigwa_results/MYDB/diversity_by_group.csv").set_index("group")
d[["he", "ho", "allelic_richness"]].plot.bar(); plt.tight_layout(); plt.savefig("by_group.png")

Core-collection coverage: core_collection.csv

Core collection

c = pd.read_csv("gigwa_results/MYDB/core_collection.csv")
plt.plot(c["rank"], c["coverage_fraction"] * 100)
plt.xlabel("core size"); plt.ylabel("% alleles captured"); plt.savefig("core.png")

UPGMA tree: tree.nwk

UPGMA tree

tree.nwk is standard Newick; open it directly in FigTree or iTOL, or render in Python:

from Bio import Phylo            # pip install biopython
Phylo.draw(Phylo.read("gigwa_results/MYDB/tree.nwk", "newick"))

Performance & scaling

  • Small/medium runs: the default method="vcf" exports once and caches; running several tools on the same run reuses the cached genotypes.

  • Large runs (hundreds of thousands of markers): pass method="allelematrix" with a max_markers cap (e.g. 2000-20000) so genotypes are sampled server-side instead of exporting a multi-GB VCF. Statistics are estimated from the sample.

  • Many samples (thousands): the server caps each allelematrix response at ~10,000 cells, so at N samples a response holds ~10000/N markers, i.e. requests scale with max_markers. Keep max_markers modest on high-sample-count sets.

  • O(samples²) tools: diversity_kinship, qc_duplicate_accessions, and diversity_tree build a samples × samples matrix (and the kinship CSV is written in full). Subsample markers and expect large output / slower runs beyond a few thousand accessions.

  • The audit_import_quality tool is bounded by max_markers × max_samples per run, so it is cheap and roughly constant-cost even across a whole production instance.

Limitations & disadvantages

  • Read-only analysis. QC/diversity/audit never write results back to Gigwa; you get CSVs locally. (Import tools do write to Gigwa.)

  • No built-in plotting. Tools emit CSV/Newick; use the recipes above (matplotlib/Bio.Phylo) to make figures.

  • diversity_structure is a lightweight heuristic. It is PCA + K-means with a pseudo-F (Calinski-Harabasz) K suggestion; there is no true admixture model. On weakly or continuously structured data pseudo-F tends toward k_max; the per-K table is the real output and the tool warns when clustering is degenerate. For formal ancestry use a dedicated tool (ADMIXTURE / sNMF) on an exported VCF.

  • Diploid-biallelic assumptions in places (IBS dosage 0/1/2, collapsed-token decode).

  • Grouping uses a metadata TSV, not server attributes. Some Gigwa builds do not expose BrAPI germplasm/sample/attribute endpoints, so diversity_fst / diversity_by_group take groups from groups_json or a metadata TSV rather than querying Gigwa.

  • VCF export downloads the whole variant set regardless of max_markers; use method="allelematrix" to subsample large sets.

  • Genome anchoring needs minimap2 + a reference, and streaming very large indexes is I/O-bound.

  • Single interactive session — one operation at a time. This is a per-user stdio server, not a concurrent/multi-user service. It drives Gigwa through one shared HTTP client, auth token and in-process genotype cache, which are not designed for parallel tool calls; long tools do run in a worker thread (so the connection stays responsive and streams progress), but heavy compute is still GIL-bound and effectively serialized — runs are meant to happen sequentially, and large matrices are held in RAM.

Troubleshooting

  • Auth / "Missing required environment variable(s)". Ensure GIGWA_URL, GIGWA_USER, GIGWA_PASS are set (env or .env). GIGWA_URL must omit the /rest suffix.

  • VCF import rejected / "not bgzipped". Gigwa needs BGZF, not plain gzip. Recompress: gunzip -c f.vcf.gz | bgzip > f.bgz.vcf.gz (htslib bgzip).

  • Implausible ~95% heterozygosity after a DArT import. That is Gigwa's built-in DArT parser mis-calling the 2-row format. Use import_dartseq (it calls genotypes in Python and imports a standard VCF) instead of importing the raw DArT report (see below).

  • diversity_fst / diversity_by_group report "no groups matched". Check that id_column values in your TSV match the accession names (or callset ids) in the run.

  • Large set feels slow. Use method="allelematrix" + a smaller max_markers, and avoid the O(samples²) tools on many thousands of accessions.

DArTseq notes

DArTseq SNP reports use the classic 2-rows-per-marker layout (a reference-allele row and a SNP-allele row, each cell 1/0/-); Silico-DArT reports are 1 row per clone (dominant presence/absence). import_dartseq does the genotype calling in Python and emits a standard VCF, imported through Gigwa's verified VCF path:

(ref=1, alt=0) -> 0/0   (ref=0, alt=1) -> 1/1
(ref=1, alt=1) -> 0/1   otherwise      -> ./.   (missing / no allele detected)

This deliberately bypasses Gigwa's built-in DArT parser, which might mis-call the 2-row format (there are cases that it imports reference homozygotes as heterozygous, producing implausible ~95% heterozygosity). SNP and Silico use different allele models; import them as separate runs unless you specifically intend to combine them.

Genomic positions (optional)

DArTseq markers have no genomic coordinates, so by default they are placed on a single Unmapped contig at sequential positions. If you have a reference genome FASTA, the marker tag sequences (AlleleSequence, ~69 bp) can be aligned to it with minimap2 to infer real chromosome/position/strand:

  • map_dartseq_to_reference(snp_xlsx, reference_fasta) → a dartseq_positions.csv report (uniquely mapped / multi / unmapped), for inspection.

  • import_dartseq(..., reference_fasta=...) → imports uniquely-mapped markers genome-anchored (minus-strand alleles complemented, output coordinate-sorted, one marker per genomic site); unmapped markers stay on Unmapped.

  • import_dartseq(..., positions_csv=...) → reuse a dartseq_positions.csv from a previous run instead of re-aligning. Recommended for large genomes: align once, inspect, then import without paying the alignment cost again.

reference_fasta may be a FASTA (.fa/.fa.gz) or a prebuilt minimap2 .mmi index. By default the minimap2 CLI backend is used when available: it streams over multi-part indexes with bounded RAM, so very large (multi-gigabase) genomes work on modest machines. The in-process mappy backend (backend="mappy") loads the whole index into RAM instead.

Prebuild an index once (tuned for the ~69 bp tags) and reuse it:

minimap2 -x sr -d reference.sr.mmi reference.fasta   # build once
# then pass reference.sr.mmi as reference_fasta

Project layout

gigwa_mcp/
  __main__.py           # python -m gigwa_mcp → stdio server
  config.py             # .env / env loading (GIGWA_URL/USER/PASS/TIMEOUT)
  client.py             # GigwaClient: auth, multipart upload, progress, BrAPI calls
  exports.py            # selection export options, response handling, safe downloads
  identifiers.py        # individual/sample/callset identifier resolution
  server.py             # FastMCP instance + get_client()
  importers/
    dartseq.py          # DArTseq xlsx → standard VCF (2-row genotype calling)
    refmap.py           # minimap2 tag → reference mapping
  analysis/
    genotypes.py        # load_genotypes (VCF / allelematrix backends), GenotypeMatrix
    stats.py            # pure pop-gen stats (MAF, He, PIC, IBS, GRM, allelic richness …)
    genebank.py         # core-collection + UPGMA helpers
    results.py          # output-dir resolution + CSV writing
  tools/                # @mcp.tool() wrappers: connection, genotype, metadata, qc,
                        #   diversity, audit
scripts/                # run_import_audit.py, run_qc_diversity_validation.py (generic)
docs/                   # make_example_figures.py + img/ (README figures)
skills/                 # Agent Skills (SKILL.md) mirroring the 5 prompts (for LobeHub etc.)
tests/                  # pytest suite (mocked client + synthetic fixtures)

Testing

pip install -e ".[dev]"
pytest

test_client.py covers auth/token-refresh, multipart assembly and progress polling with a mocked transport; test_dartseq_convert.py checks the conversion against synthetic SNP/Silico fixtures; test_stats.py / test_genebank.py verify the pop-gen and genebank statistics against hand-computed values; test_genotypes.py exercises VCF parsing + callset-name mapping with a mock client. The suite needs no live Gigwa server.

Changelog

v1.9.1 — export and container reliability

  • Selection exports now accept both Gigwa response styles: a queued download URL or an immediately returned binary file. Immediate files are written atomically and do not need progress polling or fetch_export_file.

  • Docker once again defaults to clean stdio transport; entrypoint diagnostics go to stderr. HTTP mode requires an explicit GIGWA_MCP_PORT.

  • Capped VCF and allele-matrix analyses now both use the first N markers in canonical Gigwa search order, making their sampled markers directly comparable.

  • Individual/sample resolution preserves hyphenated accession names, and grouping reports identifiers it could not match.

v1.9.0 — MCP SDK v2, selection-aware export & metadata endpoints

  • Migrated to the MCP Python SDK v2 (mcp>=2.1,<3). v1.x is upstream maintenance mode, security fixes only, and v2 carries a newer protocol revision. FastMCP becomes MCPServer; the transport configuration (json_response, streamable_http_path, transport_security) moved from mutable settings to streamable_http_app() parameters; and the server version is now a constructor argument, retiring the private _mcp_server.version write. Tools, prompts and resources are unchanged — the registration decorators are identical in v2. Verified with a scripted initialize/tools/list handshake over both stdio and HTTP.

  • Selection-aware export (contributed by @GuilhemSempere, PR #2). export_genotypes gains region / variant-type / MAF / missing-data filters, individuals and metadata_fields selection, and keep_on_server; wait=False returns immediately with a download URL, pollable via the new get_export_progress and retrievable with fetch_export_file. list_export_formats reports what the instance's export-handler registry actually offers, including each format's variant-type/ploidy restrictions.

  • Native individual-metadata endpoints (same PR). list_metadata_values and filter_individuals_by_metadata use the endpoints behind the Gigwa web UI's own attribute filters, and get_germplasm now tries them before BrAPI — so per-individual attributes are found on builds where BrAPI search/germplasm returns records with no additionalInfo at all.

  • germplasm_metadata.csv gained a sample_name column — join on it. Gigwa's individual id (germplasm_name) is not the name the analysis tools give a sample: on a 13,678-sample ICARDA database none of them agree, yet 10,090 collide numerically with a different individual, so joining on germplasm_name silently mis-grouped the majority of samples. sample_name bridges the two id spaces and resolves 13,678/13,678 there.

  • Removed the callset fallback from get_germplasm_metadata. With the native endpoint tried first it no longer fires; when the germplasm level really is empty the tool now says so and points at search_callsets for sample-level attributes.

  • Hardened export downloads. fetch_export_file takes a caller-supplied URL and the request carries the session's bearer token, so an absolute URL must now match the configured Gigwa origin; anything else is rejected before a request is made.

  • Declared starlette and uvicorn explicitly — the HTTP transport imports both directly rather than relying on them arriving through mcp.

v1.8.0 — callset-level metadata & richer connection info

  • New search_callsets tool. Dumps a run's per-sample (callset) metadata — the resolved sample_name, the server's raw callSetName, sampleDbId, callSetDbId, and every key found across the callsets' additionalInfo — to sample_metadata.csv. This is the sample-level counterpart to get_germplasm_metadata.

  • get_germplasm_metadata falls back to the callset level. Some instances store passport data on the samples rather than on BrAPI germplasm records, where the tool previously reported "no metadata available" despite every sample carrying a full record (observed on the ICARDA durum-wheat database). It now falls back to the callset level and still writes germplasm_metadata.csv, reporting an empty result only when neither level exposes any attribute.

  • Fallback output joins to the analysis tools. germplasm_name holds the resolved sample name (the same rule GenotypeMatrix.sample_names uses) and germplasm_db_id the callSetDbId (sample_names' fallback key), so either column groups samples in diversity_fst / diversity_by_group without manual renaming. Note metadata_tsv expects tab-separated input — convert the CSV first.

  • Pinned the MCP SDK to the 1.x line (mcp>=1.27,<2). The previous mcp>=1.27 began resolving to mcp 2.x on 2026-07-28, which renamed FastMCP to MCPServer and removed mcp.server.fastmcp — so a fresh pip install gigwa-mcp (and any Docker image rebuild) failed on import. The cap restores installability. Note the 1.x line is in maintenance mode upstream and receives security fixes only; migrating to the v2 SDK is tracked separately.

  • gigwa_server_info reports account permissions. When the build's userInfo supplies them, the connection summary now also lists the server-side identity, email, and the databases the account may write to / manage / administer. Builds returning an empty userInfo are unaffected — every line is guarded.

v1.7.0 — HTTP transport

  • Streamable HTTP transport. The server can now run over HTTP in addition to stdio: python -m gigwa_mcp --port 8184 serves the MCP StreamableHTTP endpoint at /mcp (stdio stays the default; --stdio is explicit). Adds Docker/entrypoint wiring, DNS-rebinding / allowed-host protection configurable via GIGWA_MCP_ALLOWED_HOSTS / GIGWA_MCP_ALLOWED_ORIGINS / GIGWA_MCP_DISABLE_DNS_REBINDING_PROTECTION, JSON responses for clients that only advertise application/json, and tolerance for malformed notifications/initialized POSTs. HTTP mode binds loopback (127.0.0.1) by default; set GIGWA_MCP_HOST=0.0.0.0 to accept remote connections (the Docker image sets it). Contributed by @guignonv (PR #1).

v1.6.0 — runtime server switch

  • Switch servers mid-conversation. A new gigwa_connect(url, profile?, anonymous?) tool re-points every subsequent tool at a different Gigwa instance without restarting the server. The switch is verified with a live round-trip before it takes effect (a failure rolls back to the previous connection) and lasts for the session. Credentials never pass through the chat: they are resolved from the environment — the default GIGWA_USER/ GIGWA_PASS, or a named profile's GIGWA_USER_<PROFILE>/GIGWA_PASS_<PROFILE> — or omitted with anonymous=true. See Configuration.

v1.5.0 — Agent Skills

  • Agent Skills. A new skills/ folder ships five Agent Skills (the open SKILL.md standard) mirroring the five workflow prompts — gigwa-import-and-qc, gigwa-diversity-report, gigwa-qc-triage, gigwa-explore-instance, gigwa-region-scan — discoverable on the LobeHub Skills Marketplace and other SKILL.md directories. Skills.

v1.4.16 — anonymous access & fast-fail timeouts

  • Anonymous access. GIGWA_USER/GIGWA_PASS are now optional — omit both to connect as Gigwa's anonymous user and run the public/read-only operations an instance exposes (list_content, list_variant_sets, search_callsets, count_variants, read-only analyses). Verified against the public gigwa.icarda.org demo. Setting only one of the two is now an error.

  • Fast-fail, configurable connection timeout. An unreachable/misconfigured Gigwa now errors in seconds instead of hanging for the full request timeout: the TCP-connect phase is capped separately (default 10 s, override with GIGWA_CONNECT_TIMEOUT), while read/import/export timeouts are unchanged.

  • serverInfo version. The server now reports the gigwa-mcp package version (it previously surfaced the MCP SDK version).

v1.3.4 — tool catalog, EDAM annotations & progress reporting

  • Tool catalog in server.py: a central TOOL_CATALOG annotates all 28 tools with a category and EDAM ontology terms (operation + topic). These ride along as each tool's _meta in tools/list, and are published as a catalog://tools MCP resource — improving discovery/indexing (e.g. by directories such as glama.ai). A test asserts every tool has a catalog entry so the two can't drift.

  • Progress reporting for long-running tools: imports, exports, map_dartseq_to_reference, and every genotype-load-based QC/diversity tool now stream notifications/progress to the client (live import %, "Exporting VCF…", "Fetching genotypes… page k/N", "Parsing…"). Implemented with a @progress_tool decorator + a small progress.notify() bridge, so tool bodies stay synchronous and no Context is threaded through the call stack.

  • Prompts & resources. Five workflow prompts (import_and_qc, diversity_report, qc_triage, explore_instance, region_scan) and resources (catalog://tools, gigwa://server/info) — so the server advertises the full set of MCP capabilities (tools + prompts + resources). See Prompts & resources.

v1.2.0 — server-side search, filtered analysis & export

Adds 7 tools (21 → 28) that surface more of the Gigwa REST API, plus a genomic-region filter on every analysis tool. Live-verified against Gigwa 2.12-RELEASE and 2.13-beta2.

  • Server-side variant search (no full download): count_variants and search_variants filter by genomic region, MAF range, and missing-data fraction via Gigwa's GA4GH variants/search; search_variants writes variant_search.csv.

  • Region-restricted analysis: every QC & diversity tool now accepts region ("chrom" or "chrom:start-end", 1-based) to run on a single genomic window.

  • Discovery & export: list_variant_sets (exact variantSetDbIds), list_sequences (chromosomes/contigs), and export_genotypes (VCF/PLINK/Flapjack; formats vary by build).

  • Robustness: abort_import (cancel a running process), get_germplasm_metadata (pull server-stored per-individual attributes → germplasm_metadata.csv), and gigwa_server_info now reports the server-side user roles when available.

v1.1.0 — Docker support

  • Dockerfile (multi-stage) and .dockerignore to build and run the server as a container launched by an MCP client via docker run -i. See Run with Docker.

v1.0.0 — initial release

  • 21 tools: connection/inventory, DArTseq/VCF import (with optional reference anchoring) and metadata import, read-only QC and diversity/population-structure analyses, and the import-quality audit.

License & contributing

Released under the Apache License 2.0 © 2026 Anestis Gkanogiannis anestis@gkanogiannis.com (see also NOTICE).

Issues and pull requests are welcome. Please run pytest before submitting, keep new analysis logic in pure, unit-tested helpers under gigwa_mcp/analysis/, and avoid committing data, credentials, or result files (these are gitignored).

Available Tools

35 tools
abort_importA

Abort a running import (or other long process), given its progress token.

Asks Gigwa to cancel the process identified by progress_token (the token returned by import_dartseq / import_vcf when run with wait=False). Returns whether the abort request was accepted; poll get_import_progress afterwards to confirm it stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
progress_tokenYesProgress token returned by an import (import::<user>::<uuid>).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: it asks Gigwa to cancel the process, returns whether the request was accepted, and recommends confirmation via polling. This adequately covers the tool's actions and limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the main purpose, then providing necessary details about usage and follow-up. Every sentence is informative and concise with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a single parameter, no annotations, and an output schema (implied), the description sufficiently covers the return value and next steps. It is complete for a straightforward cancellation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with a description of the progress_token format. The description adds crucial context about the token's origin (from imports with wait=False) and its purpose, enriching the parameter's meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Abort a running import (or other long process)' with the specific input 'progress token'. It distinguishes from sibling tools like import_dartseq, import_vcf, and get_import_progress by focusing on cancellation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to cancel a running import) and how to obtain the progress token (by setting wait=False on import calls). It also advises polling get_import_progress to confirm cancellation, providing clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_import_qualityA

Scan a Gigwa instance for databases imported with genotype-encoding artifacts.

With no variant_set_db_id this audits every run on the instance; pass one to audit a single variant set. For each run it pulls a bounded genotype sample (up to max_markers markers × max_samples callsets) via paged BrAPI search/allelematrix — cheap and constant-cost regardless of how large the variant set is, so it is safe to run across a whole production instance without exporting multi-GB VCFs. The aggregate genotype-class fractions it needs are estimated tightly from the sample (a true zero hom-alt class stays zero; a rare-but-real one shows up). It flags two import failure modes plus two weaker signals:

  • BROKEN — cohort mean Ho above het_threshold (DArT 2-row mis-call), or homozygous-alt genotypes far below their HWE expectation given the alt-allele frequency (lost hom-alt class; the HWE test avoids false positives on low-MAF / mostly-monomorphic panels where near-zero hom-alt is genuine).

  • SUSPECT — call rate above complete_call_rate (no missing data, often missing forced to 0/0), monomorphic fraction above monomorphic_threshold, or AD/DP depth fields present but uniformly zero (a VCF synthesised from genotype calls with fabricated depth/likelihoods — the same converter often miscalls GT too).

Writes import_quality_scan.csv (one row per run) under output_dir (default ./gigwa_results/) and returns a summary ranked worst-first. Read-only — it never modifies Gigwa.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
max_samplesNoCap the number of samples/callsets sampled (allelematrix path).
het_thresholdNoMean observed-heterozygosity above which a run is flagged BROKEN (mis-called heterozygotes).
variant_set_db_idNoBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.
complete_call_rateNoCall-rate above which a run is flagged as suspiciously complete (no missing data).
monomorphic_thresholdNoMonomorphic-marker fraction above which a run is flagged for low informativeness.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and meets it: it explicitly states the tool is read-only and never modifies Gigwa, writes one CSV row per run under output_dir, returns a worst-first ranked summary, and explains the sampling/pagination behavior. It also discloses that thresholds reflect diagnostic logic rather than arbitrary cutoffs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely informative and well-structured, with a clear front-loaded purpose, bulleted flag categories, and explicit side effects. Some details are repeated in the schema, but most sentences add decision-relevant context, so the length is earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers purpose, scope, cost behavior, diagnostic criteria, output location, return summary, and read-only safety. The output schema likely covers return structure, and parameter descriptions cover edge cases like the variant_set_db_id warning, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real parameter meaning beyond the schema: it explains how variant_set_db_id scopes the audit, warns never to assemble it by hand because a wrong guess yields an opaque HTTP 500, and ties max_markers/max_samples to the bounded-cost sample. This extra context justifies a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Scan a Gigwa instance for databases imported with genotype-encoding artifacts.' It clearly distinguishes itself from sibling QC tools by focusing on import failure modes and defining two signal levels, BROKEN and SUSPECT, so an agent can tell it apart from tools like qc_call_rate or diversity_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit scoping guidance: with no variant_set_db_id it audits every run on the instance, and passing one audits a single variant set. It also explains when it is safe to use across a production instance because sampling is bounded and constant-cost, making the usage context concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

count_variantsA

Count variants matching filters, computed server-side (nothing is downloaded).

Fast way to size a query before pulling data. Filter by genomic region (reference_name + optional start/end, from list_sequences), minor- allele frequency (min_maf/max_maf) and/or max_missing_data (0–1 fraction). With no filters this returns the total variant count of the set. variant_set_db_id is a BrAPI variantSetDbId (from list_variant_sets / list_content).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoRegion end position, 1-based inclusive.
startNoRegion start position, 1-based inclusive.
max_mafNoMaximum minor-allele frequency (0-1).
min_mafNoMinimum minor-allele frequency (0-1).
reference_nameNoChromosome/contig name to restrict the search to (see list_sequences).
max_missing_dataNoMaximum per-variant missing-data fraction (0-1).
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that counting is server-side, that nothing is downloaded, and that omitting filters returns the total variant count. This gives agents an accurate model of the operation's behavior and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, front-loading the core purpose and then grouping related filter parameters. Each sentence contributes useful information, though some parameter details overlap with the schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and a 100% schema-covered input, the description provides all the contextual information an agent needs: what the tool does, when to use it, how filters compose, and where identifier values come from. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaningful context beyond the schema: it states that reference_name, start, and end come from list_sequences, that variant_set_db_id is a BrAPI variantSetDbId from list_variant_sets/list_content, and that no filters yields the total count. This helps agents correctly map parameters to domain sources.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb plus resource ('Count variants matching filters') and clearly states what makes it distinct: it is computed server-side and nothing is downloaded. This makes it easy to differentiate from siblings like search_variants or export_genotypes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames this as 'a fast way to size a query before pulling data,' which gives clear guidance on when to use it. It does not name specific sibling alternatives that should be used instead, but the use case is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_by_groupA

Per-population diversity: He, Ho, Fis, MAF, % polymorphic, allelic richness.

Define groups the same way as diversity_fst — either groups_json {group: [names]} or metadata_tsv + group_column. For each group computes n, % polymorphic markers, mean MAF, Nei's He, observed Ho, Fis (1−Ho/He), mean observed allelic richness, and rarefied allelic richness (rarefied to the smallest group's gene-copy count so unequal group sizes are comparable). Writes diversity_by_group.csv.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
id_columnNoColumn in the metadata TSV holding the individual/accession id (default 'individual').individual
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
groups_jsonNoJSON object mapping each group name to a list of accession names/ids.
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
group_columnNoColumn in the metadata TSV holding the group/population label.
metadata_tsvNoPath to a metadata TSV (import_metadata format) used to define groups.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It discloses the exact computed metrics, the rarefaction adjustment based on the smallest group, the two valid group-definition mechanisms, and the output file name. It does not mention computational cost or failure modes, but for a non-destructive analysis tool this is a reasonably complete behavioral picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the tool's purpose, followed by grouping instructions, the detailed metric list, and the output artifact. Every sentence contributes information, with no filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nine parameters, the description plus full schema coverage provides enough to use it correctly: required variant set ID is documented in the schema, grouping options are explained, and output is named. It does not explicitly describe what happens when no group definition is supplied, but this is a minor edge case and the output schema likely fills remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful cross-parameter semantics by explaining that groups_json and metadata_tsv + group_column are alternate ways to define groups, and it clarifies the rarefaction behavior tied to group sizes. This goes beyond what the individual parameter descriptions state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific summary—'Per-population diversity: He, Ho, Fis, MAF, % polymorphic, allelic richness'—which clearly identifies the tool's resource and outputs. It does not explicitly contrast this tool with close siblings like diversity_fst, though it references diversity_fst for grouping, so the differentiation is left somewhat implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: whenever per-population diversity statistics are needed. It explains how to define groups and points to diversity_fst as a behavioral reference, but it does not state when to choose diversity_by_group over alternatives such as diversity_summary or diversity_fst, nor does it give explicit when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_core_collectionA

Select a core collection that maximises captured allelic diversity.

Greedy allele-coverage selection (Core-Hunter style): repeatedly add the accession that contributes the most not-yet-captured marker-alleles. Pick the core size directly, or as fraction of all accessions (default 10%). Writes core_collection.csv (rank, accession, cumulative allele coverage) and reports the fraction of total allelic diversity the core captures.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoExplicit core-collection size (number of accessions); overrides fraction.
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
fractionNoCore-collection size as a fraction of all accessions (default 0.1).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the greedy algorithm, that it writes core_collection.csv with specific columns, and that it reports captured allelic diversity. It doesn't discuss overwrite behavior or computational cost, but the main behavioral contract is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no filler: purpose, algorithm, selection modes, and output are all front-loaded. Every sentence earns its place and the structure is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a computational analysis tool with a rich 7-parameter schema and an output schema available, the description covers the key context: goal, method, selection modes, and output artifact. It does not walk through method/region/max_markers, but those are fully documented in the schema, so the description does not need to repeat them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the relationship between size and fraction and noting the default 10% fraction, which reinforces the schema's default and clarifies the intended usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Select a core collection that maximises captured allelic diversity') and goes on to name the greedy allele-coverage algorithm, which clearly sets it apart from sibling diversity_* tools that perform PCA, kinship, FST, etc. It also specifies the two selection modes (size vs fraction), leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is appropriate (whenever a core collection maximizing allelic diversity is needed) but does not explicitly state when to prefer it over alternatives or when not to use it. It gives no exclusions or comparison with the many other diversity_* siblings, so the usage context is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_fstA

Pairwise Weir & Cockerham Fst between groups of samples.

Define the groups one of two ways:

  • groups_json — a JSON object mapping each group name to a list of accession names (or callset ids), e.g. {"north": ["112","156"], "south": ["11","42"]}.

  • metadata_tsv + group_column — read groups from a metadata TSV (the same file format used by import_metadata), keyed on id_column (default individual) and grouped by group_column.

Writes fst_pairwise.csv with the Fst for every group pair. (Server-side BrAPI attributes are not used for grouping — that endpoint is unavailable on the target Gigwa 2.12 build.)

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
id_columnNoColumn in the metadata TSV holding the individual/accession id (default 'individual').individual
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
groups_jsonNoJSON object mapping each group name to a list of accession names/ids.
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
group_columnNoColumn in the metadata TSV holding the group/population label.
metadata_tsvNoPath to a metadata TSV (import_metadata format) used to define groups.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool writes fst_pairwise.csv, explains that server-side BrAPI attributes are intentionally not used because the endpoint is unavailable on the target Gigwa build, and mentions caching behavior in the method parameter. These are meaningful behavioral details beyond the tool name, though it could also explicitly state whether any persistent state is modified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well organized, front-loaded with the core purpose, and uses a compact bullet-like structure for the two group-definition paths. Every sentence contributes either to usage guidance, an example, or a behavioral caveat; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no annotations, the description covers the essential setup, outputs, grouping options, and a known server limitation. It also warns about the most likely mistake, misassembling variant_set_db_id, and points to sibling tools for metadata format. The presence of an output schema means the description need not enumerate return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already covers 100% of parameters, the description adds substantial semantic value: it explains how groups_json and metadata_tsv interact, gives a working JSON example, clarifies the relationship between id_column and group_column, and provides a vivid warning about the variant_set_db_id format. This goes well beyond the raw schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific, informative phrase — 'Pairwise Weir & Cockerham Fst between groups of samples' — naming both the statistical method and the resource it operates on. It clarifies the grouping input formats, which distinguishes this from other diversity_* siblings by defining its exact analytical scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance on the two acceptable ways to define groups, includes a JSON example, and references the metadata format used by import_metadata as a sibling touchpoint. It does not explicitly list when to choose this tool over diversity_by_group or diversity_summary, but it provides clear context for invoking it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_kinshipA

VanRaden genomic relationship (kinship) matrix.

Computes G = ZZ'/(2 Σp(1-p)) from alt dosage. Writes the full matrix as kinship_matrix.csv (samples × samples) and reports the most-related pairs and the diagonal (self-relationship / inbreeding) range. For large sets pass method="allelematrix" + max_markers to avoid a full VCF export.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
top_pairsNoHow many most-related sample pairs to report.
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does a solid job: it discloses the mathematical formula, the side effect of writing 'kinship_matrix.csv', the reported values (most-related pairs and diagonal range), and the large-set performance strategy. It does not mention deeper caveats like memory usage, file overwrite behavior, or failure modes, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: definition, formula, outputs, then an important performance note. Every sentence contributes new information, and the most essential identity of the tool is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior, outputs, and a key performance consideration, and an output schema apparently exists to handle return-value details. It is slightly incomplete because it lacks explicit guidance about when to choose kinship analysis over related diversity/QC modules, but for invoking the tool with correct parameters it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all parameters at 100% coverage, so the baseline is 3. The description adds real value beyond the schema by explaining why 'method' and 'max_markers' matter together ('avoid a full VCF export') and by framing the input as 'alt dosage', which helps parameter interpretation. This raises the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource ('VanRaden genomic relationship (kinship) matrix'), states the computation ('Computes G = ZZ'/(2 Σp(1-p)) from alt dosage'), and specifies concrete outputs. It is specific enough to distinguish from most siblings, but it does not explicitly differentiate itself from closely related diversity_* or QC tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical configuration guidance ('For large sets pass method="allelematrix" + max_markers to avoid a full VCF export'), but it never states when a user should choose this tool over siblings like diversity_pca, diversity_fst, or qc_duplicate_accessions. Usage context is implied by the kinship focus rather than made explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_pcaA

Principal component analysis of population structure.

Runs PCA on the alt-allele dosage matrix (monomorphic markers dropped, missing mean-imputed, Patterson scaling). Writes pca_coords.csv (per-sample PC coordinates) and reports variance explained plus any PC1/PC2 outlier samples (beyond outlier_sd SD). Pass metadata_tsv + group_column to add a group column (population label per sample) for colouring the PC plot. For large sets pass method="allelematrix" + max_markers to avoid a full VCF export.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
id_columnNoColumn in the metadata TSV holding the individual/accession id (default 'individual').individual
outlier_sdNoFlag points more than this many standard deviations from the mean.
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
group_columnNoColumn in the metadata TSV holding the group/population label.
metadata_tsvNoPath to a metadata TSV (import_metadata format) used to define groups.
n_componentsNoNumber of principal components to compute.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burdens. It discloses preprocessing decisions (monomorphic markers dropped, missing mean-impured, Patterson scaling), output artifacts (pca_coords.csv, variance explained, outlier flags), and the trade-off between VCF export and allelematrix streaming. This is unusually transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences: purpose, algorithm and outputs, optional grouping, and large-set guidance. Every sentence earns its place and there is no restatement of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters and no annotations, the description covers the core algorithm, outputs, optional metadata integration, and scale guidance. The rest of parameter meaning is fully supplied by the 100%-coverage input schema, and return values are covered by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds coupling semantics: metadata_tsv + group_column together produce a group column for plotting, and method='allelematrix' + max_markers together avoid full VCF export. It does not describe region, id_column, or output_dir, but the schema already documents those completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Principal component analysis of population structure' and immediately clarifies the mechanism: 'Runs PCA on the alt-allele dosage matrix'. This names a specific algorithm and resource, and the PCA framing distinguishes it from other diversity/structure tools like diversity_structure or diversity_kinship.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable conditional guidance: add metadata_tsv + group_column for group labelling/colouring, and use method='allelematrix' + max_markers for large sets to avoid full VCF export. No explicit when-not/alternative sibling routing is provided, but the practical usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_structureA

Lightweight population-structure clustering (PCA + K-means, in-Python).

Reduces the alt-dosage matrix with PCA (Patterson scaling), then runs K-means for K in k_min..k_max and picks the K with the highest pseudo-F (Calinski-Harabasz) between/within variance ratio — a clear maximum when groups are well separated. Writes structure_clusters.csv (sample, assigned cluster at the best K, PC coords) and reports the chosen K with cluster sizes. (No external ADMIXTURE binary — computed entirely in Python, consistent with the rest of the analysis layer.)

ParametersJSON Schema
NameRequiredDescriptionDefault
k_maxNoLargest number of clusters (K) to evaluate.
k_minNoSmallest number of clusters (K) to evaluate.
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does so well: it explains the PCA + K-means pipeline, how K is chosen, and what output file is written. It does not mention failure modes or resource costs, but the main observable behavior is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description opens with a compact one-line summary, then provides a focused paragraph of algorithm and output details. The parenthetical about being 'consistent with the rest of the analysis layer' is mildly extraneous, but overall the structure is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, the presence of an output schema, and no annotations, the description supplies enough operational context to invoke the tool correctly: algorithm, output artifacts, and K-selection behavior. It omits error handling and parameter interactions, but these are minor gaps for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 7 parameters with 100% coverage, so the baseline is 3. The description adds useful algorithmic context around k_min/k_max and the clustering method, but it does not materially clarify parameter semantics beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: population-structure clustering via PCA + K-means on the alt-dosage matrix. It names the algorithm, output file, and K-selection criterion, making it clearly distinguishable from the broader diversity_* sibling family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Lightweight population-structure clustering' and 'in-Python' phrasing implies when this tool is appropriate, and the note about no external binary provides implementation context. However, it never explicitly contrasts this tool with sibling alternatives such as diversity_pca or diversity_kinship, leaving the agent to infer selection from the name and algorithm.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_summaryA

Per-marker diversity statistics (MAF, He, Ho, PIC) and dataset means.

He is Nei's gene diversity (1 - Σpᵢ²), Ho is observed heterozygosity, PIC is polymorphism information content. Writes diversity_markers.csv. For large sets pass method="allelematrix" + max_markers to sample server-side.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses the file side effect (diversity_markers.csv), defines the statistics being computed including He's formula, and explains server-side sampling for large sets. It does not discuss overwrite behavior or permissions, but for an analysis/write-CSV tool this is strong coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well front-loaded: purpose, metric definitions, output filename, and a performance tip. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 100% schema parameter coverage and the presence of an output schema, the description closes the remaining gaps: what the metrics mean, what file is produced, and how to handle large datasets. Nothing needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage the baseline is 3, but the description adds meaningful cross-parameter guidance: pairing method='allelematrix' with max_markers for large sets and linking output_dir to the named CSV output. It does not augment region, but the schema already documents that sufficiently.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the deliverable — per-marker MAF, He, Ho, and PIC statistics plus dataset means — and names the output file diversity_markers.csv. This is enough to distinguish it from siblings like diversity_pca or diversity_fst by output nature, though the core purpose is phrased as a noun phrase rather than an explicit verb such as 'computes'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete usage tip: for large sets, use method='allelematrix' with max_markers to sample server-side. However, it never states when to prefer this tool over the many related diversity_* and qc_* siblings, and it gives no exclusions or explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diversity_treeA

UPGMA dendrogram of accessions from IBS allele-sharing distance (Newick).

Builds a pairwise IBS similarity matrix, converts to distance (1 − IBS), and writes a UPGMA tree as tree.nwk (standard Newick, loadable in FigTree / iTOL / ape). Marker subsampling (max_markers) keeps it tractable on large sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses the full workflow: pairwise IBS similarity, conversion to distance, and writing tree.nwk. It also calls out the max_markers subsampling behavior, which is useful operational context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences, with the core purpose front-loaded. Every clause adds information: method, distance definition, output format, and scalability note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the algorithm, output file, and a key parameter trade-off, and an output schema exists so return value details are not required. It is complete enough for a compute-and-write tool, though it could have added a sentence about when to choose this over sibling diversity analyses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds a little context around max_markers ('keeps it tractable') and the Newick output, but does not substantially enrich the parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'UPGMA dendrogram of accessions from IBS allele-sharing distance (Newick)'. It clearly explains the method and output, distinguishing it from sibling diversity tools like diversity_pca or diversity_structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a hierarchical UPGMA tree of accessions is desired. However, it does not explicitly mention alternatives or conditions for choosing this over other diversity_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_genotypesA

Export a variant set — or a filtered/selected subset of it — to a file.

With none of the filter/selection parameters set, exports the whole set via Gigwa's plain per-format export (format one of VCF (default), PLINK or FLAPJACK; availability varies by build — check list_export_formats for what this instance actually offers, and each format's variant-type/ploidy restrictions).

Passing any of region, selected_variant_types, min_maf/max_maf, max_missing_data, individuals or metadata_fields instead drives Gigwa's selection-aware export — the same endpoint the Gigwa web UI uses for a filtered download — which additionally accepts any format the server advertises, including the bgzipped "VCF.gz". keep_on_server leaves a copy in the user's Gigwa temp-output area after this downloads it (default False).

For large sets this can take a while; raise timeout (seconds), or set wait=False to return immediately once the export is kicked off instead of blocking for the whole thing. A server that queues the work returns a download URL; check progress with get_export_progress and, once it reports complete, retrieve the file with fetch_export_file (that URL, plus output_path). wait=False always goes through the selection-aware endpoint, even with no filters set. Some Gigwa builds return the completed bytes immediately; in that case they are written to output_path and no progress/fetch step is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoBlock until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file.
formatNoExport format name, e.g. VCF (default), PLINK, FLAPJACK or VCF.gz; see list_export_formats for what this instance offers (and each format's type/ploidy restrictions).VCF
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
max_mafNoMaximum minor-allele frequency (0-1).
min_mafNoMinimum minor-allele frequency (0-1).
timeoutNoMaximum seconds to wait for the export to complete.
individualsNoIndividual-level identifiers to include in the export (e.g. from filter_individuals_by_metadata), not sample/callset ids; omit for all. Gigwa resolves each individual to all of its samples/callsets across runs server-side, including when an individual has more than one, so no manual sample mapping or dedup is needed.
output_pathYesDestination file path for the export.
keep_on_serverNoAlso leave a copy of the export in the user's Gigwa temp-output area after downloading it here.
metadata_fieldsNoIndividual metadata columns to embed in the export (from get_germplasm_metadata); omit for none.
max_missing_dataNoMaximum per-variant missing-data fraction (0-1).
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.
selected_variant_typesNoRestrict the export to these variant types, ';'-joined (e.g. 'SNP' or 'SNP;INDEL'); omit for all types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and handles it thoroughly. It discloses blocking vs. non-blocking behavior, server-side queueing, immediate-return behavior on some builds, default keep_on_server behavior, format availability variation by build, variant-type/ploidy restrictions, and the fact that large exports can take a while.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries operational meaning for a complex 13-parameter tool. It is front-loaded with the core purpose, then organized into modes and async behavior, avoiding filler while covering the important nuances an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with 13 parameters, two export modes, and an asynchronous workflow, the description is complete. It explains the full lifecycle from initiating the export to polling progress and fetching the file, covers format availability, and the output schema can handle return-value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds significant meaning beyond the schema: which parameter combinations switch export modes, the wait=False semantics, the meaning of keep_on_server, the individuals-to-samples resolution behavior, and a caution about constructing variant_set_db_id by hand. This is far more than the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Export a variant set — or a filtered/selected subset of it — to a file.' It clearly distinguishes two export modes and references sibling tools like list_export_formats, get_export_progress, and fetch_export_file, so an agent can tell this tool apart from related operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions: no filter/selection parameters means plain export; passing any of region, selected_variant_types, MAF bounds, max_missing_data, individuals, or metadata_fields triggers selection-aware export. It also routes the agent to list_export_formats for format availability and get_export_progress/fetch_export_file for queued jobs, making when-to-use and alternatives clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_export_fileA

Download a completed export — the URL export_genotypes(..., wait=False) returned — once get_export_progress reports it complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathYesDestination file path for the export.
download_urlYesDownload URL returned by export_genotypes(..., wait=False), once get_export_progress reports the export complete.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of explaining behavior. It does disclose the key workflow dependency and that the tool downloads a completed export. However, it does not mention potential local file overwriting, authentication needs, blocking behavior, or error cases, which are relevant for a tool with no annotation safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, front-loading the core action ('Download a completed export') and then specifying the critical precondition. Every clause earns its place and the sentence structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, two well-described parameters, and the presence of an output schema, the description is largely complete for an agent to invoke it correctly. It explains the full async workflow context. It only misses minor safety details such as overwrite behavior, which are not essential for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers both parameters with 100% description coverage, including the same guidance about the download URL being returned by export_genotypes and requiring completion. The tool description reinforces this but adds no additional parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Download a completed export') and precisely identifies the source of the download URL and the required completion condition. This clearly distinguishes it from siblings like export_genotypes (which initiates the export) and get_export_progress (which reports status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit temporal condition: use this tool only after export_genotypes(..., wait=False) returns a URL and get_export_progress reports completion. It does not explicitly name alternatives or say 'do not use before completion,' but the sequencing is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_individuals_by_metadataA

Select individuals whose stored metadata matches the given field/value filters.

filters_json is a JSON object mapping each metadata field name (see list_metadata_values) to a list of acceptable values, e.g. {"GroupK4": ["cA"]}. Multiple fields combine with AND; multiple values for one field combine with OR. Returns the matching individual-level identifiers, ready to pass directly to export_genotypes's individuals parameter. Diversity groups_json instead matches analysis sample names; obtain those from get_germplasm_metadata's sample_name column. Gigwa's export resolves each individual to all of its samples across runs server-side (verified against the Gigwa server source), including when an individual has more than one sample.

ParametersJSON Schema
NameRequiredDescriptionDefault
filters_jsonYesJSON object mapping each metadata field name to a list of acceptable values, e.g. {"GroupK4": ["cA"]} (see list_metadata_values for field/value names). Multiple fields AND together; multiple values for one field OR together.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does so thoroughly. It discloses AND/OR combination semantics, that individual-level identifiers are returned, and that the Gigwa server resolves each individual to all of its samples across runs — including the multiple-sample edge case — with a verification note. This goes well beyond what the schema alone provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose appears first, followed by filter semantics, return value, integration, and the alternative path. There is minor redundancy with the schema's filters_json explanation, which keeps it from a top score, but every substantive point earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with full schema coverage and an output schema, the description is complete. It covers what the tool does, how filters combine, what is returned, how to use the result downstream, and how it differs from sample-name-based diversity filtering. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces filters_json semantics with a concrete example and points to list_metadata_values, but this mostly mirrors the schema rather than adding new parameter-level detail. No additional format, defaults, or edge-case syntax beyond the schema is introduced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence clearly states the operation: 'Select individuals whose stored metadata matches the given field/value filters.' It names the specific resource, the filtering mechanism, and distinguishes itself from sibling tools by contrasting filters_json with the groups_json used in diversity tools and by referencing get_germplasm_metadata for sample names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says the returned identifiers are 'ready to pass directly to export_genotypes's individuals parameter', giving a concrete downstream integration. It also explains when NOT to use this approach: diversity groups_json instead matches analysis sample names, with a pointer to get_germplasm_metadata's sample_name column. This provides clear routing between alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_export_progressA

Report the status of the current session's most recent export (started with export_genotypes(..., wait=False)).

Unlike imports, an export isn't tracked by a token you pass around — Gigwa ties it to the session's own auth token, so there is exactly one "current export" per connection and this takes no arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose important behavior: export progress is tied to the session auth token, there is exactly one current export per connection, and no token argument is needed. However, it doesn't describe status values, what happens when no export exists, or whether the call is non-blocking; these details are left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then provides a concise rationale for the lack of arguments. The second paragraph is slightly longer than strictly necessary, but every sentence adds useful context about session-bound behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument status tool with an output schema, the description covers the essential context: what it reports, when it applies, and why it takes no input. It could be more complete regarding edge cases like no prior export or multiple exports, but the core invocation context is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the description explains why none are needed—unlike imports, exports are not tracked by a token but by the session's auth token. This adds meaningful context beyond the empty input schema and fully resolves any confusion about argument requirements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Report the status') and a clearly identified resource ('the current session's most recent export'), and explicitly distinguishes it from import progress tracking. It leaves no doubt about what the tool does and how it relates to export_genotypes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when to use this tool: after starting an export with wait=False, and that it takes no arguments. It contrasts exports with imports, which helps an agent route to get_import_progress for import status, though it does not name that sibling explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_germplasm_metadataA

Fetch server-stored per-individual metadata (germplasm attributes) for a database.

Reads the attributes already stored in Gigwa (imported earlier via import_metadata or a BrAPI source) for the module of variant_set_db_id and writes germplasm_metadata.csv — one row per accession, with attribute columns.

Which column to join on. germplasm_name is Gigwa's individual id, which on real data does not match the sample names the analysis tools use. Join on the sample_name column instead: it is the name diversity_fst / diversity_by_group match against (via metadata_tsv, which expects tab- separated input — convert the CSV first). Where one individual carries several samples the column holds them ;-joined and needs splitting first. It is blank when the callsets could not be read.

For the sample/callset level itself — raw callSetName, sampleDbId and per-sample additionalInfo — use search_callsets instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool reads server-stored attributes and writes a local file, and it discloses an edge case: sample_name is blank when callsets could not be read. It does not explicitly state whether the server data is mutated, but 'Reads the attributes already stored' strongly implies a read-only operation with a local file side effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and output, then expands into the most decision-relevant usage details. Each section earns its place: the join guidance prevents a common failure mode, and the sibling exclusion is concise. Despite being long, it contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the source of metadata, the output file format, row-level semantics, the join key, an important edge case, and the relevant alternative tool. Since an output schema is present, the description does not need to enumerate return fields, and it provides enough context for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters well, including the important warning about variant_set_db_id. The description adds context about the output file and the meaning of the data, but it does not add new parameter-level detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is specific and action-oriented: it 'Fetches server-stored per-individual metadata' and writes a CSV with one row per accession and attribute columns. It also distinguishes itself from the sibling tool search_callsets, which is for the sample/callset level, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool versus the alternative: 'For the sample/callset level itself ... use search_callsets instead.' It also explains the prerequisite that metadata must have been imported via import_metadata or a BrAPI source, and provides detailed join instructions (join on sample_name, not germplasm_name; convert CSV to TSV for metadata_tsv; split semicolon-joined samples).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_import_progressA

Report the current status of a running import, given its progress token.

ParametersJSON Schema
NameRequiredDescriptionDefault
progress_tokenYesProgress token returned by an import (import::<user>::<uuid>).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It indicates a read operation ('report') but does not specify side effects, idempotency, or response details. The existence of an output schema (not fully shown) mitigates this somewhat, but the description alone is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the purpose. It is well-structured for quick comprehension, though it is somewhat terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (single parameter, output schema present), the description is largely complete. However, it could note that the progress token is obtained from import functions, though the schema already covers this. The description does not need to explain return values as the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single parameter that has a detailed description. The tool description adds the phrase 'given its progress token,' which reinforces but does not substantially add meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('report'), the resource ('current status of a running import'), and the mechanism ('given its progress token'). It effectively distinguishes from sibling tools like 'abort_import' (which aborts) and 'audit_import_quality' (which audits quality).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a progress token is available, but it lacks explicit guidance on when to use this tool versus alternatives, such as when to check status vs. abort or audit. No exclusion criteria or alternative suggestions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gigwa_connectA

Switch the active Gigwa server at runtime — no restart needed.

Re-points every subsequent tool (and the gigwa:// resources) at url for the rest of the session. Credentials are never passed through the chat: they are resolved from the environment — a named profile reads GIGWA_USER_/GIGWA_PASS_; anonymous=True sends none. With neither, the default GIGWA_USER/GIGWA_PASS are used only when reconnecting to the configured GIGWA_URL — switching to any other server without a profile connects anonymously, so your home credentials are never transmitted to a different host unasked. The new connection is verified with a live round-trip before this returns; on failure the previous connection is restored.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget Gigwa base URL to connect to (e.g. https://host:port/gigwa); a bare host:port assumes https.
profileNoOptional credential profile: reads GIGWA_USER_<PROFILE>/GIGWA_PASS_<PROFILE> from the environment (never typed in chat). Omit to use the default GIGWA_USER/GIGWA_PASS.
anonymousNoConnect without credentials (Gigwa's anonymous public/read-only access).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden. It details credential handling (environment variables, never passed through chat), anonymous access, and the connection verification with rollback on failure. This is excellent transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and front-loaded purpose. It is slightly verbose but every sentence adds value. Minor improvements could trim redundancies, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (credential security, environment variables, connection verification), the description covers all behavioral aspects. With no annotations and no output schema needing explanation, it is fully complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds significant value: explains that bare host:port assumes https, elaborates on profile vs anonymous vs default credentials, and clarifies credential precedence. The schema alone would not convey these safety semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it switches the active Gigwa server at runtime without restart. The verb 'switch' combined with 'active Gigwa server' precisely defines the action and resource. It differentiates itself from sibling tools which are about data import, query, or analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use (to connect to a server) and how credentials are resolved. It implies not to use when you want to remain on the current server, but lacks explicit 'when not to use' statements. Still highly informative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gigwa_server_infoA

Check connectivity to the configured Gigwa server.

Generates an auth token with the configured credentials and reports the server URL and (best-effort) version. Use this first to confirm the connection works before importing data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses generation of auth token and reporting of URL/version. Honest about 'best-effort' version. No annotations, but description sufficiently covers behavioral traits for a connectivity check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise, informative sentences with no waste. Front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully explains behavior, side effects, and usage context. Complete for a simple connectivity tool with output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline is 4. Description adds value by explaining output (URL, version) beyond empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Check connectivity' and resource 'configured Gigwa server'. Distinguishes from siblings like import or diversity tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use this first to confirm the connection works before importing data', providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_dartseqA

Import DArTseq data from xlsx report(s) into Gigwa.

Converts the DArTseq SNP and/or Silico-DArT xlsx report(s) to a standard VCF — doing the 2-row genotype calling in Python (so reference homozygotes are not mis-imported as heterozygous, as Gigwa's built-in DArT parser does) — and uploads it to create/append a database (module), project and run.

Provide at least one of snp_xlsx / silico_xlsx (absolute paths). SNP and Silico use different allele models; importing both into the same run is unusual — prefer separate runs unless you specifically intend to combine them.

If reference_fasta is given (a reference genome FASTA or a prebuilt minimap2 .mmi index — an .mmi is loaded directly with no re-indexing, preferred for large genomes), the SNP markers' tag sequences are aligned to it and uniquely-mapped markers (mapq ≥ min_mapq) are imported genome-anchored (real chromosome/position); the rest stay on an Unmapped contig. Without it, all markers go on Unmapped.

positions_csv reuses a mapping already produced by map_dartseq_to_reference (its dartseq_positions.csv) instead of re-aligning — much faster when you've already inspected the mapping. Provide either reference_fasta or positions_csv, not both.

Set clear_project_data=True to replace any existing data in the project, skip_monomorphic=True to drop non-variant markers, and wait=False to return immediately with a progress token instead of blocking until done.

ParametersJSON Schema
NameRequiredDescriptionDefault
runYesTarget run name within the project.
waitNoBlock until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file.
moduleYesTarget Gigwa database (module) name.
ploidyNoSample ploidy (default 2).
projectYesTarget project name within the database.
min_mapqNoMinimum mapping quality for a tag to count as uniquely mapped.
snp_xlsxNoPath to a DArTseq SNP xlsx report.
technologyNoFree-text genotyping technology label (e.g. 'DArTseq', 'WGS', 'GBS').DArTseq
silico_xlsxNoPath to a Silico-DArT xlsx report.
positions_csvNoPath to a dartseq_positions.csv (from map_dartseq_to_reference) to reuse instead of re-aligning.
reference_fastaNoPath to a reference genome FASTA or a prebuilt minimap2 .mmi index, for genome-anchoring.
skip_monomorphicNoDrop non-variant (monomorphic) markers during import.
clear_project_dataNoReplace any existing data in the project before importing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure and meets it thoroughly. It reveals the custom 2-row genotype calling, the fact that unanchored markers go on an 'Unmapped' contig, that positions_csv skips re-alignment, that clear_project_data replaces existing data, and that wait=False returns a progress token.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but tightly organized into logical paragraphs: overview, input requirements, mapping options, and flag effects. Every sentence adds operational detail, and the most important action and constraints are front-loaded before the detailed options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-parameter import tool with no annotations and an output schema, the description covers every parameter and all major workflow branches: SNP-only, Silico-only, combined, genome-anchored, reused mapping, and async execution. It gives an agent enough context to select parameters correctly and anticipate side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already documents all 13 parameters, the description adds crucial semantics beyond the schema: absolute path requirement, the at-least-one constraint between snp_xlsx and silico_xlsx, mutual exclusivity of reference_fasta and positions_csv, .mmi being loaded directly without re-indexing, and the destructive effect of clear_project_data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: 'Import DArTseq data from xlsx report(s) into Gigwa', naming the resource format, input, and destination. It further clarifies the conversion to VCF and the creation of database/project/run, which clearly distinguishes it from sibling tools like import_vcf and import_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage conditions: 'Provide at least one of snp_xlsx / silico_xlsx', 'prefer separate runs' when importing both types, and 'Provide either reference_fasta or positions_csv, not both'. It also references map_dartseq_to_reference as the source of positions_csv, giving the agent an actionable decision path among related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_metadataA

Import individual metadata (per-individual attributes) into an existing Gigwa database.

The file is a TSV whose first column header equals metadata_type (individual for individual metadata) and whose values match the individual/sample names already present in the database. Remaining columns become searchable attributes. By default the file is validated first; set validate_first=False to skip that check.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleYesTarget Gigwa database (module) name.
tsv_pathYesPath to the metadata TSV file.
metadata_typeNoMetadata entity type / id-column name (default 'individual').individual
validate_firstNoValidate the metadata file before importing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It discloses the file format, validation behavior, and that remaining columns become searchable attributes. However, it does not mention side effects like overwriting existing data, permissions needed, or error handling, leaving gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two clearly written sentences, front-loaded with purpose, then file format and validation. Every sentence adds essential information with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers input format and validation but does not mention output, error handling, or effects on existing data. Given the presence of an output schema and sibling tools like abort_import, more context on the import process and potential failures would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters have descriptions. The description adds value by explaining that the TSV first column header must match metadata_type and that values must correspond to existing individuals. It also clarifies the validation default and option to skip it, which goes beyond the schema's concise descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'import' and the resource 'individual metadata into an existing Gigwa database'. It specifies the file format (TSV) and structure, making the tool's purpose unambiguous and distinct from similar tools like validate_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for importing metadata TSV files but does not explicitly state when to use this tool over alternatives like validate_metadata. It gives file format requirements but lacks explicit context on prerequisites or scenarios where other tools are more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_vcfA

Import a VCF file (.vcf or .vcf.gz) into Gigwa.

Uploads the VCF to create/append a database (module), project and run. technology is optional free-text (e.g. 'WGS', 'GBS'). Use clear_project_data=True to replace existing project data and wait=False to return a progress token instead of blocking.

ParametersJSON Schema
NameRequiredDescriptionDefault
runYesTarget run name within the project.
waitNoBlock until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file.
moduleYesTarget Gigwa database (module) name.
ploidyNoSample ploidy (default 2).
projectYesTarget project name within the database.
vcf_pathYesPath to the VCF file (.vcf or .vcf.gz) to import.
technologyNoFree-text genotyping technology label (e.g. 'DArTseq', 'WGS', 'GBS').
skip_monomorphicNoDrop non-variant (monomorphic) markers during import.
clear_project_dataNoReplace any existing data in the project before importing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the safety burden. It discloses mutating side effects (upload/create/append), the destructive clear_project_data=True behavior, and the async wait=False progress-token mode. It does not discuss prerequisites like an active Gigwa connection, but the core behavioral traits are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences, front-loaded with the core purpose and file constraints, followed by the two behavior-modifying flags. There is no filler or redundant context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter import with high schema coverage and an output schema, the description supplies the missing process-level details: what gets created or appended, when data is replaced, and how to switch to async mode. That is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with detailed descriptions, so the baseline is 3. The description adds value by clarifying the create/append relationship among module/project/run and highlighting clear_project_data and wait; it does not mention ploidy or skip_monomorphic, but the schema handles those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact action: import a VCF file (.vcf or .vcf.gz) into Gigwa. It is specific about the resource and file type, which naturally distinguishes it from metadata and DArT import siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is given: this tool uploads a VCF to create or append module/project/run, and the optional flags modify the workflow by replacing data or returning immediately. It does not explicitly name alternatives like import_dartseq or import_metadata, so it stops just short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contentA

List the databases, projects and runs currently hosted on the Gigwa server.

Each run's exact variant_set_db_id is printed alongside it — use that string verbatim in other tools, do not assemble one by hand. In particular, the middle segment is a numeric project index (1, 2, ...), not the project's name (e.g. project 'refNB' still has id segment '1') — using the name there is a common mistake and fails every downstream call with an opaque HTTP 500 rather than a clear error. list_variant_sets gives the same ids in a flatter list, if preferred.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it delivers: it discloses that each run is printed with its exact variant_set_db_id, that the middle segment is a numeric project index rather than a name, and warns that using the name causes an opaque HTTP 500. This is rich behavioral context beyond a simple 'list' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the first states the purpose, the second explains the critical id-format pitfall with a concrete example, and the third points to a sibling tool. The key warning is front-loaded and formatted distinctly, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema, the description covers all necessary context: what is listed, how to interpret the ids, what mistake to avoid, and a viable alternative. There is no missing information that would prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4. The description doesn't need to explain parameter semantics; it instead clarifies the output id format, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the databases, projects and runs currently hosted on the Gigwa server.' It clearly distinguishes this tool from siblings by focusing on the server-wide listing and by referencing list_variant_sets as an alternative, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage guidance: use the printed variant_set_db_id verbatim in other tools, don't assemble it by hand, and notes that using the project name is a common mistake. It also explicitly offers list_variant_sets as a preferred alternative for a flatter list, satisfying the when-and-alternative requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_export_formatsA

List the export formats this Gigwa build supports, with per-format compatibility info.

Queried live from the server's export-handler registry rather than a hardcoded list, so it reflects exactly what this build/instance offers. For each format shows the variant types it accepts and the ploidy levels it supports — check this before picking a format for export_genotypes: several formats (e.g. EIGENSTRAT, FASTA, NEXUS, PHYLIP, PCA, ASD, JUKES-CANTOR) are SNP-only and/or diploid-only, silently dropping INDEL/MIXED sites or rejecting other-ploidy runs rather than erroring.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well. It discloses that results are queried live from the server's export-handler registry, not hardcoded, and warns about silent dropping of variants or ploidy handling. This is genuinely useful behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then behavior, then usage guidance. The format-name examples are not fluff; they substantiate the compatibility warning. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema, the description is complete. It covers what the tool does, how it fetches data, what compatibility details it returns, and why it matters for the related export operation. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are not applicable. The baseline for zero-parameter tools is 4, and the description adds no unnecessary parameter detail while remaining consistent with the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List the export formats this Gigwa build supports') and explicitly notes per-format compatibility info. It clearly distinguishes itself from export_genotypes by being a pre-export lookup rather than an export operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'check this before picking a format for export_genotypes'. It also explains the practical consequence of choosing incompatible formats, making the use case and timing unambiguous. No alternative list tool exists among siblings, so no exclusion is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_metadata_valuesA

List the individual-metadata fields available for a database and their distinct values.

Backed by the endpoint the Gigwa web UI itself uses to populate its metadata-based selection filters, so it works even on builds where get_germplasm_metadata's BrAPI fallback returns no attributes. Use this to discover field names/values before calling filter_individuals_by_metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It credits the underlying UI endpoint, explains a key reliability edge case where sibling metadata retrieval fails, and implies a safe read-only operation via the verb 'List'. It could further state that it performs no mutation or side effects, but for a listing tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the core purpose, and the second adds only high-value context about the backing endpoint and usage relationship. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a single well-documented parameter and an output schema, so return values are already covered. The description completes the picture by explaining why the tool exists, when to call it, and how it relates to the broader workflow. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the sole parameter 'variant_set_db_id' is already richly documented in the schema with format guidance and a warning about constructing it by hand. The tool description itself adds no additional parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('List') and a clear resource ('individual-metadata fields ... and their distinct values'), making the tool's function unambiguous. It also distinguishes itself from related siblings by stating its role in discovering field names/values before 'filter_individuals_by_metadata'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool ('before calling filter_individuals_by_metadata') and contrasts it with 'get_germplasm_metadata', noting it works even when the BrAPI fallback returns no attributes. This provides concrete decision guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sequencesA

List the reference sequences (chromosomes/contigs) available in a variant set.

Use this to discover valid reference_name values for the region filters on count_variants / search_variants / the QC & diversity tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral transparency burden. The verb 'List' implies a read-only operation and the description scopes it to a variant set, but it does not disclose additional traits such as permissions, error behavior, or output format. This is acceptable for a simple listing tool but leaves some implicit behavior unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: the first sentence states the core purpose, and the second provides actionable usage context. The parameter warning is detailed but directly useful, with no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a single-parameter tool with an output schema present, so the description does not need to explain return values. It fully explains what the tool returns conceptually, how to use the result, and how to obtain the required parameter, making it sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, and the parameter description adds significant meaning beyond the type declaration. It explains the BrAPI variantSetDbId format, tells the agent to copy the exact string from list_variant_sets or list_content, warns against assembling it manually, and even describes the failure mode of an incorrect value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists reference sequences (chromosomes/contigs) available in a variant set. The description further clarifies the purpose by explaining that it provides valid reference_name values for region filters, distinguishing it from related list/metadata tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use the tool: to discover valid reference_name values for count_variants, search_variants, and QC & diversity tools. It does not explicitly contrast with sibling tools, but the prerequisite relationship is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_variant_setsA

List every variant set (run) with its exact BrAPI variantSetDbId.

The other tools take a variant_set_db_id; this returns those ids directly (plus name and variant/callset counts when the server provides them), complementing the human-readable database/project/run view from list_content.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it returns IDs, name, and variant/callset counts when available, but lacks details on potential behaviors like network calls or permissions. With no annotations, the description carries full burden but is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, and no extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an output schema, the description sufficiently explains what the tool returns and how it relates to sibling tools, making it complete for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, there is no need for parameter explanation. The description adds value by explaining the output context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly specifies that the tool lists every variant set (run) with its exact BrAPI variantSetDbId, and distinguishes itself from list_content by providing IDs directly for use by other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that this tool returns IDs needed by other tools and complements list_content, but does not explicitly state when to avoid using it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_dartseq_to_referenceA

Guess genomic positions for DArTseq SNP markers by aligning their tag sequences.

Aligns each marker's ~69 bp AlleleSequence tag to reference_fasta (a reference genome FASTA, or a prebuilt minimap2 .mmi index) and reports the inferred chromosome, position and strand of each SNP. Writes dartseq_positions.csv (allele_id, chrom, pos, strand, mapq, ref, alt, status). The result can be passed to import_dartseq (reference_fasta=) to import the data genome-anchored instead of on an Unmapped contig.

backend: "auto" uses the minimap2 CLI when available (streams over multi-part indexes → bounded RAM, best for large multi-gigabase genomes), falling back to the in-process mappy binding. Markers are classified unique (mapq ≥ min_mapq), multi (ambiguous), or unmapped.

ParametersJSON Schema
NameRequiredDescriptionDefault
presetNominimap2 preset (default 'sr' for short reads).sr
backendNoAligner backend: 'auto' (minimap2 CLI if available, else mappy), 'cli', or 'mappy'.auto
min_mapqNoMinimum mapping quality for a tag to count as uniquely mapped.
snp_xlsxYesPath to a DArTseq SNP xlsx report.
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
reference_fastaYesPath to a reference genome FASTA or a prebuilt minimap2 .mmi index, for genome-anchoring.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the alignment process, backend selection (auto/cli/mappy), and marker classification (unique, multi, unmapped). However, it does not mention error handling, performance expectations, or any side effects beyond writing a CSV. Additional details on RAM usage and failure modes would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a concise first sentence summarizing purpose, followed by details on alignment, output, and implementation. It is front-loaded and each part adds value. It could be slightly more concise (e.g., the backend explanation could be shorter), but it remains clear and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no annotations, presence of output schema), the description is fairly complete. It covers the main workflow, output format, and integration with another tool. It lacks details on error conditions or input validation, but overall provides sufficient context for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful context beyond the schema: it explains that reference_fasta can be a FASTA or .mmi index, backend 'auto' uses CLI if available, and min_mapq thresholds classification. For output_dir, it gives the default path. This adds value for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool's purpose is clearly stated: 'Guess genomic positions for DArTseq SNP markers by aligning their tag sequences.' It specifies the action (align/guess), the resource (DArTseq SNP markers), and the output. The description distinguishes from the sibling tool 'import_dartseq' by noting that the result can be passed to it, clarifying the mapping role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool: for mapping DArTseq markers to a reference genome, and that the output can feed into import_dartseq for genome-anchored import. It does not explicitly state when not to use or list alternatives, but the context is clear enough for an agent to decide. More explicit exclusions would improve this dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qc_call_rateA

Per-sample and per-marker call rate (missingness) QC for a variant set.

Flags samples/markers below the given thresholds. Writes call_rate_samples.csv and call_rate_markers.csv and returns a summary with the overall call rate and the worst offenders. variant_set_db_id is a BrAPI variantSetDbId (from list_content / BrAPI variantsets). For large production sets pass method="allelematrix" with max_markers (e.g. 20000) to estimate from a server-side marker subset instead of a full VCF export. region ("chrom" or "chrom:start-end", 1-based; from list_sequences) restricts the analysis to one genomic window — available on every QC/diversity tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.
min_marker_call_rateNoFlag markers with call rate below this (0-1).
min_sample_call_rateNoFlag samples with call rate below this (0-1).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses side effects (writes call_rate_samples.csv and call_rate_markers.csv), the return summary, and method behavior (vcf full export vs allelematrix paged subset). It could add detail about output overwrite or directory creation, but the major behavioral traits are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose, outputs, and return value come first, followed by targeted parameter guidance. Every sentence carries operational information, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter QC tool with no annotations and an output schema, the description covers purpose, outputs, return summary, large-set strategy, and cross-tool parameter provenance. The schema covers the remaining details such as defaults and paths, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description meaningfully adds to several parameters: it explains variant_set_db_id provenance, warns against hand-assembling it, gives the production-scale usage of method and max_markers, and ties region to list_sequences. This exceeds baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Per-sample and per-marker call rate (missingness) QC for a variant set,' and immediately states what it flags and produces. This clearly distinguishes it from sibling QC tools like qc_heterozygosity and qc_duplicate_accessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: flags samples/markers below thresholds, writes CSVs, and returns a summary, and it gives concrete guidance for when to use method='allelematrix' with max_markers on large production sets. It does not explicitly name sibling tools as alternatives or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qc_duplicate_accessionsA

Detect duplicate / clonal accessions via pairwise identity-by-state (IBS).

Computes IBS allele-sharing similarity between every pair of samples and groups pairs at or above similarity_threshold into duplicate sets — the core genebank "cleaning" check for mislabelled duplicates and clones. By default subsamples to the first max_markers in canonical Gigwa search order for speed (set to 0/None to use all). Writes duplicate_pairs.csv and duplicate_groups.csv. For large sets pass method="allelematrix" to fetch the marker subset without a full export.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.
similarity_thresholdNoIBS similarity (0-1) at/above which accessions are grouped as duplicates.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full behavioral burden, and it delivers: it discloses the algorithm (pairwise IBS allele-sharing), the default subsampling to max_markers 'for speed', the explicit output side effects ('Writes duplicate_pairs.csv and duplicate_groups.csv'), and a performance-optimized code path. It could additionally state whether the underlying data is mutated, but the CSV writing is explicitly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly written sentences, front-loaded with the core purpose then algorithm, defaults, outputs, and tuning tip in order of importance. Every sentence earns its place; there is no fluff, repetition, or marketing language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation. The description covers the algorithm, the grouping threshold semantics, default behavior with its override, the written artifacts, and performance scaling guidance. Only minor gaps remain, such as expected runtime for large variant sets, but nothing required to invoke or interpret the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so per the baseline the schema already documents all six parameters. The description adds a little extra meaning — the speed motivation for max_markers and the large-set recommendation for method='allelematrix' — but these are light nuances rather than substantial semantic additions beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource pair: 'Detect duplicate / clonal accessions via pairwise identity-by-state (IBS)', then explains the grouping mechanism (pairs at/above similarity_threshold become duplicate sets). The pairwise IBS mechanism and duplicate-grouping terminology clearly set it apart from sibling QC tools like qc_call_rate and qc_heterozygosity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context — 'the core genebank cleaning check for mislabelled duplicates and clones' — and practical usage guidance such as setting max_markers to 0/None to use all markers and passing method='allelematrix' for large sets. However, it never names the sibling QC tools as alternatives or says when NOT to use this tool, so the exclusion logic is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qc_heterozygosityA

Per-sample observed heterozygosity QC, flagging outliers.

High Ho relative to the cohort suggests contamination or off-types; very low Ho suggests selfed/inbred or duplicated material. Flags samples more than outlier_sd standard deviations from the mean. Writes heterozygosity_samples.csv. For large sets pass method="allelematrix" + max_markers to avoid a full VCF export.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
outlier_sdNoFlag points more than this many standard deviations from the mean.
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states that the tool writes heterozygosity_samples.csv, flags samples beyond a standard-deviation threshold, and describes a method-dependent performance tradeoff. It does not discuss permissions or non-destructiveness, but the QC context and output-file disclosure make the behavior reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences with no filler. The first sentence delivers the core purpose, and subsequent sentences add interpretation, threshold behavior, output artifact, and large-set guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the input schema covers all parameters, the description supplies the remaining needed context: what the tool detects, how it flags outliers, what it writes, and how to scale to large datasets. An agent can confidently select and invoke this tool without needing further explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all six parameters, so the baseline is 3. The description adds value by linking outlier_sd to the flagging rule and by explaining that method='allelematrix' plus max_markers avoids a full VCF export. This goes beyond the schema's parameter descriptions and gives actionable performance guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Per-sample observed heterozygosity QC, flagging outliers.' It also gives biological interpretation of high/low Ho, which distinguishes this QC metric from siblings like qc_call_rate or qc_maf_filter. The verb and resource are clear and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on interpreting high vs. low Ho and explicitly recommends method='allelematrix' plus max_markers for large datasets to avoid a full VCF export. It does not name sibling QC tools or list when not to use it, so it stops short of a full exclusionary routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qc_maf_filterA

Report markers that would be filtered by MAF / missingness (no changes applied).

Computes per-marker minor-allele frequency and missing rate, and counts how many markers are monomorphic, below maf_threshold, or above max_missing missing. Writes marker_filter_stats.csv. This is a report only — it does not modify Gigwa. For large sets pass method="allelematrix" + max_markers to sample server-side.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoGenotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset).vcf
regionNoRestrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_markersNoCap analysis to the first N markers in canonical Gigwa search order; omit to use all.
max_missingNoMaximum per-marker missing-data fraction (0-1) before a marker is flagged.
maf_thresholdNoMinor-allele-frequency threshold below which markers are flagged.
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it succeeds: it explicitly states 'no changes applied', 'this is a report only — it does not modify Gigwa', and discloses the file output (marker_filter_stats.csv). It also explains the sampling behavior for large sets. This is comprehensive behavioral disclosure for a read-only QC reporting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and every sentence earns its place: purpose, computation details, side-effect disclosure, and scale guidance. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters and no annotations, the description is complete enough for an agent to select and invoke it correctly: it explains what is computed, what file is written, that no data mutation occurs, and how to handle large sets. The output schema covers return structure, so return-value details are not needed in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some contextual meaning by associating method and max_markers with a server-side sampling strategy for large sets, but it does not substantially enrich the already-detailed parameter descriptions in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object: 'Report markers that would be filtered by MAF / missingness (no changes applied).' It clearly distinguishes the tool from sibling QC tools by naming the exact computation (MAF and missing rate) and the report-only nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool — to preview MAF and missingness filtering without modifying data — and gives concrete guidance for large data sets (method='allelematrix' + max_markers). It does not name alternative sibling tools or state explicit exclusions, but the 'report only' framing and scale guidance are strong usage signals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_callsetsA

Dump per-sample (callset) metadata for a run: names + additionalInfo attributes.

Retrieves the run's callsets via BrAPI search/callsets and writes sample_metadata.csv (one row per sample) with sample_name, callSetName, sampleDbId, callSetDbId and every attribute present in the callsets' additionalInfo (e.g. ICARDA_IG, SeedID, Country, Latitude, Longitude, SiteCode, PopulationType).

sample_name is the same name the analysis tools use for the sample, so the file joins to their outputs; callSetName keeps the server's raw label, which on some builds is the more human-readable of the two.

This is the sample/callset-level counterpart to get_germplasm_metadata: use it when the germplasm (accession) level exposes no attributes but the samples do.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It clearly states the tool retrieves callsets via BrAPI and writes sample_metadata.csv, and it explains the semantic difference between sample_name and callSetName. However, it does not mention whether an existing CSV is overwritten or any failure behavior for empty results, though these are minor for a read-and-dump tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and every subsequent sentence adds value: output format, column semantics, join behavior, and sibling distinction. There is no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, two well-documented parameters, an existing output schema, and no annotations, the description is complete. It covers what the tool does, what it writes, how the output should be interpreted, and when to choose it over get_germplasm_metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented, especially variant_set_db_id with detailed guidance about copying the exact string. The tool description adds context about the output file and naming semantics but does not materially enrich the meaning of the two parameters themselves beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Dump per-sample (callset) metadata for a run', naming the exact output file and columns. It also explicitly distinguishes itself from get_germplasm_metadata as the 'sample/callset-level counterpart', so an agent can tell siblings apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives an explicit when-to-use rule: 'use it when the germplasm (accession) level exposes no attributes but the samples do.' It also names the alternative tool directly, and the parameter schema reinforces how to obtain the correct variant_set_db_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_variantsA

Search variants matching filters server-side and write the matching list to CSV.

Same filters as count_variants (region / MAF / missing-data). Returns variant metadata only (id, chrom, pos, ref, alt) — no genotypes are fetched — and writes variant_search.csv. Use count_variants first to size the result; max_variants caps how many are retrieved. For downstream genotype analysis on a filtered subset, use the region/min_maf options on the QC/diversity tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoRegion end position, 1-based inclusive.
startNoRegion start position, 1-based inclusive.
max_mafNoMaximum minor-allele frequency (0-1).
min_mafNoMinimum minor-allele frequency (0-1).
output_dirNoDirectory for the output CSV(s) (default ./gigwa_results/<module>/).
max_variantsNoMaximum number of matching variants to retrieve.
reference_nameNoChromosome/contig name to restrict the search to (see list_sequences).
max_missing_dataNoMaximum per-variant missing-data fraction (0-1).
variant_set_db_idYesBrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It clearly states that the operation is server-side, writes variant_search.csv, returns only variant metadata with no genotypes fetched, and limits retrieval via max_variants. It does not mention potential file-overwrite behavior or authentication requirements, but the core behavioral traits are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each earning its place: purpose, output/filter alignment, sizing/cap guidance, and alternative routing. The action is front-loaded, and no filler or restatement of schema details appears.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters, no annotations, but a full output schema, the description supplies the missing operational context: what the CSV contains, what is deliberately not fetched, how to size the query, and which sibling tools to use instead. The combination of description plus rich schema coverage makes this complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful grouping by stating filters are the same as count_variants (region/MAF/missing-data), which links start/end/reference_name, min/max_maf, and max_missing_data into a cohesive filter set. It also clarifies max_variants as a retrieval cap, adding semantic context beyond the schema's per-field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action—'Search variants matching filters server-side and write the matching list to CSV'—and clearly distinguishes the tool from siblings like count_variants and the QC/diversity tools by stating it returns metadata only and writes a CSV. It also scopes the output precisely ('id, chrom, pos, ref, alt'), making the tool's niche unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage direction: use count_variants first to size results, rely on max_variants to cap retrieval, and avoid this tool for downstream genotype analysis in favor of QC/diversity tools with region/min_maf options. This is direct when-to-use and when-not-to-use guidance tied to named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_metadataA

Validate an individual-metadata file against a Gigwa database without importing.

metadata_type is the name of the ID column in the file that links rows to genotype entities — for individual metadata this is the individual column (the header must match exactly, case-sensitive). tsv_path is a TSV whose first column header equals metadata_type.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleYesTarget Gigwa database (module) name.
tsv_pathYesPath to the metadata TSV file.
metadata_typeNoMetadata entity type / id-column name (default 'individual').individual

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It does not disclose what happens on validation failure, output format, or side effects, lacking behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise (two sentences) but the second sentence is a bit run-on. It efficiently conveys necessary information without excessive length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description explains parameters and core action, it lacks usage guidelines and behavioral details, making it somewhat incomplete despite presence of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds concrete details beyond the schema, e.g., explaining metadata_type as the ID column name and that tsv_path's first column header must match. This enriches parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's specific verb and resource: 'Validate an individual-metadata file against a Gigwa database without importing.' This distinguishes it from sibling tools like import_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage before import ('without importing') but does not provide explicit guidance on when to use this tool versus alternatives like audit_import_quality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 26 tool updatesv1.9.1
    • Changedaudit_import_quality2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedcount_variants1 field changed
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_by_group2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_core_collection2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_fst2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_kinship2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_pca2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_structure2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_summary2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changeddiversity_tree2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedexport_genotypes11 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Export format: VCF, PLINK or Flapjack (availability varies by Gigwa build)."New value: +"Export format name, e.g. VCF (default), PLINK, FLAPJACK or VCF.gz; see list_export_formats for what this instance offers (and each format's type/ploidy restrictions)."
      • addedInput schema / properties / individuals
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Individual-level identifiers to include in the export (e.g. from filter_individuals_by_metadata), not sample/callset ids; omit for all. Gigwa resolves each individual to all of its samples/callsets across runs server-side, including when an individual has more than one, so no manual sample mapping or dedup is needed."
        +}
      • addedInput schema / properties / keep_on_server
        Added value: +{
        +  "default": false,
        +  "description": "Also leave a copy of the export in the user's Gigwa temp-output area after downloading it here.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_maf
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Maximum minor-allele frequency (0-1)."
        +}
      • addedInput schema / properties / max_missing_data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Maximum per-variant missing-data fraction (0-1)."
        +}
      • addedInput schema / properties / metadata_fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Individual metadata columns to embed in the export (from get_germplasm_metadata); omit for none."
        +}
      • addedInput schema / properties / min_maf
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Minimum minor-allele frequency (0-1)."
        +}
      • addedInput schema / properties / region
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based)."
        +}
      • addedInput schema / properties / selected_variant_types
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Restrict the export to these variant types, ';'-joined (e.g. 'SNP' or 'SNP;INDEL'); omit for all types."
        +}
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
      • addedInput schema / properties / wait
        Added value: +{
        +  "default": true,
        +  "description": "Block until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file.",
        +  "type": "boolean"
        +}
    • Addedfetch_export_file
    • Addedfilter_individuals_by_metadata
    • Addedget_export_progress
    • Changedget_germplasm_metadata1 field changed
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedimport_dartseq1 field changed
      • changedInput schema / properties / wait / description
        Previous value: -"Block until the import finishes (True) or return a progress token immediately (False)."New value: +"Block until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file."
    • Changedimport_vcf1 field changed
      • changedInput schema / properties / wait / description
        Previous value: -"Block until the import finishes (True) or return a progress token immediately (False)."New value: +"Block until the job finishes (True, default) or return immediately once it's kicked off (False) -- an import returns a progress token to poll with get_import_progress, an export returns a download URL to poll with get_export_progress and retrieve with fetch_export_file."
    • Addedlist_export_formats
    • Addedlist_metadata_values
    • Changedlist_sequences1 field changed
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedqc_call_rate2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedqc_duplicate_accessions2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedqc_heterozygosity2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Changedqc_maf_filter2 fields changed
      • changedInput schema / properties / max_markers / description
        Previous value: -"Cap the number of markers analysed (evenly-spaced subsample); omit to use all."New value: +"Cap analysis to the first N markers in canonical Gigwa search order; omit to use all."
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
    • Addedsearch_callsets
    • Changedsearch_variants1 field changed
      • changedInput schema / properties / variant_set_db_id / description
        Previous value: -"BrAPI variantSetDbId identifying the run (MODULE§project§run); from list_variant_sets / list_content."New value: +"BrAPI variantSetDbId identifying the run (MODULE§project§run) -- copy the exact string from list_variant_sets / list_content, never assemble one by hand: the middle segment is a numeric project index, not the project's name, and a wrong guess fails with an opaque HTTP 500 rather than a clear error."
  2. 1 tool updatev1.6.0
    • Addedgigwa_connect
  3. 28 tool updatesv1.4.16
    • First observedabort_import
    • First observedaudit_import_quality
    • First observedcount_variants
    • First observeddiversity_by_group
    • First observeddiversity_core_collection
    • First observeddiversity_fst
    • First observeddiversity_kinship
    • First observeddiversity_pca
    • First observeddiversity_structure
    • First observeddiversity_summary
    • First observeddiversity_tree
    • First observedexport_genotypes
    • First observedget_germplasm_metadata
    • First observedget_import_progress
    • First observedgigwa_server_info
    • First observedimport_dartseq
    • First observedimport_metadata
    • First observedimport_vcf
    • First observedlist_content
    • First observedlist_sequences
    • First observedlist_variant_sets
    • First observedmap_dartseq_to_reference
    • First observedqc_call_rate
    • First observedqc_duplicate_accessions
    • First observedqc_heterozygosity
    • First observedqc_maf_filter
    • First observedsearch_variants
    • First observedvalidate_metadata

TDQS

A4/5.0
Disambiguation4/5

Most tools are clearly separated by resource and action—import, export, QC, diversity, metadata, and server administration are distinct clusters. A few pairs (list_content vs list_variant_sets, diversity_pca vs diversity_structure) could be confused, but the descriptions provide enough context to disambiguate them.

Naming Consistency5/5

Names are uniformly lower_snake_case and follow a predictable prefix convention: verb_resource for operations (list_*, import_*, export_*, get_*, search_*, count_*) and domain-prefixed nouns for analyses (qc_*, diversity_*). No camelCase or arbitrary synonyms appear, so the pattern is highly consistent.

Tool Count2/5

With 35 tools this is a very large MCP surface, clearly above the 25+ threshold for 'too many'. Each tool is individually purposeful, but the sheer number makes selection harder and suggests the server would benefit from consolidation or splitting into focused sub-servers.

Completeness4/5

The server covers the core analytical lifecycle well: import, validate, list, filter, QC, diversity analysis, and export all have dedicated tools with progress and abort handling. Gaps are mostly administrative—no deletion/removal of databases/projects/runs and no metadata update/delete—but these are minor for the primary analysis use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    An MCP server that enables single-cell RNA sequencing analysis through natural language, supporting data processing, visualization, and analysis tasks without requiring coding knowledge.
    52
    12
    BSD 3-Clause
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables scRNA-Seq analysis through natural language, providing tools for data preprocessing, clustering, and biological visualization. It supports both predefined function execution and a flexible code mode powered by a Jupyter backend for automated single-cell transcriptomics workflows.
    16
    BSD 3-Clause

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gkanogiannis/Gigwa-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server