Gigwa-MCP
The Gigwa-MCP server connects to a Gigwa genotyping database and enables full genomic workflows—data import, QC, diversity analysis, and auditing—via natural language commands through an MCP client.
Connect & Explore
Verify connectivity and server version (
gigwa_server_info)Browse databases → projects → runs (
list_content)List runs with BrAPI IDs (
list_variant_sets) and chromosomes/contigs (list_sequences)
Data Import
Import DArTseq SNP/Silico xlsx reports (
import_dartseq), VCF files (import_vcf), and per-individual metadata TSVs (validate_metadata,import_metadata)Map DArT marker tag sequences to a reference genome (
map_dartseq_to_reference)Track and cancel running imports (
get_import_progress,abort_import)
Search & Export (Read-Only)
Count variants with server-side filters (
count_variants), retrieve variant metadata (search_variants)Export genotypes to VCF, PLINK, or Flapjack (
export_genotypes)Fetch per-individual attributes (
get_germplasm_metadata)
Quality Control (Read-Only)
Per-sample and per-marker call rates (
qc_call_rate)Heterozygosity outlier detection (
qc_heterozygosity)Duplicate/clonal accession detection via pairwise IBS (
qc_duplicate_accessions)MAF/missingness filter reporting without data modification (
qc_maf_filter)
Diversity & Population Structure (Read-Only)
Per-marker statistics: MAF, He, Ho, PIC (
diversity_summary)PCA (
diversity_pca), VanRaden kinship matrix (diversity_kinship), pairwise Weir & Cockerham Fst (diversity_fst)Per-population diversity with allelic richness (
diversity_by_group)Core collection selection (
diversity_core_collection), PCA + K-means structure inference (diversity_structure), UPGMA dendrogram (diversity_tree)
Import Quality Audit
Scan an entire instance or a single run for genotype-encoding artifacts (mis-called heterozygotes, suspicious call rates) and rank runs as BROKEN / SUSPECT / OK (
audit_import_quality)
Key Features
All QC and diversity tools accept a
regionparameter to restrict analysis to a genomic windowResults are saved as CSV (or Newick for trees) under
./gigwa_results/<database>/for local use and visualizationCredentials are managed via environment variables and never pass through the chat
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Gigwa-MCPimport DArTseq report and run diversity analysis"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Switch the active Gigwa server at runtime (credentials from the environment, never the chat) |
| Verify connectivity/auth and report the server version |
| List databases → projects → runs on the instance |
| Call genotypes from DArTseq SNP/Silico xlsx report(s) → VCF and import (optionally genome-anchored via |
| Import a |
| Align DArT tag sequences to a reference genome to infer each marker's chromosome/position |
| Validate an individual-metadata TSV without importing |
| Import per-individual attributes into a database |
| Poll a running import by its progress token |
| Cancel a running import (or other process) by its progress token |
Discovery, search & export (read-only)
Tool | What it does |
| List every run with its exact BrAPI |
| List the chromosomes/contigs of a variant set (valid |
| Count variants matching region / MAF / missing-data filters, server-side (no download) |
| Search variants server-side and write the matching list ( |
| List the export formats this build actually offers, with variant-type/ploidy limits |
| Export a variant set — or a filtered/selected subset — to a file; |
| Status of this session's running export (started with |
| Download a completed export once |
| Dump per-sample (callset) metadata — names + |
| Pull server-stored per-individual attributes ( |
| List individual-metadata field names and their distinct values |
| Select individuals by metadata field/value filters (feeds |
QC & diversity (read-only)
Tool | What it does |
| Per-sample & per-marker call rate; flag low-call samples/markers |
| Per-sample Ho; flag outliers (contamination / off-type / selfed) |
| Pairwise IBS → group duplicate/clonal accessions |
| Report markers that MAF / missingness filters would remove |
| Per-marker MAF, He, Ho, PIC, Fis + dataset means |
| PCA of population structure; variance explained + PC coords (optional |
| VanRaden genomic relationship (kinship) matrix |
| Pairwise Weir & Cockerham Fst between groups |
| Per-population He, Ho, Fis, MAF, % polymorphic + (rarefied) allelic richness |
| Greedy allele-coverage core: smallest accession set capturing the most diversity |
| Lightweight ancestry with PCA + K-means, pseudo-F suggests K (no ADMIXTURE binary) |
| UPGMA dendrogram of accessions from IBS distance, written as Newick ( |
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 |
| 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 BrAPIsearch/allelematrix, honouring a server-sidemax_markerssubset 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 theuvxcommand) is required if you launch the server withuvx gigwa-mcp(the recommended MCP-client setup below). Not needed if youpip/pipx-install the package and point your client at the resulting executable instead. Install it withcurl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) orpip install uv, then make sureuvxis on yourPATH(see the note below).A reachable Gigwa server (local or remote) and credentials.
Optional: the minimap2 CLI on
PATHfor DArTseq genome-anchoring of very large genomes (otherwise the in-processmappybinding 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 recipesOr 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 stepFrom 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 figuresRun 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.
Install
uv, which provides theuvxcommand. It's a small helper that downloads and runsgigwa-mcpfor 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 uvThen confirm it's reachable:
uvx --versionshould print a version. If it says "command not found",uvxisn't on yourPATHyet, then see the note below. (If you'd rather not useuvat all,pipx install gigwa-mcpworks too; then usegigwa-mcpin place ofuvx gigwa-mcpeverywhere below.)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-mcpWhat 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 projectinstead to share it with your team via a.mcp.jsonfile in the repo).the three
-elines : your Gigwa address and login, handed to the tool privately.everything after
--: the command that actually starts the server (uvx gigwa-mcp).
Check it worked. In Claude Code, type
/mcp. You should see gigwa listed.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
uvxmust be on your client'sPATH. If/mcpshows the server as failed withExecutable not found in $PATH: "uvx", the MCP client couldn't finduvx. Theuvinstaller dropsuvxin~/.local/bin(or~/.cargo/bin); make sure that directory is on thePATHof 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 avoiduvxentirely bypipx install gigwa-mcpand usinggigwa-mcpas thecommand.
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-mcpMCP 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"
}
}
}
}-iis required (stdio);--rmcleans up the container on exit.The bare
-e GIGWA_URLform forwards each value from theenvblock 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"toargsand use the same URL, or use"--network", "host"and pointGIGWA_URLathttp://localhost:8080/gigwa.Remote Gigwa: just set
GIGWA_URLto 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 onlyGIGWA_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_passwordConnecting 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?" |
|
"Connect and list the databases." |
|
"Import |
|
"Now run call-rate QC and a PCA on that run." |
|
"Scan the whole instance for badly imported databases." |
|
More example prompts:
You ask | Tool called |
"Load this VCF into project |
|
"Validate then import this individual-metadata TSV." |
|
"Find duplicate / clonal accessions." |
|
"Flag heterozygosity outliers (contamination / off-types)." |
|
"Which markers would a MAF 5% / 50%-missing filter drop?" |
|
"Give me per-marker MAF, He, Ho, PIC." |
|
"Compute the kinship matrix." |
|
"Compute Fst between these two groups of accessions." |
|
"Compare diversity (He/Ho/allelic richness) across my populations." |
|
"Pick a core collection of ~10% that captures the most diversity." |
|
"How many genetic clusters are in this collection?" |
|
"Build a UPGMA tree of the accessions." |
|
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 |
|
| switches the active server (verified); creds from env ( |
| (none) | server version + auth check |
| (none) | database → project → run hierarchy |
|
| imports a DArTseq report; marker/sample counts + final status |
|
| imports a |
|
|
|
|
| validation issues (no import) |
|
| imports per-individual attributes |
|
| current async-job status |
|
| requests cancellation of a running process |
Discovery, search & export
Tool | Key arguments | Returns / writes |
| (none) | every run's exact |
|
| chromosomes/contigs (valid |
|
| server-side match count (no download) |
| same filters as |
|
| (none) | the instance's export handlers + type/ploidy limits |
|
| writes the export file; |
| (none) | status of this session's export |
|
| writes the completed export |
|
|
|
|
|
|
|
| metadata fields + distinct values |
|
| matching individual identifiers |
QC & diversity (output files listed in Output files)
Tool | Key arguments | Flags / interprets |
|
| samples/markers below threshold |
|
| Ho outliers; warns if cohort mean Ho implausibly high |
|
| duplicate/clone groups; warns on degenerate clustering |
|
| counts monomorphic / low-MAF / high-missing markers |
| (none) | dataset means; warns on strongly negative Fis |
|
| variance explained + PC1/PC2 outliers |
|
| mean off-diagonal, top related pairs, inbreeding diagonal |
|
| pairwise Fst |
|
| per-group He/Ho/Fis/MAF/%poly/allelic richness |
|
| core set + % of diversity captured |
|
| suggested K (pseudo-F) + per-K table; warns on degenerate clustering |
|
| UPGMA Newick ( |
Audit
Tool | Key arguments | Returns / writes |
|
| ranked BROKEN/SUSPECT/OK + |
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 a DArTseq/VCF dataset, then the standard QC + audit |
|
| summary → PCA/structure → kinship → tree (+ per-group Fst) |
|
| full QC suite + a go/no-go verdict for downstream analysis |
| (none) | server info → list content/variant sets → instance-wide audit |
|
| sequences → count/search variants → region-filtered diversity |
Resources — read-only endpoints a client can fetch:
Resource | Contents |
| categorised catalog of all tools with their EDAM operation/topic tags |
| 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 |
|
| import DArTseq/VCF, then the full QC + audit and a clean/not-clean judgement |
|
| diversity + structure + relatedness (PCA, structure, kinship, tree; optional by-group/Fst) |
|
| full QC suite on an imported run → go/no-go verdict |
|
| no-arg instance survey + health check |
|
| 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, importreport_snps.xlsxintoMYDBreusing 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_qualityRuns are ranked BROKEN / SUSPECT / OK with reasons, and the full table lands inimport_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_rate→qc_heterozygosity→qc_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_summary→diversity_pca→diversity_structure→diversity_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.tsvgrouped bypopulation, 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 |
|
| per-sample / per-marker call rate + flags |
|
| per-sample Ho, z-score, flag |
|
| IBS pairs ≥ threshold, grouped |
|
| per-marker MAF, missingness, would-remove flags |
|
| per-marker MAF, He, Ho, PIC |
|
| per-sample PC coords (+ optional |
|
| samples × samples GRM |
|
| Fst for every group pair |
|
| per-group He/Ho/Fis/MAF/%poly/allelic richness |
|
| rank, accession, cumulative allele coverage |
|
| per-sample cluster + PC coords |
|
| UPGMA tree (Newick) |
|
| one row per run: status + diagnostics + reasons |
|
| matching variants (id, chrom, pos, ref, alt) |
|
| server-stored per-individual attributes; join on |
|
| per-sample (callset) attributes |
|
| 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

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

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

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

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

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

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 amax_markerscap (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
allelematrixresponse at ~10,000 cells, so at N samples a response holds ~10000/Nmarkers, i.e. requests scale withmax_markers. Keepmax_markersmodest on high-sample-count sets.O(samples²) tools:
diversity_kinship,qc_duplicate_accessions, anddiversity_treebuild 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_qualitytool is bounded bymax_markers×max_samplesper 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_structureis 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 towardk_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_grouptake groups fromgroups_jsonor a metadata TSV rather than querying Gigwa.VCF export downloads the whole variant set regardless of
max_markers; usemethod="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_PASSare set (env or.env).GIGWA_URLmust omit the/restsuffix.VCF import rejected / "not bgzipped". Gigwa needs BGZF, not plain gzip. Recompress:
gunzip -c f.vcf.gz | bgzip > f.bgz.vcf.gz(htslibbgzip).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_groupreport "no groups matched". Check thatid_columnvalues in your TSV match the accession names (or callset ids) in the run.Large set feels slow. Use
method="allelematrix"+ a smallermax_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)→ adartseq_positions.csvreport (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 onUnmapped.import_dartseq(..., positions_csv=...)→ reuse adartseq_positions.csvfrom 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_fastaProject 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]"
pytesttest_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.FastMCPbecomesMCPServer; the transport configuration (json_response,streamable_http_path,transport_security) moved from mutable settings tostreamable_http_app()parameters; and the server version is now a constructor argument, retiring the private_mcp_server.versionwrite. Tools, prompts and resources are unchanged — the registration decorators are identical in v2. Verified with a scriptedinitialize/tools/listhandshake over both stdio and HTTP.Selection-aware export (contributed by @GuilhemSempere, PR #2).
export_genotypesgains region / variant-type / MAF / missing-data filters,individualsandmetadata_fieldsselection, andkeep_on_server;wait=Falsereturns immediately with a download URL, pollable via the newget_export_progressand retrievable withfetch_export_file.list_export_formatsreports 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_valuesandfilter_individuals_by_metadatause the endpoints behind the Gigwa web UI's own attribute filters, andget_germplasmnow tries them before BrAPI — so per-individual attributes are found on builds where BrAPIsearch/germplasmreturns records with noadditionalInfoat all.germplasm_metadata.csvgained asample_namecolumn — 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 ongermplasm_namesilently mis-grouped the majority of samples.sample_namebridges 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 atsearch_callsetsfor sample-level attributes.Hardened export downloads.
fetch_export_filetakes 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
starletteanduvicornexplicitly — the HTTP transport imports both directly rather than relying on them arriving throughmcp.
v1.8.0 — callset-level metadata & richer connection info
New
search_callsetstool. Dumps a run's per-sample (callset) metadata — the resolvedsample_name, the server's rawcallSetName,sampleDbId,callSetDbId, and every key found across the callsets'additionalInfo— tosample_metadata.csv. This is the sample-level counterpart toget_germplasm_metadata.get_germplasm_metadatafalls 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 writesgermplasm_metadata.csv, reporting an empty result only when neither level exposes any attribute.Fallback output joins to the analysis tools.
germplasm_nameholds the resolved sample name (the same ruleGenotypeMatrix.sample_namesuses) andgermplasm_db_idthecallSetDbId(sample_names' fallback key), so either column groups samples indiversity_fst/diversity_by_groupwithout manual renaming. Notemetadata_tsvexpects tab-separated input — convert the CSV first.Pinned the MCP SDK to the 1.x line (
mcp>=1.27,<2). The previousmcp>=1.27began resolving to mcp 2.x on 2026-07-28, which renamedFastMCPtoMCPServerand removedmcp.server.fastmcp— so a freshpip 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_inforeports account permissions. When the build'suserInfosupplies 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 emptyuserInfoare 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 8184serves the MCP StreamableHTTP endpoint at/mcp(stdio stays the default;--stdiois explicit). Adds Docker/entrypoint wiring, DNS-rebinding / allowed-host protection configurable viaGIGWA_MCP_ALLOWED_HOSTS/GIGWA_MCP_ALLOWED_ORIGINS/GIGWA_MCP_DISABLE_DNS_REBINDING_PROTECTION, JSON responses for clients that only advertiseapplication/json, and tolerance for malformednotifications/initializedPOSTs. HTTP mode binds loopback (127.0.0.1) by default; setGIGWA_MCP_HOST=0.0.0.0to 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 defaultGIGWA_USER/GIGWA_PASS, or a named profile'sGIGWA_USER_<PROFILE>/GIGWA_PASS_<PROFILE>— or omitted withanonymous=true. See Configuration.
v1.5.0 — Agent Skills
Agent Skills. A new
skills/folder ships five Agent Skills (the openSKILL.mdstandard) 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 otherSKILL.mddirectories. Skills.
v1.4.16 — anonymous access & fast-fail timeouts
Anonymous access.
GIGWA_USER/GIGWA_PASSare 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 publicgigwa.icarda.orgdemo. 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.serverInfoversion. The server now reports thegigwa-mcppackage version (it previously surfaced the MCP SDK version).
v1.3.4 — tool catalog, EDAM annotations & progress reporting
Tool catalog in
server.py: a centralTOOL_CATALOGannotates all 28 tools with a category and EDAM ontology terms (operation + topic). These ride along as each tool's_metaintools/list, and are published as acatalog://toolsMCP 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 streamnotifications/progressto the client (live import %, "Exporting VCF…", "Fetching genotypes… page k/N", "Parsing…"). Implemented with a@progress_tooldecorator + a smallprogress.notify()bridge, so tool bodies stay synchronous and noContextis 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_variantsandsearch_variantsfilter by genomic region, MAF range, and missing-data fraction via Gigwa's GA4GHvariants/search;search_variantswritesvariant_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(exactvariantSetDbIds),list_sequences(chromosomes/contigs), andexport_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), andgigwa_server_infonow reports the server-side user roles when available.
v1.1.0 — Docker support
Dockerfile(multi-stage) and.dockerignoreto build and run the server as a container launched by an MCP client viadocker 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 toolsabort_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.
| Name | Required | Description | Default |
|---|---|---|---|
| progress_token | Yes | Progress token returned by an import (import::<user>::<uuid>). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 abovemonomorphic_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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| max_samples | No | Cap the number of samples/callsets sampled (allelematrix path). | |
| het_threshold | No | Mean observed-heterozygosity above which a run is flagged BROKEN (mis-called heterozygotes). | |
| variant_set_db_id | No | 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. | |
| complete_call_rate | No | Call-rate above which a run is flagged as suspiciously complete (no missing data). | |
| monomorphic_threshold | No | Monomorphic-marker fraction above which a run is flagged for low informativeness. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Region end position, 1-based inclusive. | |
| start | No | Region start position, 1-based inclusive. | |
| max_maf | No | Maximum minor-allele frequency (0-1). | |
| min_maf | No | Minimum minor-allele frequency (0-1). | |
| reference_name | No | Chromosome/contig name to restrict the search to (see list_sequences). | |
| max_missing_data | No | Maximum per-variant missing-data fraction (0-1). | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| id_column | No | Column in the metadata TSV holding the individual/accession id (default 'individual'). | individual |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| groups_json | No | JSON object mapping each group name to a list of accession names/ids. | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| group_column | No | Column in the metadata TSV holding the group/population label. | |
| metadata_tsv | No | Path to a metadata TSV (import_metadata format) used to define groups. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Explicit core-collection size (number of accessions); overrides fraction. | |
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| fraction | No | Core-collection size as a fraction of all accessions (default 0.1). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 byimport_metadata), keyed onid_column(defaultindividual) and grouped bygroup_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.)
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| id_column | No | Column in the metadata TSV holding the individual/accession id (default 'individual'). | individual |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| groups_json | No | JSON object mapping each group name to a list of accession names/ids. | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| group_column | No | Column in the metadata TSV holding the group/population label. | |
| metadata_tsv | No | Path to a metadata TSV (import_metadata format) used to define groups. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| top_pairs | No | How many most-related sample pairs to report. | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| id_column | No | Column in the metadata TSV holding the individual/accession id (default 'individual'). | individual |
| outlier_sd | No | Flag points more than this many standard deviations from the mean. | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| group_column | No | Column in the metadata TSV holding the group/population label. | |
| metadata_tsv | No | Path to a metadata TSV (import_metadata format) used to define groups. | |
| n_components | No | Number of principal components to compute. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.)
| Name | Required | Description | Default |
|---|---|---|---|
| k_max | No | Largest number of clusters (K) to evaluate. | |
| k_min | No | Smallest number of clusters (K) to evaluate. | |
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | 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. | |
| format | No | 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). | VCF |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| max_maf | No | Maximum minor-allele frequency (0-1). | |
| min_maf | No | Minimum minor-allele frequency (0-1). | |
| timeout | No | Maximum seconds to wait for the export to complete. | |
| individuals | No | 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. | |
| output_path | Yes | Destination file path for the export. | |
| keep_on_server | No | Also leave a copy of the export in the user's Gigwa temp-output area after downloading it here. | |
| metadata_fields | No | Individual metadata columns to embed in the export (from get_germplasm_metadata); omit for none. | |
| max_missing_data | No | Maximum per-variant missing-data fraction (0-1). | |
| variant_set_db_id | Yes | 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. | |
| selected_variant_types | No | Restrict the export to these variant types, ';'-joined (e.g. 'SNP' or 'SNP;INDEL'); omit for all types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Destination file path for the export. | |
| download_url | Yes | Download URL returned by export_genotypes(..., wait=False), once get_export_progress reports the export complete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filters_json | Yes | JSON 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_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| progress_token | Yes | Progress token returned by an import (import::<user>::<uuid>). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target Gigwa base URL to connect to (e.g. https://host:port/gigwa); a bare host:port assumes https. | |
| profile | No | Optional 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. | |
| anonymous | No | Connect without credentials (Gigwa's anonymous public/read-only access). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| run | Yes | Target run name within the project. | |
| wait | No | 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. | |
| module | Yes | Target Gigwa database (module) name. | |
| ploidy | No | Sample ploidy (default 2). | |
| project | Yes | Target project name within the database. | |
| min_mapq | No | Minimum mapping quality for a tag to count as uniquely mapped. | |
| snp_xlsx | No | Path to a DArTseq SNP xlsx report. | |
| technology | No | Free-text genotyping technology label (e.g. 'DArTseq', 'WGS', 'GBS'). | DArTseq |
| silico_xlsx | No | Path to a Silico-DArT xlsx report. | |
| positions_csv | No | Path to a dartseq_positions.csv (from map_dartseq_to_reference) to reuse instead of re-aligning. | |
| reference_fasta | No | Path to a reference genome FASTA or a prebuilt minimap2 .mmi index, for genome-anchoring. | |
| skip_monomorphic | No | Drop non-variant (monomorphic) markers during import. | |
| clear_project_data | No | Replace any existing data in the project before importing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Target Gigwa database (module) name. | |
| tsv_path | Yes | Path to the metadata TSV file. | |
| metadata_type | No | Metadata entity type / id-column name (default 'individual'). | individual |
| validate_first | No | Validate the metadata file before importing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| run | Yes | Target run name within the project. | |
| wait | No | 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. | |
| module | Yes | Target Gigwa database (module) name. | |
| ploidy | No | Sample ploidy (default 2). | |
| project | Yes | Target project name within the database. | |
| vcf_path | Yes | Path to the VCF file (.vcf or .vcf.gz) to import. | |
| technology | No | Free-text genotyping technology label (e.g. 'DArTseq', 'WGS', 'GBS'). | |
| skip_monomorphic | No | Drop non-variant (monomorphic) markers during import. | |
| clear_project_data | No | Replace any existing data in the project before importing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | minimap2 preset (default 'sr' for short reads). | sr |
| backend | No | Aligner backend: 'auto' (minimap2 CLI if available, else mappy), 'cli', or 'mappy'. | auto |
| min_mapq | No | Minimum mapping quality for a tag to count as uniquely mapped. | |
| snp_xlsx | Yes | Path to a DArTseq SNP xlsx report. | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| reference_fasta | Yes | Path to a reference genome FASTA or a prebuilt minimap2 .mmi index, for genome-anchoring. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. | |
| min_marker_call_rate | No | Flag markers with call rate below this (0-1). | |
| min_sample_call_rate | No | Flag samples with call rate below this (0-1). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. | |
| similarity_threshold | No | IBS similarity (0-1) at/above which accessions are grouped as duplicates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| outlier_sd | No | Flag points more than this many standard deviations from the mean. | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | Genotype source: 'vcf' (full export, cached) or 'allelematrix' (paged, server-side subset). | vcf |
| region | No | Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_markers | No | Cap analysis to the first N markers in canonical Gigwa search order; omit to use all. | |
| max_missing | No | Maximum per-marker missing-data fraction (0-1) before a marker is flagged. | |
| maf_threshold | No | Minor-allele-frequency threshold below which markers are flagged. | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Region end position, 1-based inclusive. | |
| start | No | Region start position, 1-based inclusive. | |
| max_maf | No | Maximum minor-allele frequency (0-1). | |
| min_maf | No | Minimum minor-allele frequency (0-1). | |
| output_dir | No | Directory for the output CSV(s) (default ./gigwa_results/<module>/). | |
| max_variants | No | Maximum number of matching variants to retrieve. | |
| reference_name | No | Chromosome/contig name to restrict the search to (see list_sequences). | |
| max_missing_data | No | Maximum per-variant missing-data fraction (0-1). | |
| variant_set_db_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Target Gigwa database (module) name. | |
| tsv_path | Yes | Path to the metadata TSV file. | |
| metadata_type | No | Metadata entity type / id-column name (default 'individual'). | individual |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
26 tool updates
v1.9.1- Changed
audit_import_quality2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
count_variants1 field changed- changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_by_group2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_core_collection2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_fst2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_kinship2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_pca2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_structure2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_summary2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
diversity_tree2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
export_genotypes11 fields changed- changed
Input schema / properties / format / descriptionPrevious 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)." - added
Input schema / properties / individualsAdded 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." +} - added
Input schema / properties / keep_on_serverAdded 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" +} - added
Input schema / properties / max_mafAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Maximum minor-allele frequency (0-1)." +} - added
Input schema / properties / max_missing_dataAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Maximum per-variant missing-data fraction (0-1)." +} - added
Input schema / properties / metadata_fieldsAdded 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." +} - added
Input schema / properties / min_mafAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Minimum minor-allele frequency (0-1)." +} - added
Input schema / properties / regionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Restrict analysis to a genomic window: 'chrom' or 'chrom:start-end' (1-based)." +} - added
Input schema / properties / selected_variant_typesAdded 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." +} - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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." - added
Input schema / properties / waitAdded 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" +}
- Added
fetch_export_file - Added
filter_individuals_by_metadata - Added
get_export_progress - Changed
get_germplasm_metadata1 field changed- changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
import_dartseq1 field changed- changed
Input schema / properties / wait / descriptionPrevious 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."
- Changed
import_vcf1 field changed- changed
Input schema / properties / wait / descriptionPrevious 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."
- Added
list_export_formats - Added
list_metadata_values - Changed
list_sequences1 field changed- changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
qc_call_rate2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
qc_duplicate_accessions2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
qc_heterozygosity2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Changed
qc_maf_filter2 fields changed- changed
Input schema / properties / max_markers / descriptionPrevious 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." - changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
- Added
search_callsets - Changed
search_variants1 field changed- changed
Input schema / properties / variant_set_db_id / descriptionPrevious 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."
1 tool update
v1.6.0- Added
gigwa_connect
28 tool updates
v1.4.16- First observed
abort_import - First observed
audit_import_quality - First observed
count_variants - First observed
diversity_by_group - First observed
diversity_core_collection - First observed
diversity_fst - First observed
diversity_kinship - First observed
diversity_pca - First observed
diversity_structure - First observed
diversity_summary - First observed
diversity_tree - First observed
export_genotypes - First observed
get_germplasm_metadata - First observed
get_import_progress - First observed
gigwa_server_info - First observed
import_dartseq - First observed
import_metadata - First observed
import_vcf - First observed
list_content - First observed
list_sequences - First observed
list_variant_sets - First observed
map_dartseq_to_reference - First observed
qc_call_rate - First observed
qc_duplicate_accessions - First observed
qc_heterozygosity - First observed
qc_maf_filter - First observed
search_variants - First observed
validate_metadata
TDQS
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.
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.
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.
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
Related MCP Connectors
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
MCP gateway federating 22 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseCqualityCmaintenanceAn MCP server that enables single-cell RNA sequencing analysis through natural language, supporting data processing, visualization, and analysis tasks without requiring coding knowledge.5212BSD 3-Clause
- FlicenseNot gradedqualityDmaintenanceAn MCP Server that provides access to Google Cloud Life Sciences API, enabling users to run biomedical workloads in the cloud through natural language interactions.-
- AlicenseNot gradedqualityCmaintenanceAn 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.16BSD 3-Clause
- FlicenseNot gradedqualityDmaintenanceMCP server for querying BV-BRC biological data, submitting analysis jobs (assembly, annotation, BLAST, etc.), and managing workspace files via natural language.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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