Skip to main content
Glama
musharna

plant-genomics-mcp

by musharna

🌱 plant-genomics-mcp

50 tools for plant-genomics locus lookup over the Model Context Protocol — 28 single-locus + 1 motif lookup + 1 region query + 1 variant annotator + 1 gene-set enrichment + 1 BLAST search + 12 parallel-batch + 5 cross-source synthesis variants. Free, public sources: Ensembl Plants, Phytozome BioMart, UniProtKB, Europe PMC, QuickGO, Planteome, PlantCyc/PMN, g:Profiler, NCBI BLAST, Gramene, JASPAR, KEGG, STRING-DB, ATTED-II, ThaleMine, and BAR (Bio-Analytic Resource for Plant Biology).

PyPI CI Docker Python License Glama DOI

📦 Install

# Zero-install — uv fetches and runs it on demand
claude mcp add plant-genomics --scope local -- uvx plant-genomics-mcp
# pipx — installs the CLI onto your PATH
pipx install plant-genomics-mcp
claude mcp add plant-genomics --scope local -- plant-genomics-mcp

# GHCR Docker image
docker pull ghcr.io/musharna/plant-genomics-mcp:latest
claude mcp add plant-genomics --scope local -- \
  docker run --rm -i ghcr.io/musharna/plant-genomics-mcp:latest

# From source
git clone https://github.com/musharna/plant-genomics-mcp.git
cd plant-genomics-mcp
python -m venv .venv && .venv/bin/pip install -e .
claude mcp add plant-genomics --scope local -- "$(pwd)/.venv/bin/plant-genomics-mcp"

Related MCP server: gwas-mcp

💬 Try it

Once connected, ask Claude a plain-language question — you don't have to name any tool or remember the chain:

"Tell me everything about the Arabidopsis gene AT1G01010 — its function, GO terms, KEGG pathways, protein-interaction partners, and recent papers."

Claude fans out across Ensembl Plants, UniProt, QuickGO, KEGG, STRING-DB, and Europe PMC in a single turn and hands back one synthesized answer. Swap in any locus and pass organism= for cross-species — e.g. rice Os01g0100100 (oryza_sativa) — and it routes to the right backends automatically.

🛠️ Tools

50 tools across 23 backends — Ensembl Plants, Phytozome BioMart, UniProtKB, Europe PMC, QuickGO, Planteome, PlantCyc/PMN, g:Profiler, AlphaFold DB, PDBe, InterPro, JASPAR, PANTHER, OrthoDB, AraGWAS, 1001 Genomes, NCBI BLAST, Gramene, KEGG, STRING-DB, ATTED-II, ThaleMine, BAR. 28 single-locus + 1 motif lookup + 1 region query + 1 variant annotator + 1 gene-set enrichment + 1 BLAST search + 12 parallel-batch + 5 cross-source synthesis. Most take a TAIR-style locus (e.g. AT1G01010) plus optional organism= (slug / scientific name / common name / NCBI taxid — 12-plant curated coverage matrix at the pgmcp://organisms/coverage MCP resource). All publish JSON outputSchema, EDAM ontology tags, and behaviour annotations — every tool is readOnlyHint + openWorldHint, so hosts can surface them without a destructive-action confirmation prompt.

#

Category

Tool

What it does

1

Gene metadata (live)

ensembl_plants_lookup_locus

Fetches gene record from Ensembl Plants REST (any plant species).

2

Cross-references (live)

get_gene_xrefs

Fetches cross-DB references (UniProt, NCBI Gene, TAIR, GO, …) from Ensembl.

3

Gene metadata (live)

phytozome_lookup_locus

Fetches gene record from Phytozome BioMart (any Phytozome proteome).

4

Protein (live)

resolve_locus_to_uniprot

Resolves a locus to its UniProtKB record (Swiss-Prot preferred, TrEMBL OK).

5

Literature (live)

locus_literature

Searches Europe PMC for papers mentioning the locus (free, no API key).

6

GO annotations (live)

locus_go_annotations

Fetches QuickGO GO annotations (locus → UniProt → QuickGO).

7

Sequence search (live)

blast_sequence

NCBI BLAST URLAPI — async Put/Get polling with progress notifications.

8

Homology (live)

gramene_homologs

Fetches Gramene v69 homology entries (ortholog / paralog) with gene_tree_id.

9

Pathways (live)

kegg_pathways

Fetches KEGG pathway memberships. 7 organisms: Arabidopsis (ath:, native AGI), + rice (osa:), maize (zma:), soybean (gmx:), barley (hvg:), poplar (pop:), brachypodium (bdi:) bridged via Ensembl → Entrez ID.

10

Interactions (live)

string_interactions

Fetches STRING-DB first-neighbor interaction partners with per-channel score.

11

Coexpression (live)

atted_coexpression

Fetches ATTED-II Ath-u.c4-0 top-N coexpression neighbors with z-scores.

12

Curator summary (live)

bar_gene_summary

Fetches BAR ThaleMine + GAIA-aliases curator summary for an Arabidopsis locus.

13

Expression (live)

bar_efp_expression

Fetches BAR eFP-Browser expression profile (mean ± SD per tissue) for a locus.

14

Interactions (live)

bar_aiv_interactions

Fetches BAR AIV interaction partners (Arabidopsis + rice) with confidence + papers.

15

Curator summary (live)

tair_locus_info

Silent upgrade — alias of bar_gene_summary. MCP tool name preserved for clients.

16

Metabolism (live)

plantcyc_locus_info

Walks gene → enzyme → reactions → PlantCyc/PMN pathways (free BioCyc web-services API). The metabolic-pathway view KEGG/GO lack; found=false for non-enzymatic genes. 11 species have a PGDB.

17

Sequence (live)

get_sequence

Fetches a locus's sequence (genomic / cds / cdna / protein) from Ensembl /sequence/id — the fetch half of lookup → fetch → BLAST; feed sequence to blast_sequence.

18

Region query (live)

ensembl_region_query

Lists gene/transcript/cds/exon features overlapping a genomic interval (chr:start-end) via Ensembl /overlap/region — "what's in this QTL interval" without a per-locus lookup.

19

Enrichment (live)

go_enrichment

GO + KEGG over-representation for a gene list via g:Profiler g:GOSt — "what is my DE / co-expression set enriched for?" Reports unmapped loci; optional custom background. All 12 organisms.

20

Plant ontology (live)

locus_plant_ontology

Plant Ontology (anatomy / dev-stage) + Trait Ontology annotations for a locus via Planteome (Solr) — the plant-specific ontologies GO doesn't cover. by_ontology rollup; taxon-filtered. Strong for 6 species.

21

Structure (live)

alphafold_structure

AlphaFold DB predicted 3D model for a locus (locus → UniProt → model): global mean pLDDT, per-band confidence, modelled span, and mmCIF / PDB / PAE URLs. found=false when no model is deposited. All 12 organisms.

22

Structure (live)

experimental_structures

PDBe experimentally-solved (X-ray / cryo-EM / NMR) structures for a locus (locus → UniProt): best-first PDB id, chain, method, resolution, coverage, residue span. found=false when none deposited (common for plants). All 12 organisms.

23

Domains (live)

interpro_domains

InterPro domain / family architecture (locus → UniProt): each entry's accession, name, type, source_database (Pfam included), integrated InterPro id, and residue spans, plus a count_by_type rollup. All 12 organisms.

24

TF motifs (live)

tf_binding_motifs

JASPAR curated TF DNA-binding profiles for a locus (locus → UniProt → symbol search, then UniProt-confirmed): matrix id, TF class/family, assay type (SELEX / ChIP-seq / PBM / DAP-seq), IUPAC consensus, PubMed refs, logo URL. Fuzzy name hits for other genes are quarantined in name_only_matches. Arabidopsis-heavy coverage.

25

TF motifs (live)

jaspar_motif

One JASPAR profile by matrix id (e.g. MA0570.1, or MA0570 for the newest version) including the raw position-frequency matrix — the drill-down companion to tf_binding_motifs.

26

Interactions (live)

experimental_interactions

ThaleMine CURATED EXPERIMENTAL interaction partners (BioGRID / IntAct / PSI-MI) for an Arabidopsis locus — per partner: detection method (two hybrid, pull down, ...), PSI-MI relationship type, physical vs genetic, source DB, PubMed IDs, and an evidence count. The experimental counterpart to string_interactions (predicted / text-mined). Arabidopsis only.

27

Function (live)

locus_gene_rifs

ThaleMine curated GeneRIF statements — one-sentence, manually curated descriptions of what the gene does, each tied to a PubMed ID (HY5 has 114). Citable functional context that GO terms and raw abstracts don't provide. Arabidopsis only.

28

Variation (live)

locus_variants

Natural (EVA/dbSNP) variants overlapping a locus's genomic span via Ensembl /overlap/region — id, source, consequence class, alleles, clinical significance. variant_count + truncated. All 12 organisms.

29

Variation (live)

vep_annotate

Ensembl VEP consequence prediction for a variant (region + allele, not locus) — most-severe consequence + per-transcript SO terms, IMPACT, SIFT/PolyPhen. All 12 organisms.

30

Orthology (live)

panther_family

PANTHER protein family + subfamily (id + name), GO terms by aspect, protein class, and pathways. found=false when unclassified. All 12 organisms.

31

Orthology (live)

orthodb_orthologs

OrthoDB ortholog group (name, evolutionary rate) + cross-species member genes at the Viridiplantae level. organism_count + truncated. All 12 organisms.

32

Diversity (live)

aragwas_associations

AraGWAS genome-wide association hits per locus — score, MAF, SNP effect, phenotype/study. Arabidopsis-only.

33

Diversity (live)

arabidopsis_natural_variation

1001 Genomes natural-variation SNP effects across 1135 accessions — chr, position, effect, impact, amino-acid change, transcript + gene span. Arabidopsis-only.

34

Batch (live)

batch_* (twelve variants)

Parallel per-locus fanout for tools 1–6, 8–12, 14. Up to 50 loci per call.

35

Synthesis (live)

*_synth / consensus_homologs (four)

Compose 2–5 backends in parallel, return a SynthesisEnvelope with per-step status.

36

Synthesis (live)

gene_report

One-shot "tell me about this gene" dossier — annotation + xrefs + protein + domains + GO + KEGG + STRING + literature composed into a rendered Markdown result.markdown (+ structured result.sections).

⚡ Quickstart

After install, the simplest call returns the Ensembl Plants record for NAC001 — the canonical worked example used throughout examples/:

// arguments
{ "locus": "AT1G01010" }

// result (truncated)
{
  "id": "AT1G01010",
  "organism": "arabidopsis_thaliana",
  "display_name": "NAC001",
  "biotype": "protein_coding",
  "seq_region_name": "1",
  "start": 3631,
  "end": 5899,
  "strand": 1,
  "assembly_name": "TAIR10",
  "description": "NAC domain containing protein 1 ..."
}

Cross-species — pass organism=:

{ "locus": "Os01g0100100", "organism": "oryza_sativa" }

In Claude Code, the same prompt fans out across Ensembl, UniProtKB, and Europe PMC in a single turn (animated demo):

Full per-tool walkthroughs (with real upstream-API transcripts) live in examples/:

Walkthrough

Coverage

gene_report_AT1G01010.md

One-shot Markdown gene dossier — 7 backends composed, with graceful KEGG degradation.

analyze_locus_AT1G01010.md

Ensembl → xrefs → UniProt → Europe PMC → QuickGO chain (5 tools).

find_homologs_AT1G01010_NAC_domain.md

BLAST + per-hit UniProt enrichment.

biological_context_AT1G01010.md

Gramene + KEGG + UniProt + STRING + ATTED-II (5 tools).

v0.8_synthesis_walkthrough.md

All 4 v0.8 synthesis tools (*_synth + consensus_homologs) on the same locus.

cross_organism_walkthrough.md

v0.9 multi-organism resolver against rice + maize — per-backend routing on PyPI v1.0.4.

📚 Resources & prompts

Clients discover them via resources/list and prompts/list.

Resources (resources/read):

URI

What

pgmcp://cache/stats

Per-backend TTLCache rollup — {hits, misses, size} for each live backend.

pgmcp://organisms/phytozome

Slug → Phytozome organism_id map.

pgmcp://backends/status

Per-backend liveness rollup — name, base_url, kind, subscription_gated.

pgmcp://organisms/coverage

Markdown table of all 12 supported plants × 9 ID slots (ncbi_taxid / ensembl / phytozome / string / europe_pmc / kegg / atted / gprofiler / plantcyc).

Prompts (prompts/get):

Name

Required

Optional

Chains

analyze_locus

locus

organism (default arabidopsis_thaliana)

Ensembl → xrefs → UniProt → Europe PMC → QuickGO.

find_homologs

sequence

program (default blastp)

blast_sequence → per-hit resolve_locus_to_uniprot for UniProt-shaped accessions.

biological_context

locus

top_n (default 10)

Gramene → KEGG → UniProt → STRING → ATTED-II.

🔌 Transports

Transport

How to launch

stdio (default)

plant-genomics-mcp (after install) or via Docker above

streamable-HTTP

plant-genomics-mcp-http — POST JSON-RPC at http://host:port/mcp

The HTTP transport is stateless and emits JSON responses by default — the right shape for registry indexers and remote hosting.

Hosted endpoint

A small personal demo runs at:

https://mjarnoldgt76.tail86d19d.ts.net/mcp

Intended for registry indexers, one-off evaluation, and quick interactive testing — not for production workloads. No SLA, no uptime commitment, URL may change without notice (single laptop on a residential connection).

# liveness probe
curl https://mjarnoldgt76.tail86d19d.ts.net/healthz
# {"status":"ok"}

# connect from Claude Code
claude mcp add --transport http plant-genomics-mcp \
  https://mjarnoldgt76.tail86d19d.ts.net/mcp

For anything beyond casual evaluation, self-host. The HTTP transport is the same binary; self-hosting buys deterministic uptime, your own bearer-token gate (PLANT_GENOMICS_MCP_HTTP_TOKEN), and NCBI BLAST etiquette under your own contact email.

⚙️ Configuration

Stdio needs no configuration. The two env vars that matter:

Variable

When

Effect

PLANT_GENOMICS_MCP_HTTP_TOKEN

HTTP transport only

Bearer token for /mcp; must be ≥32 chars or the HTTP server aborts at startup. Generate openssl rand -hex 32.

PLANT_GENOMICS_MCP_NCBI_EMAIL

If you use BLAST

NCBI etiquette contact. Unset → placeholder + per-call warning; NCBI may throttle.

Variable

Default

Effect

PLANT_GENOMICS_MCP_HTTP_HOST

127.0.0.1

HTTP bind address.

PLANT_GENOMICS_MCP_HTTP_PORT

8765

HTTP TCP port.

PLANT_GENOMICS_MCP_HTTP_MAX_BODY

2097152 (2 MiB)

Reject POSTs with Content-Length larger than this.

PLANT_GENOMICS_MCP_HTTP_STATELESS

1

0 keeps per-client session state (SSE-style).

PLANT_GENOMICS_MCP_HTTP_JSON

1

0 switches the response shape to streaming SSE events.

PLANT_GENOMICS_MCP_BLAST_CONCURRENCY

2

Max in-flight BLAST searches per process (NCBI per-IP rate limit).

PLANT_GENOMICS_MCP_CACHE_TTL

600

Per-backend TTL+LRU cache entry lifetime, in seconds. 200-only.

PLANT_GENOMICS_MCP_CACHE_SIZE

256

Max entries per backend before LRU eviction.

PLANT_GENOMICS_MCP_CACHE_DISABLED

unset

Any non-empty value makes every cache a no-op.

The cache is process-local — restart the server to drop all entries. Long-running calls (retry storms, multi-second Phytozome BioMart POSTs) emit MCP notifications/progress over the active session; clients opt in via progressToken in the request _meta.

⚠️ Error model

All live tools raise PlantGenomicsError subclasses; the MCP SDK stringifies them into the wire content with a [ClassName] prefix so clients can route on failure kind without parsing the message:

Wire prefix

When

[NotFoundError]

404 / empty BioMart row / invalid locus identifier

[RateLimitError]

429 retry budget exhausted — back off and retry

[UpstreamUnavailableError]

5xx past retry budget — service outage, try a peer backend

[PlantGenomicsError]

Other (BioMart Query ERROR: body, unexpected column count, etc.)

Batch tools return {tool, count, results, errors} where results[locus] is the same shape as the single-locus tool and errors[locus] is the same [ClassName] message string. Ensembl's batch uses the native POST /lookup/id endpoint (one HTTP round-trip); everything else fans out via asyncio.gather.

🧪 Development

.venv/bin/pip install -e '.[dev]'                         # or: uv sync --extra dev
.venv/bin/pytest -q                                       # unit tests
PLANT_GENOMICS_MCP_LIVE=1 .venv/bin/pytest -q             # adds live network probes
PLANT_GENOMICS_MCP_STDIO_SMOKE=1 .venv/bin/pytest -q      # adds stdio smoke
.venv/bin/ruff check .

With uv, pass --extra dev — a bare uv sync omits (and removes) the test dependencies. See CONTRIBUTING.md.

CI runs the unit suite + the stdio smoke on every push/PR (matrix: Python 3.11, 3.12, 3.13, 3.14 — the full requires-python range). The live-network gate is not run in CI to avoid flakes from upstream availability.

Scientific validation / drift detection. scripts/benchmark_annotations.py drives a curated corpus of canonical loci (27, spanning all 12 organisms) through every backend + synthesis pipeline and compares results to a frozen baseline, emitting PASS / DRIFT / FAIL plus cross-source consistency invariants. It's how upstream data drift is caught. A scheduled GitHub Actions workflow (.github/workflows/benchmark.yml) runs it weekly and pages on a confirmed regression. Operator guide: docs/benchmarking.md.

.venv/bin/python scripts/benchmark_annotations.py        # full live sweep (~3-5 min)

See CHANGELOG.md for release notes, including the v0.8 → v0.9 species=/organism_id=organism= migration and the v1.0.1 HTTP-token enforcement change.

MCP registry

Listed in the official MCP registry under the namespace below (ownership-verification token for mcp-publisher):

mcp-name: io.github.musharna/plant-genomics-mcp

License

MIT — see LICENSE. Underlying services (Ensembl Plants, Phytozome, TAIR, PlantCyc, BAR) have their own terms of use; consult each before bulk querying.

Available Tools

50 tools
alphafold_structureAlphaFold: Predicted StructureA
Read-onlyIdempotent

Fetch the AlphaFold DB predicted-structure summary for a locus (alphafold.ebi.ac.uk; free, no key). Resolves the locus → UniProt accession, then returns the predicted model's global mean pLDDT confidence, the per-band pLDDT distribution, modelled residue span, latest model version, and mmCIF / PDB / PAE download URLs. A valid protein with no deposited model returns found=false (a normal outcome, not an error); a locus with no UniProt entry raises a typed NotFoundError. Works for all 12 organisms (UniProt-keyed). Complements resolve_locus_to_uniprot (sequence-level) with the structure-level view. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
geneNoGene name from UniProt
foundYesTrue if a predicted model exists
locusYes
cif_urlNommCIF model download URL
pdb_urlNoPDB model download URL
organismNoOrganism scientific name
accessionYesResolved UniProt accession
mean_plddtNoGlobal mean pLDDT confidence (0–100)
descriptionNoUniProt protein description
plddt_bandsNoFraction of residues per confidence band
model_createdNoModel creation date (ISO 8601)
pae_image_urlNoPredicted-aligned-error image URL
residue_rangeNoModelled residue span {start, end}
latest_versionNoLatest AlphaFold model version
model_entity_idNoe.g. AF-Q9SZ92-F1

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate readOnly, idempotent, non-destructive, and open-world. The description adds: external database access (alphafold.ebi.ac.uk), free no key requirement, and specific error handling (found=false vs NotFoundError). No contradictions.

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

Conciseness5/5

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

The description is approximately 100 words, front-loaded with the main action, and each sentence adds value. No redundant or vague statements.

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

Completeness5/5

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

Given the output schema exists, the description covers all necessary aspects: source, free usage, workflow, edge cases, default organism, and sibling relation. It is complete and informative.

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

Parameters5/5

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

Schema coverage is 100%, baseline 3. The description adds concrete examples for locus (AT4G09760, Os01g0100100) and explains organism accepts slugs, names, or taxids. This provides significant extra meaning beyond the schema.

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

Purpose5/5

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

The description clearly states it fetches the AlphaFold DB predicted-structure summary for a locus, specifying the source and that it's free. It distinguishes from the sibling tool resolve_locus_to_uniprot by noting it provides the structure-level view, complementing the sequence-level view.

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

Usage Guidelines4/5

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

The description explains the workflow (resolves locus to UniProt, returns specific data), handles edge cases (found=false for missing model, NotFoundError for invalid locus), and states the default organism. It mentions the sibling tool relation, but lacks explicit 'use this when' guidance.

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

analyze_locus_synthSynthesis: Locus OverviewA
Read-onlyIdempotent

Synthesis: one-call equivalent of the analyze_locus prompt. Resolves a locus through Ensembl Plants, then fans out to xrefs, UniProt, Europe PMC, and QuickGO in parallel. Returns a SynthesisEnvelope with per-step status and a reconciled summary flagging cross-source name/accession disagreements.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesLocus name, e.g. AT1G01010
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesSynthesis tool name, e.g. analyze_locus_synth
inputYesEchoed input arguments
stepsYesPer-backend execution rows
resultNoComposed cross-source result; None if root step failed
elapsed_sYesTotal orchestrator wall time
started_atYesISO 8601 UTC timestamp

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. Description adds detailed behavior: resolves via Ensembl Plants, fans out to xrefs, UniProt, Europe PMC, QuickGO in parallel, and returns a SynthesisEnvelope with per-step status and cross-source disagreement flag.

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

Conciseness5/5

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

Two well-structured sentences: first summarizes purpose, second details process and output. No unnecessary words.

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

Completeness5/5

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

Given the tool's complexity (synthesis of multiple lookups) and the presence of an output schema, the description adequately explains the workflow, parallel fan-out, and the nature of the returned envelope including conflict detection.

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

Parameters3/5

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

Schema coverage is 100% with both parameters documented. Description does not add new meaning beyond schema, so baseline 3 applies.

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

Purpose5/5

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

Clearly states it is a one-call equivalent of the analyze_locus prompt, resolves a locus, fans out to multiple sources, and returns a SynthesisEnvelope. Distinguishes itself from sibling tools that target individual sources.

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

Usage Guidelines3/5

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

Implies usage as a comprehensive replacement for multiple lookups but provides no explicit when-to-use or when-not-to-use guidance compared to sibling tools like get_gene_xrefs or resolve_locus_to_uniprot.

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

arabidopsis_natural_variation1001 Genomes: Natural VariationA
Read-onlyIdempotent

Fetch 1001 Genomes natural-variation SNP effects for an Arabidopsis locus (tools.1001genomes.org; free, no key) — the variation observed across 1135 resequenced natural accessions. Returns per-SNP effect rows (chromosome, position, accession id, effect, impact, amino-acid change, transcript) plus the gene's genomic span. variant_count is the true row total even when capped. ARABIDOPSIS-ONLY — any other organism raises OrganismNotSupported. Defaults to arabidopsis_thaliana.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01060 (a bare AGI is transcript-scoped to .1)
organismNoArabidopsis only (the 1001 Genomes panel is A. thaliana)arabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue once the effects endpoint returned 200
locusYes
regionNoGenomic span, e.g. 'Chr1:33666..37840'
organismYesAlways arabidopsis_thaliana
returnedYesEffect rows returned (post-cap)
variantsNoPer-effect {chr, position, accession_id, effect, impact, amino_acid_change, …}
truncatedYesTrue if the effect list was capped
transcriptYesTranscript-scoped gene id used (e.g. AT1G01060.1)
variant_countYesTotal effect rows (pre-cap)

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnly, idempotent), it adds behavioral details: free, no key, per-SNP return, variant_count behavior, scoping of locus with .1, and error condition. Adds significant value.

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

Conciseness5/5

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

Description is concise and well-structured, front-loading purpose. Every sentence adds essential information with no redundancy.

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

Completeness5/5

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

Given full schema coverage, annotations, and output schema presence, the description is complete. It covers purpose, usage constraints, parameter details, and return structure adequately.

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

Parameters4/5

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

Schema coverage is 100%, so baseline 3. The description adds details: locus expects AGI format with transcript scoping, organism defaults and is Arabidopsis-only. Adds meaningful guidance beyond schema.

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

Purpose5/5

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

The description clearly states it fetches '1001 Genomes natural-variation SNP effects for an Arabidopsis locus', with a specific verb and resource. It distinguishes from siblings by focusing on variation data, unlike motif, homolog, expression tools.

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

Usage Guidelines4/5

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

It explicitly states the tool is Arabidopsis-only and provides the default organism. It does not directly compare to siblings but the context makes it clear when to use (for variation). No explicit when-not-to-use, but strong context.

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

aragwas_associationsAraGWAS: GWAS AssociationsA
Read-onlyIdempotent

Fetch AraGWAS genome-wide association study hits for an Arabidopsis locus (aragwas.1001genomes.org; free, no key). Returns each significant SNP association overlapping the gene with effect size (score), minor-allele frequency, the SNP's predicted molecular effect (impact, amino-acid change), and the phenotype/study it came from. association_count is the true total even when page-capped. ARABIDOPSIS-ONLY — any other organism raises OrganismNotSupported. Defaults to arabidopsis_thaliana.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01060
organismNoArabidopsis only (the 1001 Genomes panel is A. thaliana)arabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue once the associations endpoint returned 200
locusYes
organismYesAlways arabidopsis_thaliana
returnedYesAssociations returned (post page-cap)
truncatedYesTrue if pagination was capped
associationsNoPer-hit {score, maf, mac, snp{…}, study{…}}
association_countYesTotal associations (pre-cap)

TDQS

A4.2/5.0
Behavior4/5

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

The description adds value beyond annotations by detailing the returned data (effect size, minor-allele frequency, molecular effect, phenotype/study) and noting that 'association_count is the true total even when page-capped.' It also warns about OrganismNotSupported. No contradiction with annotations (readOnlyHint, idempotentHint, etc.).

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

Conciseness5/5

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

Two highly informative sentences with no wasted words. First sentence states purpose and source, second sentence details output fields and constraints. Structure is clear and front-loaded.

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

Completeness4/5

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

Given the presence of an output schema, the description does not need to explain return values. It covers the source, free nature, organism restriction, output fields, and page-capping caveat. Complete enough for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100% (both parameters described). The description reinforces the organism default and restriction but does not add new details about the 'locus' parameter beyond the schema. Baseline of 3 is appropriate as description adds marginal value.

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

Purpose5/5

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

The description specifies a specific verb ('Fetch'), resource ('AraGWAS genome-wide association study hits'), and target ('Arabidopsis locus'). It clearly distinguishes itself from sibling tools, as none of the siblings specifically perform GWAS association retrieval for Arabidopsis.

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

Usage Guidelines4/5

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

The description states the tool is 'ARABIDOPSIS-ONLY' and defaults to arabidopsis_thaliana, providing clear context for when to use and what organism to input. However, it does not explicitly mention alternatives or when not to use, though no sibling tool overlaps in function.

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

atted_coexpressionATTED-II: CoexpressionA
Read-onlyIdempotent

Fetch co-expressed gene neighbors from ATTED-II (atted.jp, API v5) for a plant locus. Returns top_n neighbors with target locus + NCBI Entrez gene ID + z-score (higher = stronger coexpression). The ATTED-II release (e.g. Ath-u.c4-0 for Arabidopsis, Osa-u.c1-0 for rice) is resolved per-organism; wheat, sorghum, barley, poplar, and brachypodium have no published release and raise OrganismNotSupported. Pairs with string_interactions to surface high-confidence functional partners (interactors that are also coexpressed).

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesPlant locus, e.g. AT1G01010 (Arabidopsis) or Os01g0100100 (rice)
top_nNo
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
neighborsYes
atted_releaseYesATTED-II DB identifier, e.g. Ath-u.c4-0 (release version included)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral details: the ATTED-II release is resolved per-organism, and unsupported organisms raise OrganismNotSupported. It also describes the output: locus, Entrez ID, and z-score ranking.

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

Conciseness5/5

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

Three sentences, each adding necessary information: action, return format, organism resolution, and pairing hint. No filler or repetition.

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

Completeness5/5

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

Given 3 parameters (1 required) with 67% schema coverage and an output schema, the description covers the core functionality, supported organisms, error behavior, and integration with a sibling tool. It is fully adequate for an agent to use correctly.

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

Parameters4/5

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

Schema description coverage is 67% (locus and organism documented). The description adds meaning to top_n by specifying it returns 'top_n neighbors' and clarifies the z-score meaning. This compensation warrants a 4.

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

Purpose5/5

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

The description clearly states the action 'Fetch co-expressed gene neighbors from ATTED-II' and specifies the return format (target locus, Entrez ID, z-score). It also explicitly mentions pairing with string_interactions to identify functional partners, distinguishing it from sibling tools like string_interactions itself.

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

Usage Guidelines4/5

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

The description provides clear context by listing supported organisms and noting that unsupported ones (wheat, sorghum, etc.) raise an OrganismNotSupported error. It also hints at use with string_interactions for high-confidence partners. However, it does not suggest alternative tools for unsupported organisms.

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

bar_aiv_interactionsBAR: Predicted InteractionsA
Read-onlyIdempotent

Fetch BAR AIV (Arabidopsis Interactions Viewer) interactions for an Arabidopsis or rice locus. Dispatches by organism: Arabidopsis returns curated GRN paper refs from /interactions/get_paper_by_agi/{locus} (PubMed ID, title, image, comments, pipe-split tags); rice returns predicted PPI partners from /interactions/rice/{locus} with Pearson co-expression r (pcc), evidence hits, and quality score. The kind field discriminates the response shape (grn_papers vs ppi_predictions). Rice requires the MSU LOC_Os* locus format — RAP-DB Osg is rejected upstream. Only Arabidopsis and rice are supported by AIV; other organisms raise OrganismNotSupported.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesAGI locus (AT1G01010) for Arabidopsis or MSU locus (LOC_Os01g01080) for rice
organismNoarabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYesDiscriminator: grn_papers (Arabidopsis) or ppi_predictions (rice)
countYesTotal rows returned (len of papers or partners)
locusYes
papersNoGRN paper refs (populated when kind=grn_papers)
organismYes
partnersNoPPI predictions (populated when kind=ppi_predictions)
source_urlYesBAR AIV endpoint URL for traceability

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds organism dispatch logic, response shape differences, and format requirements for rice. No contradictions, and adds significant behavioral context.

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

Conciseness4/5

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

Description is front-loaded with core purpose and is well-structured. Every sentence adds value, though it is somewhat lengthy due to necessary detail. No redundancy.

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

Completeness5/5

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

Given the complexity (organism-specific endpoints, response shapes, format requirements, error handling), the description covers all needed context. Output schema exists, so return values need not be detailed.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for both parameters. The description adds meaning by explaining locus format (AGI vs. MSU) and the effect of the organism parameter on the response shape, complementing the schema.

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

Purpose5/5

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

The description states it fetches BAR AIV interactions for Arabidopsis or rice locus, specifying endpoints and response shapes per organism. It clearly distinguishes from siblings by organism-specific behavior.

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

Usage Guidelines5/5

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

Explicitly says when to use (Arabidopsis or rice locus) and when not to (other organisms raise OrganismNotSupported). Also notes rice requires MSU format, rejecting RAP-DB. Provides clear context and exclusions.

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

bar_efp_expressionBAR: eFP ExpressionA
Read-onlyIdempotent

Fetch BAR/eFP world-map natural-variation expression for an Arabidopsis locus. Wraps the world-eFP view at /microarray_gene_expression/world_efp/arabidopsis/{locus} — returns expression across ~36 ecotypes (Bay-0, Col-0, Cvi-1, Ler-2, ...) with per-replicate values, control samples, collection lat/lng, and a per-ecotype mean computed client-side. Arabidopsis only. BAR is keyless and a Global Core Biodata Resource (2023).

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01010

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
speciesYes
ecotypesYes
probesetNoMicroarray probeset ID, uniform across ecotypes for one gene
source_urlYesBAR world-eFP endpoint URL for traceability
ecotype_countYesNumber of ecotype rows in `ecotypes`

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds behavioral details about the return structure (per-replicate values, control samples, lat/lng, mean) and the data source (wraps a specific endpoint). No contradictions with annotations.

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

Conciseness4/5

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

The description is a single paragraph with the main purpose front-loaded. It is concise but includes necessary context (resource details, data elements, scope). Every sentence adds value.

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

Completeness5/5

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

Given the tool has only one parameter, good annotations, and an output schema (present but not shown), the description covers purpose, scope, data source, and return structure adequately. No gaps for an agent to select or invoke correctly.

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

Parameters4/5

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

Schema coverage is 100% with one parameter (locus) described as 'Arabidopsis AGI locus, e.g. AT1G01010'. The description adds context by specifying that it must be an Arabidopsis locus and provides an example, adding value beyond the schema.

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

Purpose5/5

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

Description clearly states it fetches world-map natural-variation expression data for an Arabidopsis locus from BAR/eFP, specifying the resource and what is returned (expression across ~36 ecotypes with per-replicate values, control samples, lat/lng, mean). This distinguishes it from sibling tools like bar_gene_summary or arabidopsis_natural_variation.

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

Usage Guidelines4/5

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

The description explicitly restricts usage to Arabidopsis and mentions BAR is keyless and a Global Core Biodata Resource, implying open access. However, it does not explicitly contrast with sibling tools or state when to prefer this over alternatives.

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

bar_gene_summaryBAR: Gene SummaryA
Read-onlyIdempotent

Fetch the BAR (Bio-Analytic Resource, U Toronto) merged ThaleMine + GAIA-aliases summary for an Arabidopsis locus. Returns the TAIR curator summary + Araport11 computational description from /thalemine/gene_information/ together with the NCBI Gene ID and cross-DB aliases (RefSeq, UniProt, TIGR locus-model IDs) from /gaia/aliases/. Arabidopsis only — ThaleMine carries taxon 3702 plus yeast/human for ortholog cross-reference. BAR is keyless and a Global Core Biodata Resource (2023); replaces the v0.9 subscription-gated tair_locus_info stub for the curator-summary use case.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01010

Output Schema

ParametersJSON Schema
NameRequiredDescription
agiNoAGI primary identifier echoed by ThaleMine, e.g. "AT1G01010"
locusYes
symbolNoGene symbol, e.g. "NAC001"
aliasesNoCross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded.
speciesYes
synonymsNoTAIR aliases (CSV from Gene.tairAliases, split on commas + stripped)
full_nameNoGene name from ThaleMine
source_urlYesThaleMine endpoint URL for traceability
ncbi_gene_idNoNCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref
tair_locus_idNoTAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935"
curator_summaryNoGene.tairCuratorSummary — the TAIR-curated functional summary prose
brief_descriptionNoGene.briefDescription — short blurb (often same as full_name)
tair_short_descriptionNoGene.tairShortDescription — TAIR-specific short description
computational_descriptionNoGene.tairComputationalDescription — Araport11-sourced computed description

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds behavioral context: the tool is 'keyless' (no API key required) and a Global Core Biodata Resource (2023), and it replaces a previous subscription-gated stub. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise (two sentences) and front-loaded with the main action. Every sentence adds value: first sentence states purpose and data sources, second sentence adds scope, access, and replacement context. No wasted words.

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

Completeness5/5

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

Given the presence of an output schema, parameter schema with full coverage, and annotations, the description provides sufficient context about the tool's purpose, scope, and behavioral traits. It is complete for a read-only summary tool with clear domain constraints.

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

Parameters3/5

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

The input schema has 100% coverage with a clear description for the single 'locus' parameter ('Arabidopsis AGI locus, e.g. AT1G01010'). The description does not add additional parameter semantic detail beyond the schema, but schema already provides sufficient information.

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

Purpose5/5

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

The description clearly states the tool's purpose: fetching a merged summary for an Arabidopsis locus from BAR's ThaleMine and GAIA-aliases, detailing what data is returned (TAIR curator summary, Araport11 description, NCBI Gene ID, cross-DB aliases). It distinguishes from siblings by mentioning it replaces the old tair_locus_info stub and is Arabidopsis-only.

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

Usage Guidelines4/5

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

The description specifies that the tool is for Arabidopsis loci only ('Arabidopsis only') and is for the 'curator-summary use case.' It does not explicitly state when not to use it or compare with sibling tools, but provides enough context for appropriate use.

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

batch_atted_coexpressionBatch: ATTED-II CoexpressionA
Read-onlyIdempotent

Batch version of atted_coexpression. Up to 50 loci per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYes
top_nNo
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A3.9/5.0
Behavior4/5

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

Description adds specific behavioral constraint (up to 50 loci per call) beyond annotations. Annotations already declare readOnly, idempotent, and non-destructive, so minimal additional disclosure needed.

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

Conciseness4/5

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

Extremely concise single sentence, front-loaded with key information. Could include slightly more detail without harming conciseness.

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

Completeness3/5

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

Adequate for a simple batch tool with output schema present. Minimal description but sufficient given the tool's straightforward nature and rich annotations.

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

Parameters2/5

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

Description provides no parameter information. Schema coverage is only 33% (organism described), and the description does not compensate for the missing parameter semantics for loci and top_n.

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

Purpose5/5

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

Explicitly states it is the batch version of atted_coexpression, with a clear limit of 50 loci per call. This distinguishes it from the single-locus sibling tool.

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

Usage Guidelines4/5

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

Implies usage for batch coexpression queries with multiple loci. Does not explicitly state when not to use or mention alternatives, but the 'batch' prefix in name and description provides clear context.

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

batch_bar_aiv_interactionsBatch: BAR Predicted InteractionsA
Read-onlyIdempotent

Batch variant of bar_aiv_interactions. Fans out per-locus BAR AIV calls in parallel (up to 50 loci); all loci in a single call share the same organism. Each results[locus] is the full single-locus payload (kind=grn_papers for Arabidopsis with papers list, kind=ppi_predictions for rice with partners list).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismNoarabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.2/5.0
Behavior4/5

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

The description adds context beyond annotations: parallel execution, 50-locus limit, organism constraint per call, and the varying result payload per organism (papers vs partners). It does not contradict annotations.

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

Conciseness5/5

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

Two sentences efficiently convey purpose, constraints, and result structure without redundancy. Every sentence adds value.

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

Completeness4/5

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

Given the batch complexity and existing output schema, the description covers parallelism, limit, organism sharing, and result structure. Minor gap: no explicit error handling beyond mentioning errors[locus], but overall sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds that loci are identifiers with success/failure mapping in results and errors, but does not significantly extend schema-provided parameter meanings.

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

Purpose5/5

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

The description clearly states it is a batch variant of bar_aiv_interactions, outlines the parallel fan-out for up to 50 loci, and specifies the result structure per locus. It distinguishes itself from the single-locus sibling by focusing on batch processing.

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

Usage Guidelines4/5

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

The description implies usage when querying multiple loci, noting the constraint that all loci share the same organism. It distinguishes from the single-locus variant but does not explicitly compare with other batch tools or state when not to use it.

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

batch_bar_gene_summaryBatch: BAR Gene SummaryA
Read-onlyIdempotent

Batch variant of bar_gene_summary. Fans out per-locus BAR ThaleMine + GAIA-aliases calls in parallel (up to 50 loci). Each results[locus] is the full single-locus payload (curator summary, computational description, NCBI Gene ID, cross-DB aliases). Arabidopsis only.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false. Description adds behavioral context: fan-out in parallel, up to 50 loci, result structure, and organism restriction. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose and constraints. No extraneous information. Every sentence adds value (batch variant, parallel fan-out, payload summary, organism restriction).

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

Completeness5/5

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

Given that an output schema exists (as per context), the description sufficiently explains return values without needing full schema details. Covers key payload fields and error handling, and includes scope (Arabidopsis) and limits (50 loci).

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

Parameters5/5

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

Schema coverage is 100% with a description for the loci parameter. Description adds meaning about array items and error handling ('Successes land in results[locus]; PlantGenomicsError failures in errors[locus]'), which goes beyond the schema-provided description.

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

Purpose5/5

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

Clearly states it's a batch variant of bar_gene_summary, describes parallel fan-out over up to 50 loci, and specifies the output structure (curator summary, computational description, NCBI Gene ID, cross-DB aliases). Distinguishes from sibling bar_gene_summary by being batch and from other batch tools by specifying the exact per-locus payload.

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

Usage Guidelines4/5

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

Explicitly says 'Batch variant of bar_gene_summary' and 'Arabidopsis only', implying use for multiple loci. Does not explicitly state when not to use (e.g., for single locus), but the context is clear. Provides information about parallel execution and payload structure.

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

batch_ensembl_plants_lookup_locusBatch: Ensembl Plants Locus MetadataA
Read-onlyIdempotent

Batch variant of ensembl_plants_lookup_locus. Uses Ensembl's native POST /lookup/id endpoint — one HTTP round-trip for up to 50 loci, materially cheaper than N parallel GETs. Successes in results[] with the same shape as the single-locus tool. Retries 429/5xx via the shared _http helper (Retry-After capped at 60 s). Misses (loci with no record) still land in errors[] with the [NotFoundError] prefix; the whole batch only fails when the retry budget is exhausted.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.7/5.0
Behavior5/5

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

Discloses retry behavior (429/5xx via _http helper, Retry-After capped at 60s), explains error handling (misses in errors[] with prefix), and notes result shape matches single-locus tool. Adds value beyond annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no redundancy. Every sentence adds value.

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

Completeness5/5

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

Given batch complexity, error handling, and cost benefit, the description is thorough. Output schema exists, annotations cover safety, so all behavioral aspects are addressed.

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

Parameters4/5

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

Schema coverage is 100%, so baseline 3. Description adds that loci max is 50 and clarifies error structure, providing context beyond schema.

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

Purpose5/5

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

Clearly states it's a batch variant of a single-locus tool, uses POST /lookup/id endpoint for up to 50 loci, and highlights cost efficiency. Distinguishes from sibling 'ensembl_plants_lookup_locus'.

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

Usage Guidelines4/5

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

Implicitly guides use for multiple loci via 'batch variant' and 'cheaper than N parallel GETs'. No explicit when-not or alternative mentions, but context is clear.

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

batch_get_gene_xrefsBatch: Gene Cross-ReferencesA
Read-onlyIdempotent

Batch variant of get_gene_xrefs. Fans out per-locus xref lookups over Ensembl Plants in parallel (up to 50 loci). Each results[locus] is the full single-locus shape (count + xrefs[] + by_db rollup).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, open-world, non-destructive behavior. The description adds valuable context: parallel fan-out, 50-locus limit, and the output structure per locus. No contradictions with annotations.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the core identity ('Batch variant of get_gene_xrefs') and then details behavior concisely.

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

Completeness5/5

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

Given the presence of full annotations and an output schema, the description is complete. It covers the batch nature, parallelism, limits, and output shape. No critical missing information for effective tool use.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema; it mentions the loci parameter implicitly but does not elaborate on organism. The parameter semantics are adequately covered by the input schema.

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

Purpose5/5

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

The description clearly identifies this as a batch variant of get_gene_xrefs, describes the parallel fan-out over Ensembl Plants with a max of 50 loci, and specifies the output shape per locus. It effectively distinguishes this tool from the single-locus version.

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

Usage Guidelines3/5

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

The description implicitly suggests use for multiple loci, but lacks explicit guidance on when to use this vs alternatives (e.g., the single-locus get_gene_xrefs or other batch tools). No when-not-to-use or alternative mentions are provided.

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

batch_gramene_homologsBatch: Gramene HomologsA
Read-onlyIdempotent

Batch version of gramene_homologs. Up to 50 loci per call; shares the homology_type filter across all loci. Returns the standard batch envelope (count + results dict + errors dict).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (max 50)
homology_typeNoortholog

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, nondestructive behavior. Description adds return format ('standard batch envelope with count + results dict + errors dict'), providing valuable behavioral details beyond annotations.

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

Conciseness5/5

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

Two sentences with no wasted words; critical information (limit, filter sharing, return envelope) is front-loaded.

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

Completeness5/5

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

All essential aspects are covered: purpose, limits, filter behavior, return envelope. Tool has output schema so return details aren't needed in description.

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

Parameters4/5

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

Schema covers 50% of parameters; description adds sharing behavior for homology_type and reaffirms the 50-loci limit, which is not fully captured in schema descriptions.

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

Purpose5/5

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

Clearly states it's the batch version of gramene_homologs with explicit 50-loci limit and shared homology_type filter, distinguishing it from the single-locus sibling.

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

Usage Guidelines4/5

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

Implicitly guides when to use (multiple loci) by contrasting with 'batch version', but does not explicitly mention when not to use or name the alternative single tool.

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

batch_kegg_pathwaysBatch: KEGG PathwaysA
Read-onlyIdempotent

Batch version of kegg_pathways. Up to 50 loci per call. v1.1.0: only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for other plants and our cross-backend locus contract can't produce those yet, so a non-ath organism= raises OrganismNotSupported before any HTTP fan-out.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYes
organismNoPlant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge landsarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds important behavioral constraints: batch size limit and organism support limitation, including that other organisms raise OrganismNotSupported.

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

Conciseness5/5

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

Two sentences, concise and front-loaded with the purpose. Every sentence adds value: batch nature, limit, and version-specific constraint.

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

Completeness4/5

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

The description covers essential aspects: batch behavior, limits, and organism constraint. With output schema present, return values are handled. It could mention when to prefer batch over single, but the version note adds useful context.

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

Parameters4/5

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

Schema description coverage is 50% (organism parameter described in schema, loci not). The tool description adds meaning for both: 'Up to 50 loci per call' for loci and clarifies organism limitation beyond schema text. It provides valuable context that complements the schema.

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

Purpose5/5

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

The description clearly states it is a batch version of kegg_pathways with a limit of 50 loci, and it specifies the organism constraint. It distinguishes itself from the single-version sibling by being a batch tool.

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

Usage Guidelines4/5

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

The description provides clear usage context: up to 50 loci per call and organism limitation (only arabidopsis_thaliana supported). It implies when to use batch vs. single but does not explicitly contrast them.

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

batch_locus_go_annotationsBatch: GO AnnotationsA
Read-onlyIdempotent

Batch variant of locus_go_annotations. Two-stage fanout — each locus is resolved to UniProt and then queried in QuickGO. Per-locus NotFoundError from either stage lands in errors[] with the typed prefix preserved. Capped at 50 loci.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
limitNoMax annotations per locus from QuickGO (1–100, default 50)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds significant behavioral detail: the two-stage fanout, per-locus error handling (NotFoundError into errors[] with typed prefix), and the 50-locus cap. This goes well beyond the annotations.

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

Conciseness5/5

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

The description is four sentences, each adding distinct information: purpose, process, error behavior, and cap. No unnecessary words; front-loaded with the most important information (batch variant).

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

Completeness4/5

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

Given the complexity of a batch tool with a two-stage process, the description covers the key aspects. It mentions error handling and the cap. However, it could benefit from a brief note on when to prefer this over other batch tools or the single-locus version, though the tool name and sibling set provide some context.

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

Parameters4/5

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

Schema coverage is 100%, and the description adds context about error handling for the 'loci' parameter (how errors are structured). It also clarifies the default for 'organism' and the range for 'limit'. This adds value beyond the schema descriptions.

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

Purpose5/5

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

Description clearly states it is a batch variant of locus_go_annotations, specifies the two-stage fanout (locus to UniProt to QuickGO), and includes a cap of 50 loci. This distinguishes it from the single-locus sibling tool.

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

Usage Guidelines4/5

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

The description implies use for multiple loci by being a batch variant, and mentions the cap of 50 loci. However, it does not explicitly state when not to use it or compare with other batch tools (e.g., batch_locus_literature) to avoid confusion.

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

batch_locus_literatureBatch: LiteratureA
Read-onlyIdempotent

Batch variant of locus_literature. Fans out per-locus Europe PMC searches in parallel (up to 50 loci). Each results[locus] is the full single-locus payload (query + hitCount + returned + hits[]).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
sizeNoMax results per locus (1–25, default 10)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds value by explaining parallel execution and error handling (successes in results, errors in errors), going beyond what annotations offer.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the purpose ('Batch variant of locus_literature') and efficiently covers parallelism, limits, and result structure.

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

Completeness5/5

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

Given the tool's complexity (batch, parallel, error handling), the description covers all key aspects: it's a batch, fan-out, max 50 loci, per-locus response payload. Output schema exists, so return values are covered. No gaps.

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

Parameters3/5

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

Schema description coverage is 100%, and the description does not add significant meaning beyond what the schema already provides. It mentions 'up to 50 loci' which is already in schema maxItems. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states it is a batch variant of locus_literature, specifies parallel per-locus searches for up to 50 loci, and describes the results structure. This distinguishes it effectively from the single-locus sibling.

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

Usage Guidelines3/5

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

The description implies usage when multiple loci are involved but does not explicitly state when to use this tool versus other batch tools like batch_locus_go_annotations or alternatives. No direct comparison or exclusion criteria are provided.

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

batch_phytozome_lookup_locusBatch: Phytozome Locus MetadataA
Read-onlyIdempotent

Batch variant of phytozome_lookup_locus. Fans out per-locus BioMart queries in parallel (up to 50 loci). Each results[locus] is the full single-locus row (organism_name, gene_name, chromosome, start/end/strand, description).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds that it fans out in parallel with a 50-locus limit and specifies error handling (errors[locus]), providing useful context beyond annotations.

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

Conciseness5/5

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

Two concise sentences: first sets context (batch, parallel, limit), second describes output structure. Every sentence earns its place with no superfluous information.

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

Completeness4/5

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

Given the output schema exists, the description adequately covers batch behavior, limits, and error handling. However, comparing to siblings, it could better highlight when to prefer this batch tool over others.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining loci limits and stating that organism accepts slugs, scientific/common names, or NCBI taxids, aiding correct parameter usage.

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

Purpose5/5

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

The description clearly states this is a batch variant that fans out per-locus BioMart queries in parallel, and specifies the max loci and output structure, distinguishing it from the single-locus sibling.

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

Usage Guidelines3/5

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

It identifies as a batch version but does not provide explicit guidance on when to use it versus other batch tools or the single-locus version, missing opportunities to guide selection among numerous siblings.

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

batch_resolve_locus_to_uniprotBatch: Resolve Locus → UniProtA
Read-onlyIdempotent

Batch variant of resolve_locus_to_uniprot. Fans out per-locus UniProtKB searches in parallel (up to 50 loci). Each results[locus] is the full single-locus record (primaryAccession + uniProtkbId + entryType + geneNames + organism + sequenceLength + web_url + …).

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesList of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus].
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context: parallel fan-out, batch size limit of 50, and error handling per locus. This goes beyond annotations.

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

Conciseness5/5

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

Two sentences succinctly convey the tool's batch nature, parallelism, limits, and output structure. Every sentence is informative and well-placed.

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

Completeness5/5

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

Given the presence of an output schema and detailed annotations, the description fully covers the tool's purpose, behavior, limits, and result format. No critical gaps remain.

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

Parameters3/5

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

Schema coverage is 100% and each parameter has a schema description. The tool description adds no additional semantic information about parameters beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states it is a batch variant of resolve_locus_to_uniprot, performing parallel searches for up to 50 loci. It explicitly distinguishes from the single-locus sibling by specifying batch behavior and result structure.

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

Usage Guidelines4/5

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

The description indicates it is a batch variant, implying use for multiple loci, but does not explicitly state when not to use or list alternatives among sibling batch tools. However, the context is clear given the sibling list.

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

batch_string_interactionsBatch: STRING InteractionsA
Read-onlyIdempotent

Batch version of string_interactions. Up to 50 inputs per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana
loci_or_accessionsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesThe batch tool name, e.g. batch_resolve_locus_to_uniprot
countYesNumber of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus.
errorsYeslocus → '[ClassName] message' for PlantGenomicsError failures
resultsYeslocus → per-locus result dict (same shape as the single-locus tool)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds no additional behavioral context beyond 'Up to 50 inputs per call,' which is already in the schema. No contradictions.

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

Conciseness5/5

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

Two sentences, no filler, front-loaded with key information about batch nature and capacity.

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

Completeness4/5

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

Given the output schema exists and annotations cover safety, the description provides the essential batch limit and links to the parent tool. Could mention how results are returned or any processing specifics, but sufficient for a simple batch wrapper.

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

Parameters3/5

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

Schema description coverage is only 33% (organism has description). The description adds value by noting the 50-input limit, which relates to loci_or_accessions, but does not elaborate on limit or organism parameters. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it's a batch version of string_interactions, specifying the resource and the batch limit (up to 50 inputs). This distinguishes it from its single-input sibling.

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

Usage Guidelines4/5

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

The description implies use when multiple inputs need processing, and the sibling list includes string_interactions as the alternative. However, it does not explicitly state when not to use or provide detailed context.

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

biological_context_synthSynthesis: Biological ContextA
Read-onlyIdempotent

Synthesis: one-call equivalent of the biological_context prompt. Resolves UniProt accession, then fans out to Gramene homologs, KEGG pathways, STRING-DB partners, and ATTED-II coexpression in parallel. Adds a consensus_partners ranking that merges STRING + ATTED scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYes
top_nNo
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesSynthesis tool name, e.g. analyze_locus_synth
inputYesEchoed input arguments
stepsYesPer-backend execution rows
resultNoComposed cross-source result; None if root step failed
elapsed_sYesTotal orchestrator wall time
started_atYesISO 8601 UTC timestamp

TDQS

A4.1/5.0
Behavior4/5

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

Annotations (readOnlyHint, idempotentHint) already indicate safe, idempotent behavior. The description adds significant behavioral context: the pipeline of resolving to UniProt, parallel fan-out, and merging scores into a consensus ranking. No annotation contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with core purpose, no wasted words. Efficiently conveys all key aspects.

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

Completeness4/5

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

Given the tool's complexity (multiple data sources, output schema exists), the description covers the overall workflow and output (consensus ranking). However, it omits details about how 'top_n' and 'organism' affect the results, leaving some ambiguity.

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

Parameters2/5

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

With schema description coverage at only 33% (only organism documented), the description should compensate but does not explain 'locus' or 'top_n' parameters. It only indirectly references input via 'resolves UniProt accession' and 'consensus partners ranking', leaving the parameters partially underspecified.

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

Purpose5/5

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

The description clearly states it is a 'one-call equivalent of the biological_context prompt' and enumerates the specific operations (resolve UniProt, fan out to Gramene, KEGG, STRING, ATTED-II, and add consensus ranking). This distinguishes it from sibling tools that perform individual lookups.

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

Usage Guidelines4/5

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

The description implies usage as a convenience tool for broad biological context, but does not explicitly state when to use it versus calling individual sibling tools or when not to use it. The context is clear but lacks explicit guidance.

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

blast_sequenceBLAST: Sequence Search (NCBI)A
Read-only

Run a BLAST sequence-similarity search against NCBI BLAST URLAPI. Async Put/Get under the hood — submits the query, polls the RID (honoring NCBI's per-RID 60s floor), and returns the parsed top hits + raw text report excerpt. Programs: blastn / blastp / blastx / tblastn / tblastx. Database defaults to swissprot for protein programs, core_nt for nucleotide. Emits notifications/progress on each poll. Long searches (>10 min) raise [NotFoundError] with the RID preserved so the client can re-poll. Set PLANT_GENOMICS_MCP_NCBI_EMAIL to identify the request per NCBI etiquette.

ParametersJSON Schema
NameRequiredDescriptionDefault
expectNoE-value threshold (default 10).
programNoBLAST program — default blastp.blastp
databaseNoNCBI BLAST database slug (e.g. swissprot, core_nt, refseq_protein). Defaults to swissprot for protein programs and core_nt for nucleotide programs.
max_waitNoMax seconds to wait for the search to finish before raising NotFoundError with the RID preserved (default 600).
sequenceYesRaw or FASTA-formatted query sequence.
megablastNoEnable megablast (blastn only). Default false.
hitlist_sizeNoMax hits to return (default 10).
poll_intervalNoSeconds between polls. Clamped up to NCBI's per-RID 60s floor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ridYesNCBI BLAST request ID — re-usable via fetch_result()
hitsYesTop alignments, sorted by BLAST default order
statusYesAlways "READY" when this object is returned
programYesblastn | blastp | blastx | tblastn | tblastx
databaseYesNCBI BLAST database, e.g. swissprot, core_nt
hitCountYesNumber of rows parsed from the alignment summary
elapsed_secondsYesWall-clock from submit to READY
raw_report_excerptYesFirst 50 KB of the FORMAT_TYPE=Text report
raw_report_truncatedYesTrue if the upstream report exceeded the cap

TDQS

A4.7/5.0
Behavior5/5

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

Description adds significant behavioral details beyond annotations: async Put/Get, polling with 60s floor, progress notifications, long search error with RID preservation, email requirement. No contradiction with annotations.

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

Conciseness5/5

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

Every sentence adds value; no fluff. Front-loaded with main purpose. Length is appropriate for complexity.

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

Completeness5/5

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

Given complexity (async, polling, error handling, many parameters) and presence of output schema, description covers essential behavior, defaults, error case, and environmental setup. Complete enough.

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

Parameters4/5

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

Schema covers 100% of parameters with descriptions. Description adds value by summarizing program/database defaults and explaining notable parameters like megablast and poll interval, but does not add fundamental new meaning.

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

Purpose5/5

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

Clearly states it runs a BLAST sequence-similarity search against NCBI. Verb+resource is specific ('Run' + 'BLAST sequence-similarity search'). Distinguished from sibling tools as the only BLAST tool.

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

Usage Guidelines4/5

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

Provides clear context for use (sequence similarity search) but does not explicitly state when not to use or mention alternatives. However, sibling tools are not BLAST-related, so implied.

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

consensus_homologsSynthesis: Consensus HomologsA
Read-onlyIdempotent

Synthesis: cross-source homology consensus. Resolves UniProt + FASTA sequence, then runs Gramene homology calls and NCBI BLAST in parallel. Dedupes hits by normalized locus token and scores by n_sources * mean_identity — Gramene contributes identity=1.0, BLAST contributes pident/100.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYes
top_nNo
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesSynthesis tool name, e.g. analyze_locus_synth
inputYesEchoed input arguments
stepsYesPer-backend execution rows
resultNoComposed cross-source result; None if root step failed
elapsed_sYesTotal orchestrator wall time
started_atYesISO 8601 UTC timestamp

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare read-only and idempotent behavior, but the description adds substantial detail: resolving UniProt + FASTA, parallel execution, deduplication by normalized locus token, and the exact scoring formula with per-source identity contributions. This goes well beyond the structured hints.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, and every sentence adds meaningful detail about sources, algorithm, and scoring. No wasted words or redundant repetition of the schema.

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

Completeness4/5

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

The tool is complex, and the description covers the pipeline, scoring, and deduplication. The output schema handles return-value documentation. However, it does not mention the role of top_n or possible caveats when sources disagree, leaving a modest completeness gap.

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

Parameters3/5

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

Schema documentation covers only the organism parameter (33% coverage). The description adds meaning for locus by explaining it is resolved to UniProt + FASTA and used in normalized locus tokens, but it does not explain top_n or clarify how many results are returned. This partial compensation leaves a clear gap.

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

Purpose5/5

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

The description clearly states a specific purpose: 'cross-source homology consensus' combining Gramene and NCBI BLAST with a defined scoring method. It distinguishes itself from sibling tools like gramene_homologs and blast_sequence by emphasizing the synthesis/deduplication behavior.

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

Usage Guidelines4/5

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

The description strongly implies when to use this tool: when a cross-source consensus of homology calls is needed rather than a single-source result. It does not explicitly name alternatives or give 'when-not-to-use' guidance, but the synthesis framing provides clear usage context.

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

ensembl_plants_lookup_locusEnsembl Plants: Locus MetadataA
Read-onlyIdempotent

Fetch metadata for a plant locus identifier from Ensembl Plants. Defaults to arabidopsis_thaliana; pass organism= for other plant species (oryza_sativa, zea_mays, ...). Locus is the TAIR-style identifier (e.g. AT1G01010 for Arabidopsis NAC001).

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesLocus identifier, e.g. AT1G01010
endNo
startNo
sourceNo
strandNo1 forward, -1 reverse
biotypeNoprotein_coding, lncRNA, miRNA, ...
db_typeNoUsually "core"
organismYesPlant organism canonical slug, e.g. arabidopsis_thaliana
logic_nameNoSource annotation pipeline
descriptionNo
object_typeNoUsually "Gene"
display_nameNoHuman-readable gene symbol
assembly_nameNoe.g. TAIR10
seq_region_nameNoChromosome / contig name
canonical_transcriptNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds no contradictory information and provides minimal behavioral context beyond the annotations, resulting in an adequate but not enhanced score.

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

Conciseness5/5

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

Extremely concise at two sentences. Front-loaded with the core action, immediately followed by essential usage details and examples. No wasted words.

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

Completeness4/5

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

Given simple parameters, full schema coverage, rich annotations, and presence of an output schema, the description is sufficiently complete. Could optionally mention pagination or result limits, but it's not necessary for basic usage.

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

Parameters4/5

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

Both parameters are fully described in the schema (100% coverage). The description adds value by providing real-world examples (e.g., AT1G01010 for Arabidopsis) and explaining the organism parameter's flexibility (canonical slug, name, taxid), which goes beyond the schema's basic descriptions.

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

Purpose5/5

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

The description explicitly states 'Fetch metadata for a plant locus identifier from Ensembl Plants,' with a specific verb and resource. It distinguishes from sibling tools like phytozome_lookup_locus by specifying the Ensembl Plants origin and providing locus examples.

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

Usage Guidelines4/5

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

Provides clear usage context: defaults to arabidopsis_thaliana, lists example organisms, and explains the locus identifier format. Does not explicitly mention when not to use, but the context is sufficiently clear.

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

ensembl_region_queryGenomic Region → FeaturesA
Read-onlyIdempotent

List features overlapping a genomic interval via Ensembl Plants /overlap/region. region is the seq-region name (chromosome / contig, e.g. '1'); start and end are 1-based inclusive. feature is one of gene / transcript / cds / exon (default gene). Answers 'what genes are in this QTL interval / assembly window' without a per-locus lookup. Ensembl caps the span — oversized regions error. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes1-based inclusive end
startYes1-based start
regionYesseq-region name (chromosome / contig), e.g. '1' or 'Chr1'
featureNoFeature type to returngene
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of overlapping features returned
regionYesseq_region:start-end, e.g. 1:3000-10000
featureYesFeature type queried
featuresYesRaw Ensembl overlap records
organismYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnly, openWorld, idempotent, and non-destructive. The description adds behavioral context: the API caps the span and will error on oversized regions, and defaults to arabidopsis_thaliana. This goes beyond what annotations provide.

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

Conciseness4/5

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

The description is compact at about 6 sentences, with the purpose in the first sentence. It includes necessary warnings and defaults without unnecessary verbiage. However, parameter descriptions could be omitted since they are fully covered in the schema.

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

Completeness4/5

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

Given the tool has 5 parameters, a required set, and an output schema (not shown), the description covers the purpose, parameter roles, a use case, a behavioral caveat, and defaults. It does not explain the output format, but the output schema suffices. It adequately distinguishes from sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minor clarifications like '1-based inclusive' for start/end and provides an example region '1', but largely restates schema information.

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

Purpose5/5

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

The description clearly states 'List features overlapping a genomic interval' which uses a specific verb and resource. It distinguishes from sibling tools by explicitly contrasting with 'per-locus lookup', and provides concrete use cases like 'what genes are in this QTL interval'.

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

Usage Guidelines4/5

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

The description explains when to use this tool ('without a per-locus lookup') and provides defaults for feature and organism. It warns about oversized region errors. However, it does not explicitly state when not to use it or list alternative tools beyond the implicit per-locus methods.

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

experimental_interactionsThaleMine: Experimental InteractionsA
Read-onlyIdempotent

Fetch CURATED EXPERIMENTAL protein/genetic interaction partners for an Arabidopsis locus from ThaleMine (BAR's InterMine instance; free, no key), sourced from BioGRID, IntAct and PSI-MI. Unlike string_interactions (predicted / text-mined, scored) and bar_aiv_interactions (which returns GRN paper references for Arabidopsis, not partner pairs), every partner here carries the actual experimental provenance: detection method (two hybrid, pull down, genetic interference, ...), PSI-MI relationship type, physical vs genetic class, source database, and the PubMed IDs that reported it. ThaleMine emits one row per evidence record, so rows are aggregated to one entry per partner with evidence_count as a crude support signal; partners are ordered by that count. found=false means the gene is real but has no curated interaction on record — a normal outcome; an unknown locus raises a typed NotFoundError. Arabidopsis only (ThaleMine carries genes for taxon 3702; other organisms raise OrganismNotSupported).

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesAGI locus, e.g. AT5G11260 (HY5)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only.arabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if any curated interaction exists for this locus
locusYes
organismYesCanonical organism slug (Arabidopsis only)
partnersNoPartners ordered by evidence count, descending
truncatedYesTrue if the partner list was capped
source_urlYesThaleMine gene report page
gene_symbolNoGene symbol from ThaleMine
partner_countYesTotal distinct partners (pre-cap)
evidence_countYesTotal evidence records across all partners (pre-cap) — counted over every partner upstream, not only the partners listed here

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds valuable behavioral details: aggregation of ThaleMine rows into one entry per partner, ordering by evidence_count, error behavior for unknown loci (NotFoundError), and organism restriction. No contradictions with annotations.

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

Conciseness4/5

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

The description is detailed but front-loaded with the core purpose. It contains two paragraphs with necessary specifics (aggregation, sources, error cases). Slightly longer than minimal but every sentence adds value; no redundant fluff.

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

Completeness5/5

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

Given the complexity of the tool (aggregation, multiple source databases, error conditions, organism restriction), the description covers all aspects: what is returned, how results are ordered, what found=false means, and organism limitation. Output schema exists, so return format details not needed. Very complete.

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

Parameters4/5

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

Schema covers 100%, but description adds context: loci format example ('AT5G11260 (HY5)'), organism default value, and that ThaleMine only supports Arabidopsis. This adds meaning beyond the schema definition.

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

Purpose5/5

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

The description clearly states the action ('Fetch CURATED EXPERIMENTAL protein/genetic interaction partners'), the resource ('ThaleMine'), the organism ('Arabidopsis'), and distinguishes from sibling tools (string_interactions, bar_aiv_interactions) by emphasizing experimental provenance and curation.

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

Usage Guidelines5/5

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

The description explicitly contrasts with sibling tools: 'Unlike string_interactions (predicted / text-mined, scored) and bar_aiv_interactions (which returns GRN paper references...), every partner here carries the actual experimental provenance.' It also clarifies when the tool returns no results (found=false) and restricts to Arabidopsis, setting clear usage boundaries.

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

experimental_structuresPDBe: Experimental StructuresA
Read-onlyIdempotent

Fetch experimentally-solved (X-ray / cryo-EM / NMR) protein structures for a locus from PDBe (www.ebi.ac.uk/pdbe; free, no key). Resolves the locus → UniProt accession, then returns PDBe's best_structures mapping ranked best-first: per entry the PDB id, chain, experimental method, resolution, coverage, and modelled residue span. Most plant proteins have NO deposited structure — that returns found=false (a normal outcome, not an error); a locus with no UniProt entry raises a typed NotFoundError. structure_count is the true total even when the list is capped. Complements alphafold_structure (the predicted view). Works for all 12 organisms (UniProt-keyed). Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if any experimental structure is deposited
locusYes
accessionYesResolved UniProt accession
truncatedYesTrue if the structure list was capped
structuresNoBest-first {pdb_id, chain_id, experimental_method, resolution, coverage, …}
structure_countYesTotal deposited structures (pre-cap)

TDQS

A4.6/5.0
Behavior5/5

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

Discloses resolution process, return format, error behavior (NotFoundError), and that structure_count is true total. Consistent with readOnly/idiempotent annotations.

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

Conciseness4/5

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

Well-structured, front-loaded, each sentence adds value. Slightly verbose but still concise.

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

Completeness5/5

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

Covers error cases, normal outcomes, data fields, complements siblings. Output schema and annotations further reduce burden.

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

Parameters4/5

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

Adds context beyond schema: explains locus resolution, organism defaults/accepts multiple forms, and example values. Schema coverage was already 100%.

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

Purpose5/5

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

Clearly states it fetches experimentally-solved structures for a locus, specifies methods (X-ray, cryo-EM, NMR), and differentiates from alphafold_structure.

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

Usage Guidelines4/5

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

Provides context about when to use (experimental vs predicted) and normal outcomes (found=false for most plants). Could explicitly state when not to use.

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

find_homologs_synthSynthesis: Homolog SearchA
Read-onlyIdempotent

Synthesis: one-call equivalent of the find_homologs prompt. Runs BLAST then resolves UniProt-shaped subject accessions via the batch UniProt helper. Returns ranked hits each annotated with their UniProt record (or null if subject_id is not a UniProt accession).

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
programNoblastp
sequenceYesQuery sequence (protein or nucleotide)

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesSynthesis tool name, e.g. analyze_locus_synth
inputYesEchoed input arguments
stepsYesPer-backend execution rows
resultNoComposed cross-source result; None if root step failed
elapsed_sYesTotal orchestrator wall time
started_atYesISO 8601 UTC timestamp

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnly, idempotent, non-destructive. Description adds context: it runs BLAST and resolves UniProt-shaped accessions, and handles non-UniProt subjects by returning null. No contradiction with annotations.

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

Conciseness4/5

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

Two sentences, minimal waste. However, 'Synthesis: one-call equivalent of the find_homologs prompt' is jargon that may confuse.

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

Completeness4/5

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

Given output schema exists, return values are defined. Description mentions output structure. Tool complexity is moderate (3 params, 1 required). Missing parameter details lower it slightly.

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

Parameters2/5

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

Schema description coverage is only 33% (only 'sequence' described). Description does not explain 'top_n' or 'program' beyond defaults. With low coverage, description should compensate but does not.

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

Purpose5/5

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

The description clearly states the tool runs BLAST then resolves UniProt accessions, returning ranked hits. It distinguishes from siblings like blast_sequence (BLAST only) and batch_gramene_homologs (batch homolog search).

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

Usage Guidelines3/5

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

The description implies the tool is a 'one-call equivalent of the find_homologs prompt' but does not explicitly list when to use vs alternatives or when to avoid.

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

gene_reportSynthesis: Gene Report (Markdown dossier)A
Read-onlyIdempotent

Synthesis: one-shot 'tell me about this gene' dossier. Resolves a locus through Ensembl Plants + UniProt, then fans out to cross-references, KEGG pathways, STRING interactors, Europe PMC literature, and QuickGO GO terms. Returns a SynthesisEnvelope whose result.markdown is a rendered Markdown gene dossier (the headline output) alongside a structured result.sections mirror. Any single backend failure degrades that section to an 'Unavailable' note; the rest of the dossier still renders.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesLocus name, e.g. AT1G01010
top_nNoCaps GO terms, pathways, interactors, xrefs, and papers per section
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYesSynthesis tool name, e.g. analyze_locus_synth
inputYesEchoed input arguments
stepsYesPer-backend execution rows
resultNoComposed cross-source result; None if root step failed
elapsed_sYesTotal orchestrator wall time
started_atYesISO 8601 UTC timestamp

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (read-only, idempotent, open world), the description discloses the crucial failure-isolation behavior: any single backend failure degrades only that section to 'Unavailable' while the rest still renders. It also explains the return envelope structure (result.markdown headline + sections mirror), adding real behavioral context beyond the schema.

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

Conciseness5/5

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

Three sentences, front-loaded with the essential ('Synthesis: one-shot...'); every clause earns its place by explaining scope, fan-out sources, output format, and failure behavior. No redundancy or filler.

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

Completeness5/5

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

For a complex multi-source synthesis tool, the description covers inputs (locus resolution), processing (fan-out list), outputs (Markdown + sections), and failure semantics. With a rich schema and output schema present, this is complete enough for an agent to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description references 'locus' in passing but adds no additional semantic detail about top_n or organism; per the baseline, a 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies this as a one-shot gene dossier synthesis tool with a specific verb ('tell me about this gene') and resource scope, distinct from sibling tools that query individual data sources. It enumerates the fan-out targets (Ensembl Plants, UniProt, KEGG, STRING, Europe PMC, QuickGO) and the headline output, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The 'Synthesis:' prefix and 'one-shot' phrasing make the intended use case clear: get a comprehensive overview of a gene instead of calling individual locus tools. It does not explicitly name alternatives or exclusions, but the dossier framing differentiates it from the granular sibling tools.

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

get_gene_xrefsGene Cross-ReferencesA
Read-onlyIdempotent

Fetch cross-database references (UniProt, NCBI Gene, TAIR, ArrayExpress, …) for a plant locus from Ensembl Plants. Defaults to arabidopsis_thaliana; pass organism= for other Ensembl Plants species. Returns count + raw xref list + a by_db rollup keyed on Ensembl's dbname (e.g. 'Uniprot_gn', 'EntrezGene') for fast lookup of a single foreign identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
by_dbYesdbname → primary_ids[]; e.g. {'Uniprot_gn': ['Q0WV96']}
countYesNumber of xref records returned
locusYes
xrefsYesRaw Ensembl xref records
organismYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint) already present. Description adds return structure (count, raw xref list, by_db rollup) and dbname key explanation, going beyond annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with action, no wasted words. Every sentence adds value.

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

Completeness5/5

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

Given output schema exists, description covers inputs, defaults, and output structure sufficiently. No gaps.

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

Parameters5/5

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

Schema covers both parameters fully. Description adds examples (locus), explains organism accepts various forms (slug, name, taxid), enriching schema.

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

Purpose5/5

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

Clear verb 'Fetch' with specific resource 'cross-database references for a plant locus from Ensembl Plants'. Distinct from sibling tools like batch_get_gene_xrefs and resolve_locus_to_uniprot.

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

Usage Guidelines4/5

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

Provides default organism and how to use for other species. Lacks explicit when-not-to-use or alternatives, but context is clear.

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

get_sequenceGene / CDS / Protein SequenceA
Read-onlyIdempotent

Fetch a locus's sequence from Ensembl Plants. seq_type is one of genomic / cds / cdna / protein (default protein — the canonical-transcript product). Closes the lookup → fetch → BLAST loop: feed the returned sequence straight to blast_sequence (protein for blastp, cds/cdna for blastn). Defaults to arabidopsis_thaliana; pass organism= for other plant species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana
seq_typeNoSequence type to fetchprotein

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesSequence type requested
locusYes
lengthYesSequence length (residues for protein, bases otherwise)
versionNoEnsembl sequence version
moleculeNo"dna" or "protein"
organismYesResolved canonical organism slug
sequenceYesThe sequence string; feed to blast_sequence
ensembl_idNoResolved Ensembl stable id
descriptionNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context: default parameters, seq_type enum options (including that 'protein' is the canonical-transcript product), and organism flexibility. No contradictions.

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

Conciseness5/5

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

The description is extremely concise (two sentences of functional content plus one sentence of usage guidance) and front-loaded. Every sentence adds essential information without redundancy.

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

Completeness5/5

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

Given the low parameter count, high schema coverage, and presence of output schema, the description is complete. It covers purpose, parameters with defaults, usage scenario, and chaining to sibling tools. No gaps remain for the agent to guess.

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

Parameters4/5

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

Schema description coverage is 100%, but the description adds meaning beyond the schema by clarifying the default values for organism and seq_type, and explaining the seq_type mapping to BLAST types (protein for blastp, cds/cdna for blastn). This provides practical usage context not present in the schema.

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

Purpose5/5

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

The description clearly states the tool fetches a locus's sequence from Ensembl Plants, specifying verb 'Fetch' and resource 'sequence'. It distinguishes from siblings by focusing on sequence retrieval, which is unique among the listed tools.

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

Usage Guidelines4/5

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

The description provides explicit guidance on chaining the output to blast_sequence for different seq_types, and mentions defaults for organism. It doesn't explicitly exclude alternative uses but gives strong contextual cues for when to use this tool.

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

go_enrichmentGO / KEGG Enrichment (gene list)A
Read-onlyIdempotent

GO + KEGG over-representation analysis for a gene LIST via g:Profiler g:GOSt (biit.cs.ut.ee/gprofiler; free, no API key). Unlike locus_go_annotations (one locus → its terms), this answers 'what is my gene SET enriched for?' — the dominant question for a differential-expression or co-expression cluster. loci is the query gene list (e.g. AT-codes for Arabidopsis, RAP-DB IDs for rice). sources defaults to GO:BP/GO:MF/GO:CC + KEGG; user_threshold is the g:SCS-corrected significance cutoff (default 0.05). Optional background sets a custom statistical domain (default: all annotated genes). Returns enriched[] (term_id/name/p_value/intersection_size/…, capped at top_n by p-value) plus unmapped[] — query loci g:Profiler could not recognize, surfaced so a locus-namespace mismatch is visible. Defaults to arabidopsis_thaliana; pass organism= for any of the 12 species.

ParametersJSON Schema
NameRequiredDescriptionDefault
lociYesQuery gene set, e.g. ['AT2G46830', 'AT1G01060', ...]
top_nNoMax terms returned, sorted by p-value (1–200, default 50)
sourcesNoAnnotation sources to test (default: all four)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana
backgroundNoOptional custom statistical background gene set
user_thresholdNoSignificance cutoff, g:SCS-corrected (default 0.05)

Output Schema

ParametersJSON Schema
NameRequiredDescription
mappedYesLoci g:Profiler recognized
sourcesYesAnnotation sources queried
enrichedYes
organismYesCanonical organism slug
returnedYesTerms in enriched[] after the top_n cap
unmappedYesLoci g:Profiler could not map
query_sizeYesNumber of loci submitted
total_termsYesSignificant terms before the top_n cap
gprofiler_idYesg:Profiler organism ID used, e.g. athaliana

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, etc.), the description adds significant behavioral context: it names the upstream service (g:Profiler), notes it's free and requires no API key, explains the return of unmapped loci for detecting namespace mismatches, and describes the significance correction (g:SCS). No contradictions with annotations.

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

Conciseness5/5

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

The description is a single paragraph with each sentence contributing essential information. It starts with the core purpose, then immediately differentiates from sibling, explains key parameters, and notes return values. No filler; every sentence earns its place.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, 1 required, output schema present, extensive annotations), the description covers all essential aspects: purpose, usage context, parameter behavior, service details, return format, and organism defaults. It is fully sufficient for an AI agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% with descriptions per parameter. The description adds value by explaining the role of 'loci' with examples, summarizing default behavior for sources and thresholds, and clarifying the purpose of optional parameters like background. This goes beyond the schema's structural descriptions.

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

Purpose5/5

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

The description clearly states it performs GO/KEGG over-representation analysis for a gene list, and explicitly contrasts with the sibling tool 'locus_go_annotations' which handles single loci. The verb 'answers what is my gene SET enriched for?' is specific and distinguishes the tool's purpose.

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

Usage Guidelines4/5

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

The description provides clear guidance by contrasting with locus_go_annotations and contextualizing the tool for differential-expression or co-expression cluster analysis. It could be improved with explicit when-not-to-use scenarios, but the sibling differentiation is effective.

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

gramene_homologsGramene HomologsA
Read-onlyIdempotent

Fetch orthologs and paralogs for a plant locus from Gramene compara (data.gramene.org v69). Default homology_type='ortholog'; pass 'paralog' for in-species duplicates or 'all' for everything. Returns target_locus + homology category (type) + shared gene_tree_id per hit. The fl=homology projection does not carry per-row taxon, identity, or protein ID; pair with resolve_locus_to_uniprot for protein-level enrichment and with blast_sequence for sequence similarity discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax homolog rows to return. 'total' always reports the true pre-cap count and 'truncated' says whether the cap bit.
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
homology_typeNoFilter on homology kindortholog

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
totalYesNumber of homologs after filtering, BEFORE the row cap
releaseYesGramene release identifier, e.g. v69
homologsYes
truncatedNoTrue when the row list was capped (< total); pass limit= to change the cap

TDQS

A5/5.0
Behavior5/5

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

Annotations indicate safe, idempotent read operation. Description adds key limitations (no per-row taxon/identity/protein ID) and details return structure, enhancing beyond annotations.

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

Conciseness5/5

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

Three-sentence paragraph that is direct and informative without redundancy.

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

Completeness5/5

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

Given output schema exists, description covers return fields and provides integration guidance, fully addressing the tool's complexity.

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

Parameters5/5

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

Schema coverage is 100%. Description adds value with examples for locus, explains default and behavior for homology_type, and clarifies limit reporting (total, truncated).

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

Purpose5/5

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

Clearly states it fetches orthologs and paralogs for a plant locus from Gramene compara, specifying data source and version. Differentiates from siblings by naming Gramene and offering homology_type options.

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

Usage Guidelines5/5

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

Provides explicit defaults and alternatives (ortholog, paralog, all) and suggests complementary tools (resolve_locus_to_uniprot, blast_sequence) for enriched analysis.

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

interpro_domainsInterPro: Protein DomainsA
Read-onlyIdempotent

Fetch the InterPro domain / family architecture for a locus (www.ebi.ac.uk/interpro; free, no key). Resolves the locus → UniProt accession, then returns the protein's InterPro entries — each with accession, name, type (domain / family / homologous_superfamily / …), source_database (Pfam appears here as source_database='pfam', not a separate tool), the integrated InterPro accession, and residue spans — plus a count_by_type rollup. A protein with no annotated domains returns found=true with an empty list; a locus with no UniProt entry raises a typed NotFoundError. domain_count is the true total even when the row list is page-capped. Works for all 12 organisms (UniProt-keyed). Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue once the locus resolved to a UniProt entry
locusYes
domainsYes
accessionYesResolved UniProt accession
truncatedYesTrue if the row list was page-capped (< domain_count)
domain_countYesTotal InterPro entries (pre-cap)
count_by_typeYesRollup of entry count by type
upstream_versionNoInterPro release that produced THIS response, as stated by the upstream's own header (e.g. '109.0'). null means InterPro did not state one — never that no release exists, and never inferred from a separate metadata call, which can describe a different release than the one that answered.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral details beyond annotations: the resolution from locus to UniProt, return structure (entries with fields, count_by_type), error handling (NotFoundError for locus without UniProt, empty list for no domains), and pagination note (domain_count is true total).

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

Conciseness4/5

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

The description is well-structured, starting with the main purpose. Each sentence adds meaningful information, though it could be slightly more concise. Overall, it earns its length.

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

Completeness5/5

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

Given the tool's complexity (2 parameters, output schema exists, rich annotations), the description covers resolution steps, error scenarios, and output fields. The presence of an output schema reduces the burden, but the description still adds important contextual details.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by providing examples for the 'locus' parameter and explaining the format for 'organism' (canonical slug, scientific/common name, NCBI taxid), which goes beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Fetch' and resource 'InterPro domain / family architecture'. It distinguishes from sibling tools by noting that Pfam appears as a source_database within this tool, not as a separate tool.

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

Usage Guidelines4/5

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

The description provides clear context on when to use: for fetching InterPro domain architecture for a locus. It specifies default organism and how to specify others. It lacks explicit exclusions or alternatives, but the context is sufficient.

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

jaspar_motifJASPAR: Motif MatrixA
Read-onlyIdempotent

Fetch one JASPAR binding profile by matrix id, including its raw position-frequency matrix (PFM: per-base count vectors keyed A/C/G/T) plus TF class/family, assay type, source species, UniProt accessions, PubMed refs, IUPAC consensus, and the sequence-logo URL. The drill-down companion to tf_binding_motifs, which returns the derived consensus but not the matrix. Accepts a versioned id (MA0570.1) or a bare base id (MA0570, which resolves to the newest version). Unknown ids raise a typed NotFoundError.

ParametersJSON Schema
NameRequiredDescriptionDefault
matrix_idYesJASPAR profile id, e.g. MA0570.1 or MA0570 (latest version)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pfmNoPosition-frequency matrix: per-base count vectors keyed A/C/G/T
nameNoTF name as curated by JASPAR
lengthNoMotif width in bases
base_idNoVersion-less profile id, e.g. MA0570
speciesNoSource species [{tax_id, name}]
versionNoJASPAR release version of the profile
web_urlNoJASPAR profile page
tf_classNoStructural class, e.g. ['Basic leucine zipper factors (bZIP)']
consensusNoIUPAC consensus derived from the PFM, e.g. 'AAATATCT' (the Evening Element)
data_typeNoAssay the profile derives from: SELEX / ChIP-seq / PBM / DAP-seq
matrix_idNoJASPAR profile id, e.g. MA0570.1
tf_familyNoTF family, e.g. ['MYB-related']
collectionNoCORE / PBM / UNVALIDATED / …
pubmed_idsNoSupporting PubMed IDs
uniprot_idsNoUniProt accessions JASPAR attributes the profile to
sequence_logoNoURL of the SVG sequence logo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds behavioral details: how IDs are resolved (base ID resolves to newest version), and that unknown IDs raise a typed NotFoundError. No contradiction.

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

Conciseness4/5

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

Description is a single paragraph but efficiently conveys purpose, scope, companion tool, ID format, and error handling. Slightly dense but well-structured.

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

Completeness5/5

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

Given the tool has an output schema, the description doesn't need to detail return values. It lists key data fields and covers ID format, companion tool, and error handling. Fully complete for this simple tool.

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

Parameters4/5

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

Schema coverage is 100% with description for matrix_id. The description adds meaning by explaining it accepts versioned (MA0570.1) or bare base IDs (MA0570, resolves to newest), which goes beyond the schema's type description.

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

Purpose5/5

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

The description clearly states the tool fetches a JASPAR binding profile by matrix id, listing specific data returned (PFM, TF class, etc.). It distinguishes itself from sibling tool tf_binding_motifs as the drill-down companion that returns the full matrix.

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

Usage Guidelines4/5

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

The description explicitly positions this tool as the drill-down companion to tf_binding_motifs, guiding when to use each. It also explains ID versioning (versioned vs base) and error behavior. No explicit when-not, but clear context.

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

kegg_pathwaysKEGG PathwaysA
Read-onlyIdempotent

Fetch KEGG pathway memberships for an Arabidopsis locus from rest.kegg.jp. Returns a list of pathway IDs + names + KEGG category classes the locus participates in. Pairs with locus_go_annotations for the GO-level functional view. Multi-organism caveat (v1.1.0): the organism= field accepts any plant in the matrix for symmetry with the other backends, but only arabidopsis_thaliana resolves — KEGG uses NCBI Entrez Gene IDs for rice/maize/etc. and our cross-backend locus contract can't produce those yet, so any other organism raises OrganismNotSupported before any HTTP call. KEGG v118+ is case-sensitive on the locus: pass AGI loci as uppercase.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01010 (case preserved verbatim — KEGG v118+ is case-sensitive)
organismNoPlant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge landsarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
errorsNoPer-pathway step-2 failures (kept inline so the call doesn't abort)
organismYesResolved canonical organism slug, e.g. arabidopsis_thaliana
pathwaysYes
kegg_gene_idYese.g. "ath:at1g01010"
entrez_gene_idNoEntrez Gene ID from the non-Arabidopsis KEGG↔Entrez bridge; absent for ath.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, non-destructive. Description adds crucial behavioral context: case-sensitivity of KEGG v118+, the HTTP source (rest.kegg.jp), and the error behavior for unsupported organisms. No contradictions.

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

Conciseness4/5

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

The description is a single paragraph, front-loaded with purpose, but the multi-organism caveat is detailed. Each sentence adds value, but could be tightened slightly.

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

Completeness5/5

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

For a tool with output schema, good annotations, and 2 parameters, the description covers limitations, usage context, and partner tools. It is complete.

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

Parameters5/5

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

Schema coverage is 100%, but description adds value: for 'locus', it stresses case-preservation and sensitivity; for 'organism', it explains the limitation and error. This goes beyond the schema's basic descriptions.

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

Purpose5/5

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

The description states a specific verb+resource ('Fetch KEGG pathway memberships for an Arabidopsis locus') and lists the return types (pathway IDs, names, categories). It distinguishes from siblings by mentioning pairing with locus_go_annotations and noting the organism limitation.

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

Usage Guidelines5/5

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

Explicitly states when to use (for pathway memberships), when not to (other organisms raise OrganismNotSupported), and suggests pairing with locus_go_annotations. The multi-organism caveat provides clear guidance.

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

locus_gene_rifsGeneRIF Functional StatementsA
Read-onlyIdempotent

Fetch curated GeneRIF functional statements for an Arabidopsis locus from ThaleMine (free, no key). A GeneRIF is a one-sentence, manually curated statement of what the gene does, each anchored to the PubMed ID of the publication that demonstrated it — dense, directly citable functional context that GO terms (locus_go_annotations) and raw abstracts (locus_literature) do not provide. Well-studied genes have many: HY5 (AT5G11260) has 114. Upstream order is preserved because ThaleMine supplies no meaningful ranking, so truncated means later statements were cut, not that they were less relevant. found=false means the gene exists but has no GeneRIF; an unknown locus raises a typed NotFoundError. Arabidopsis only.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesAGI locus, e.g. AT5G11260 (HY5)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only.arabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if the gene has at least one GeneRIF
locusYes
organismYesCanonical organism slug (Arabidopsis only)
gene_rifsNoCurated statements in upstream order
rif_countYesTotal GeneRIFs (pre-cap)
truncatedYesTrue if the GeneRIF list was capped
source_urlYesThaleMine gene report page
gene_symbolNoGene symbol from ThaleMine

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds important behavioral context: upstream order is preserved, 'truncated' means later statements cut, and an unknown locus raises a 'typed NotFoundError'. No contradictions with annotations.

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

Conciseness4/5

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

The description is detailed and front-loaded with the main action, but some sentences (e.g., the example HY5 count) are slightly verbose. However, every sentence adds useful information, and the structure is logical. Could be slightly trimmed without losing value.

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

Completeness5/5

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

Given the complexity (curated statements, ordering, truncation, errors, organism restriction) and the presence of an output schema (so return values need not be described), the description covers all necessary behavioral and contextual details. It differentiates well from many sibling tools and handles edge cases (found=false, unknown locus).

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

Parameters5/5

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

Schema coverage is 100%, but the description adds value beyond schema: it gives an example value for 'locus' (AT5G11260), explains what 'organism' accepts (slug, scientific name, common name, or NCBI taxid), and clarifies the default and limitation (Arabidopsis only). This enriches parameter understanding.

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

Purpose5/5

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

The description states it fetches 'curated GeneRIF functional statements for an Arabidopsis locus from ThaleMine', clearly specifying verb, resource, and source. It distinguishes from siblings 'locus_go_annotations' and 'locus_literature' by explaining that GeneRIFs provide 'dense, directly citable functional context' that those do not.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool: when needing 'directly citable functional context' that GO terms and abstracts lack. It provides an example (HY5 with 114 statements) and explains the meaning of 'found=false' and error behavior for unknown loci. It also notes 'ThaleMine supports Arabidopsis only', setting clear scope and restrictions.

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

locus_go_annotationsGO AnnotationsA
Read-onlyIdempotent

Fetch Gene Ontology annotations for a plant locus from QuickGO (EBI). Free, no API key. The locus is first resolved to a UniProt accession via the same logic as resolve_locus_to_uniprot, then QuickGO is queried by geneProductId. Returns annotations[] with goId/goName/goAspect/qualifier/evidence + a by_aspect rollup ({molecular_function: [{goId, goName}, ...], biological_process: [...], cellular_component: [...]}) deduped on goId so the high-level term set is one read away.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax annotations from QuickGO (1–100, default 50)
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
returnedYesNumber of annotations in annotations[]
by_aspectYesaspect → [{goId, goName}, ...], deduped on goId
annotationsYes
numberOfHitsYesTotal annotations available upstream
uniprot_accessionYesUniProt accession used to query QuickGO

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark the tool as readOnly, openWorld, idempotent, and non-destructive. The description adds substantial context: the free access, the resolution step to UniProt, the query by geneProductId, and the exact return structure (annotations[] with specific fields plus a by_aspect rollup deduped on goId). No contradictions.

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

Conciseness5/5

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

The description is a single, well-structured paragraph of 4-5 sentences. It front-loads the core purpose and source, then efficiently covers the resolution logic, return format, and deduplication. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the tool's complexity (dependency on another tool, structured return data) and the presence of an output schema (not shown), the description compensates by detailing the return fields and the rollup structure. It omits error handling or limitations, but coverage is high for a tool with many siblings.

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

Parameters3/5

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

Schema coverage is 100% for the three parameters, each with a description. The description reiterates the locus resolution but does not add new semantic meaning beyond the schema. The baseline is 3, and the description does not elevate it further.

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

Purpose5/5

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

The description clearly states 'Fetch Gene Ontology annotations for a plant locus from QuickGO (EBI).' It specifies the resource (QuickGO), the operation (fetch annotations), and the target (plant locus). It distinguishes from siblings like go_enrichment and locus_plant_ontology by mentioning the specific data source and the deduplication strategy.

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

Usage Guidelines4/5

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

The description notes 'Free, no API key,' indicating no authentication barrier. It also explains the dependency on resolve_locus_to_uniprot logic, linking to a sibling tool. However, it does not explicitly state when to use this tool over alternatives like go_enrichment, nor does it give negative guidance. The context is clear but lacks explicit exclusions.

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

locus_literatureLiterature (Europe PMC)A
Read-onlyIdempotent

Search Europe PMC for literature mentioning a plant locus. Free, no API key. Returns up to size results (default 10, capped at 25) with title, authors, journal, year, DOI, PMID, open-access status, citation count, and abstract. For non-Arabidopsis species the species common name is appended to the query to disambiguate locus IDs (rice, maize, ...). Pair with resolve_locus_to_uniprot or ensembl_plants_lookup_locus to ground the locus before fanning out to the literature.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoMax results (1–25, default 10)
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana
include_abstractNoSet false to null out abstractText, which is ~67% of this payload. The response echoes 'abstracts_included' so a null abstract is not mistaken for an article that has none.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitsYes
locusYes
queryYesFinal query string sent to Europe PMC
hitCountYesTotal hits available upstream (may exceed returned)
organismYes
returnedYesNumber of hits actually in hits[]
abstracts_includedNoFalse when include_abstract=False was passed, in which case every abstractText is null because it was not requested — not because the article lacks one. Abstracts are ~67% of this payload.

TDQS

A4.8/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it notes the free access, no API key requirement, result caps and defaults, return fields, and the disambiguation strategy for non-Arabidopsis species. All align with the readOnlyHint and idempotentHint annotations.

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

Conciseness5/5

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

The description is concise and front-loaded, with no wasted words. Every sentence provides unique value: purpose, constraints, return fields, disambiguation behavior, and usage pairing. It is appropriately sized for the tool's complexity.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, output schema present), the description comprehensively covers purpose, behavior, parameter details, return fields, and usage context. The existence of an output schema reduces the need to detail return structure, and the description fills the remaining gaps.

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

Parameters5/5

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

Schema coverage is 100%, but the description still adds meaning: it explains the cap on 'size', provides example inputs for 'locus' and 'organism', and clarifies the effect of 'include_abstract' (null out abstractText and reduce payload). This enhances understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Search' and the resource 'Europe PMC' for literature mentioning a plant locus. It distinguishes this tool from siblings by specifying its unique function of literature search, as opposed to other locus-related tools like orthology or expression.

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

Usage Guidelines4/5

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

The description provides guidance on when to use the tool, e.g., for searching literature given a locus, and suggests pairing with resolution tools. It explains how non-Arabidopsis queries are handled. However, it does not explicitly state when not to use it or mention alternatives among sibling tools, which are mostly non-literature.

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

locus_plant_ontologyPlant Ontology (PO/TO) TermsA
Read-onlyIdempotent

Fetch Plant Ontology (PO) + Trait Ontology (TO) + experimental-condition (PECO) annotations for a plant locus from Planteome (browser.planteome.org, AmiGO2/GOlr; free, no API key). Complements locus_go_annotations: QuickGO serves GO (species-agnostic), Planteome serves the plant-specific ontologies — PO (anatomy + developmental stage), TO (traits). The locus is matched across Planteome's searchable bioentity fields and filtered by the organism's NCBI taxon. Returns annotations[] (term_id / term_name / ontology / aspect / evidence / reference) + a by_ontology rollup ({PO: [{term_id, term_name}, ...], TO: [...], PECO: [...]}) deduped on term_id. Coverage is strong for arabidopsis, rice, maize, grape, soybean, tomato; other organisms return an empty list, not an error. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax annotations from Planteome (1–200, default 100)
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
taxonYesNCBI taxon filter applied, e.g. NCBITaxon:3702
organismYesCanonical organism slug
returnedYesNumber of annotations in annotations[]
annotationsYes
by_ontologyYesnamespace → [{term_id, term_name}, ...], deduped on term_id
numberOfHitsYesTotal annotations available upstream

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds context about data source (Planteome), filtering by NCBI taxon, return format (annotations array and by_ontology rollup), deduplication on term_id, and coverage limitations. No contradictions.

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

Conciseness4/5

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

The description is well-structured with front-loaded purpose and key details. It is slightly verbose (5 sentences) but every sentence contributes value, including usage guidelines and return format. Could shorten coverage explanation but still concise.

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

Completeness5/5

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

Given the output schema exists, the description explains return format (annotations[] and by_ontology rollup), covers defaults (organism, limit), and notes behavior for unsupported organisms (empty list, not error). Complete for this tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema itself documents all parameters adequately. The description adds minor examples (AT1G01010, Os01g0100100) and notes that organism accepts multiple forms, but does not add substantial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool fetches Plant Ontology (PO), Trait Ontology (TO), and experimental-condition (PECO) annotations from Planteome for a plant locus. It distinguishes itself from the sibling tool 'locus_go_annotations' by specifying that QuickGO serves GO while Planteome serves plant-specific ontologies.

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

Usage Guidelines5/5

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

Provides explicit guidance on when to use this tool vs alternatives: 'Complements locus_go_annotations: QuickGO serves GO (species-agnostic), Planteome serves the plant-specific ontologies — PO (anatomy + developmental stage), TO (traits).' Also mentions coverage limitations and default organism.

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

locus_variantsKnown VariantsA
Read-onlyIdempotent

List natural (germline) variants overlapping a locus's genomic span via Ensembl (rest.ensembl.org; free, no key). Resolves the locus → gene coordinates, then returns EVA/dbSNP-sourced SNPs and indels with id, source, consequence class, alleles, and clinical significance. variant_count is the true overlap total; the variant list is capped for payload size with truncated flagged. Opens the variation axis (distinct from get_sequence / ensembl_region_query). Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax variant rows to return. 'variant_count' always reports the true pre-cap total and 'truncated' says whether the cap bit.
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
locusYes
regionYesQueried gene span, e.g. '1:33666-37840'
gene_endNoGene span end (1-based)
organismYesResolved Ensembl species slug
variantsNoPer-variant {id, source, consequence_type, alleles, …}
truncatedYesTrue if the variant list was capped
gene_startNoGene span start (1-based)
variant_countYesTotal overlapping variants (pre-cap)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds valuable context: it explains the data source, the resolution process (locus to gene coordinates), the variant_count vs capped list behavior, and the 'truncated' flag. No contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with core purpose, immediately followed by essential details. No filler; every clause adds value.

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

Completeness5/5

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

Despite the tool's moderate complexity (3 parameters, external API, multiple organisms, output cap), the description covers all essential aspects: source, data content, organism support, cap behavior, and sibling differentiation. Output schema exists, so return values need not be elaborated.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond schema by providing examples for locus (AT1G01010), clarifying organism parameter accepted formats (slug, name, taxid), and explaining the limit parameter's cap and truncation reporting.

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

Purpose5/5

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

The description clearly states the tool lists natural variants overlapping a locus's genomic span, specifying the source (Ensembl via EVA/dbSNP), the data fields returned, and explicitly distinguishes it from sibling tools (get_sequence, ensembl_region_query). The verb 'list' and resource 'variants' are specific.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool (to retrieve germline variants) and explicitly names two alternatives it is distinct from. However, it does not elaborate on when not to use it or list other possible alternatives among the many sibling tools.

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

orthodb_orthologsOrthoDB: OrthologsA
Read-onlyIdempotent

Resolve a locus to its OrthoDB ortholog group and cross-species member genes (data.orthodb.org; free, no key). Searches at the Viridiplantae level, then returns the group metadata (name, evolutionary rate) and member genes grouped by organism (organism, gene id, description). organism_count is the true cluster total; the member list is capped with truncated flagged. found=false when the locus maps to no ortholog group. Works for all 12 organisms. NOTE: unlike the other locus tools, organism= does NOT scope the search — the group is resolved from the locus id alone at the Viridiplantae level, and organism is only validated and echoed back. Passing a mismatched organism therefore still returns the locus's real group.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax ortholog member rows to return. 'member_count' always reports the true pre-cap total and 'truncated' says whether the cap bit.
locusYese.g. AT1G01060 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. Validated and echoed only: it does NOT scope the OrthoDB search, which keys on the locus id at the Viridiplantae levelarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if the locus maps to an ortholog group
groupNoGroup metadata {id, name, evolutionary_rate, level_name, …}
locusYes
membersNoPer-gene {organism, gene_id, xref, description}
organismYesCanonical organism as requested — echoed, not inferred from the hit. Does not scope the search (see class docstring)
truncatedYesTrue if the member list was capped
member_countYesMember genes returned (post-cap)
organism_countYesNumber of member organisms in the whole ortholog group (pre-cap) — the true cluster total, unaffected by the member cap below

TDQS

A4.7/5.0
Behavior5/5

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

Discloses important behaviors beyond annotations: that organism count is the true cluster total, member list is capped with truncated flagged, and organism is only validated and echoed. This adds significant value to the readOnlyHint and idempotentHint already present.

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

Conciseness4/5

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

The description is well-structured with key information front-loaded (purpose, data source, free use). While slightly verbose, every sentence adds value and the length is justified by the complexity of the tool's behavior.

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

Completeness5/5

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

Covers all necessary aspects: data source, taxonomic scope, return fields, truncation behavior, handling of missing results, and organism parameter validation. Given the existing output schema, this provides a complete picture.

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

Parameters5/5

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

Adds substantial meaning beyond the input schema: explains the organism parameter's non-scoping behavior, describes truncation logic for limit, and provides an example for locus. With 100% schema coverage, this goes well beyond baseline.

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

Purpose5/5

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

The description clearly states the tool resolves a locus to its OrthoDB ortholog group and returns cross-species member genes. It also explicitly distinguishes itself from other locus tools by noting that the organism parameter does not scope the search, setting it apart from siblings.

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

Usage Guidelines4/5

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

Provides clear guidance on when to use (for ortholog resolution at Viridiplantae level) and explicitly warns that organism does not scope the search. However, it could more directly state which alternative tools to use for other types of homology searches.

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

panther_familyPANTHER: Protein FamilyA
Read-onlyIdempotent

Fetch the PANTHER protein-family classification for a locus (pantherdb.org; free, no key). Returns the PANTHER family and subfamily (id + name) plus curated GO terms grouped by aspect (molecular_function / biological_process / cellular_component), the PANTHER protein class, and pathways. found=false when PANTHER cannot classify the locus. Complements the sequence-homology tools (gramene_homologs / consensus_homologs) with an evolutionary-family view. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01060 (Arabidopsis), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if PANTHER classified the locus
locusYes
pathwaysNo
accessionNoPANTHER mapped accession
family_idNoPANTHER family id, e.g. PTHR12802
family_nameNo
subfamily_idNoe.g. PTHR12802:SF176
protein_classNo
subfamily_nameNo
go_biological_processNo
go_cellular_componentNo
go_molecular_functionNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, not destructive. Description adds that it is free, no key, returns found=false when unclassifiable, and sources from pantherdb.org. Adds behavioral context beyond annotations.

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

Conciseness5/5

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

Two efficient sentences that front-load the action and output, then add context on usage. No wasted words.

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

Completeness5/5

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

Given the complexity (multiple output types, 2 parameters, 12 organisms), the description covers all key aspects: data returned, behavior when no classification, source, default organism, and complementary relationship to siblings.

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

Parameters4/5

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

Schema coverage is 100%, but description adds concrete examples for locus (e.g., AT1G01060) and explains organism accepts canonical slug, scientific/common name, or NCBI taxid. Adds value beyond schema.

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

Purpose5/5

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

Clearly states it fetches PANTHER classification for a locus, listing returns (family/subfamily IDs/names, GO terms, protein class, pathways). Distinguishes itself from sequence-homology tools (gramene_homologs/consensus_homologs) by offering an evolutionary-family view.

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

Usage Guidelines4/5

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

Explicitly says it complements sequence-homology tools, implying when to use. Specifies it works for all 12 organisms and defaults to arabidopsis_thaliana. Could be more explicit about when not to use, but the complementary statement provides guidance.

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

phytozome_lookup_locusPhytozome: Locus MetadataA
Read-onlyIdempotent

Fetch a gene record from Phytozome BioMart (phytozome-next.jgi.doe.gov). Defaults to arabidopsis_thaliana; pass organism= for other Phytozome proteomes (slug, scientific/common name, or NCBI taxid — e.g. glycine_max, sorghum_bicolor). Locus is the source-genome gene name (e.g. AT1G01010, Glyma.01G000100). Returns organism_name, gene_name, chromosome, gene_start, gene_end, strand, description.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01010 (Arabidopsis), Glyma.01G000100 (soybean)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
strandYesString — typically "1" or "-1"
gene_endYesString — BioMart TSV is untyped
gene_nameYes
chromosomeYes
gene_startYesString — BioMart TSV is untyped
descriptionYes
organism_nameYes

TDQS

A4.6/5.0
Behavior4/5

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

Description adds context beyond annotations (readOnlyHint, idempotentHint) by detailing the source URL and return field names. No contradictions; it complements annotation with operational details.

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

Conciseness5/5

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

Two sentences efficiently convey purpose, defaults, parameter formats, and return fields. Information is front-loaded and every sentence adds value.

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

Completeness5/5

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

Given the presence of an output schema (implied by return field list) and strong annotations, the description fully covers what the tool does, its parameters, and return values. No gaps for a lookup tool.

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

Parameters5/5

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

Schema coverage is 100% with both parameters described. Description adds examples for locus format and clarifies organism parameter accepts multiple name forms, enhancing understanding beyond schema.

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

Purpose5/5

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

The description clearly states the tool fetches a gene record from Phytozome BioMart, specifying the data source and return fields. It distinguishes from siblings like ensembl_plants_lookup_locus by naming the specific database.

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

Usage Guidelines4/5

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

Description explains defaults (arabidopsis_thaliana) and how to specify organism via slug, name, or taxid. It implies usage context for Phytozome genes but could be more explicit about when to choose this over alternative tools for other databases.

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

plantcyc_locus_infoPlantCyc: Metabolic PathwaysA
Read-onlyIdempotent

Fetch metabolic annotation for a locus from PlantCyc / the Plant Metabolic Network (pmn.plantcyc.org; free BioCyc web-services API, no key). Walks gene → enzyme → catalyzed reactions → PlantCyc pathways in the organism's PGDB, returning enzymes[] + reactions[] (id/name) + pathways[] (id/name) — the metabolic-pathway view KEGG and GO don't provide. A non-enzymatic gene (e.g. a transcription factor) returns found=false with empty lists, not an error. reaction_count / pathway_count report true totals even when the lists are capped. 11 organisms have a PGDB (arabidopsis, rice, maize, soybean, grape, poplar, tomato, barley, sorghum, medicago, brachypodium); wheat is not yet mapped. Defaults to arabidopsis_thaliana (AraCyc, the best-curated); pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT3G51240 (Arabidopsis), Os11g0530600 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if the locus resolved to a metabolic gene
locusYes
orgidYesPlantCyc PGDB org id, e.g. ARA (AraCyc)
enzymesYesProduct monomer (enzyme) frame ids
organismYesCanonical organism slug
pathwaysYes
reactionsYes
gene_frameNoResolved PGDB gene frame id
pathway_countYesTotal distinct pathways (pre-cap)
reaction_countYesTotal distinct reactions (pre-cap)
gene_common_nameNoGene common name in the PGDB

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint, etc.), the description adds that the tool walks gene→enzyme→catalyzed reactions→pathways, returns found=false for non-enzymatic genes without error, caps lists but reports true totals via reaction_count/pathway_count, and details response structure (enzymes[], reactions[], pathways[]). No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with front-loaded purpose, followed by walkthrough, special cases, count behavior, and supported organisms. Every sentence adds value, though it is somewhat lengthy. No redundancy.

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

Completeness5/5

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

Given the presence of annotations and an output schema, the description provides all necessary information: purpose, input parameters with extra context, behavioral details (non-enzymatic handling, capped lists, true totals), supported organisms, and contrast with other resources. It is complete for an agent to select and invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds significant meaning: for 'organism', it specifies accepted formats (slug, scientific/common name, NCBI taxid) and lists the 11 supported organisms; for 'locus', it provides examples (AT3G51240, Os11g0530600). Default organism is stated. This goes beyond the schema alone.

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

Purpose5/5

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

The description clearly states the tool fetches metabolic annotations for a locus from PlantCyc, specifying the walkthrough from gene to enzyme to reactions to pathways. It explicitly distinguishes itself from KEGG and GO, and lists supported organisms and the default. The verb 'fetch' with the resource 'metabolic annotation for a locus' is specific.

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

Usage Guidelines4/5

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

The description indicates when to use (to get metabolic-pathway view not provided by KEGG/GO) and which organisms are supported (listing 11, noting wheat is not mapped). It also explains behavior for non-enzymatic genes. However, it does not explicitly mention when not to use or directly contrast with siblings like kegg_pathways, though the differentiation is implied.

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

resolve_locus_to_uniprotResolve Locus → UniProtA
Read-onlyIdempotent

Resolve a plant locus to its canonical UniProtKB record. Prefers reviewed (Swiss-Prot) entries; falls back to unreviewed (TrEMBL) when no curated record exists (common for non-Arabidopsis plants). organism accepts a canonical slug, scientific/common name, or NCBI taxid (default arabidopsis_thaliana; e.g. oryza_sativa, zea_mays). Returns primaryAccession, uniProtkbId, entryType, recommendedName, geneNames, organism, taxonId, sequenceLength, web_url. This is the protein-side entry point — pair with InterPro / AlphaFold / Reactome / structural-bio tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
taxonIdNoNCBI taxonomy ID
web_urlNoBrowser URL for the UniProt entry
organismNoScientific name
reviewedYesTrue if Swiss-Prot (curated)
entryTypeYese.g. 'UniProtKB reviewed (Swiss-Prot)' or '... (TrEMBL)'
geneNamesNoGene symbols, e.g. ['NAC001']
locus_queryYesThe locus identifier the user asked about
uniProtkbIdYesUniProtKB ID, e.g. NAC1_ARATH
sequenceLengthNoProtein length in residues
recommendedNameNoRecommended protein name
primaryAccessionYesUniProt accession, e.g. Q0WV96
upstream_versionNoUniProt release that produced THIS record, as stated by the upstream's own header (e.g. '2026_02'). null means UniProt did not state one — never that no release exists, and never inferred from a separate metadata call, which can describe a different release than the one that answered.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, conveying safety. The description adds critical behavioral detail: it prefers Swiss-Prot and falls back to TrEMBL, which is beyond annotation scope.

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

Conciseness4/5

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

The description is well-structured with a clear first sentence, followed by details. It is not overly verbose, though the return field list could be moved to the output schema. Every sentence is informative.

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

Completeness5/5

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

Given the tool's simplicity (2 params, clear schema, output schema exists, annotations cover safety), the description covers purpose, usage, parameter details, fallback logic, and pairing guidance. It is comprehensive.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for both parameters, so baseline is 3. The description adds value by explicitly listing accepted formats for organism (slug, name, taxid) and providing examples, enhancing understanding.

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

Purpose5/5

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

The description clearly states it resolves a plant locus to its canonical UniProtKB record, specifying the verb, resource, and scope. It differentiates from siblings by calling it the 'protein-side entry point' and listing paired tools.

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

Usage Guidelines4/5

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

The description advises pairing with InterPro, AlphaFold, etc., indicating when to use this tool. However, it does not explicitly contrast with alternative locus tools or state when not to use it, leaving some ambiguity.

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

string_interactionsSTRING: Interaction NetworkA
Read-onlyIdempotent

Fetch protein-protein interaction partners from STRING-DB (string-db.org). Accepts either a UniProt accession or a locus identifier — the latter is resolved via UniProt first. Defaults to arabidopsis_thaliana; pass organism= for other plant species (slug, scientific/common name, or NCBI taxid). Returns first-neighbor partners with the combined STRING score plus per-channel sub-scores (experimental, database, textmining, predicted).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of partners to return
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana
locus_or_accessionYesUniProt accession (Q0WV96) or locus (AT1G01010)

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesThe locus or accession the user passed
organismYesPlant organism canonical slug, e.g. arabidopsis_thaliana
partnersYes
accessionYesUniProt accession actually queried at STRING

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context: it resolves loci via UniProt, returns first-neighbor partners with combined STRING score plus per-channel sub-scores. This goes beyond annotations without contradicting them.

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

Conciseness5/5

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

The description is three sentences long, each carrying distinct and valuable information: tool purpose, input handling, and output details. No filler or redundancy; every sentence earns its place.

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

Completeness5/5

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

Given that an output schema exists, the description appropriately highlights key output features (first-neighbor partners, scores) without needing to enumerate fields. It covers input resolution, organism specification, and default settings, making it self-contained for an API tool.

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

Parameters4/5

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

All parameters are described in the input schema (100% coverage). The description adds further meaning by explaining the resolution of locus identifiers and the flexible organism specification (slug, name, taxid), which is not fully captured in the schema descriptions.

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

Purpose4/5

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

The description clearly states it fetches protein-protein interaction partners from STRING-DB, specifying input types (UniProt accession or locus identifier) and default organism. It is specific and actionable, but does not explicitly contrast with sibling tools that also provide interaction data (e.g., bar_aiv_interactions, experimental_interactions), which keeps it from a 5.

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

Usage Guidelines3/5

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

The description explains input requirements and how to specify organism, including resolution of locus IDs. However, it provides no guidance on when to use STRING-DB versus alternative interaction sources, nor any conditions under which this tool is preferred or should be avoided.

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

tair_locus_infoTAIR-Style Locus SummaryA
Read-onlyIdempotent

Fetch the TAIR curator-vetted Arabidopsis locus summary. Served via BAR/ThaleMine (U Toronto, Global Core Biodata Resource 2023) since TAIR's free per-locus REST API is gated behind a paid Phoenix Bioinformatics subscription. Returns TAIR curator summary + Araport11 computational description + NCBI Gene ID + cross-DB aliases (RefSeq, UniProt, TIGR locus-model IDs). Arabidopsis only. Alias of bar_gene_summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYesArabidopsis AGI locus, e.g. AT1G01010

Output Schema

ParametersJSON Schema
NameRequiredDescription
agiNoAGI primary identifier echoed by ThaleMine, e.g. "AT1G01010"
locusYes
symbolNoGene symbol, e.g. "NAC001"
aliasesNoCross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded.
speciesYes
synonymsNoTAIR aliases (CSV from Gene.tairAliases, split on commas + stripped)
full_nameNoGene name from ThaleMine
source_urlYesThaleMine endpoint URL for traceability
ncbi_gene_idNoNCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref
tair_locus_idNoTAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935"
curator_summaryNoGene.tairCuratorSummary — the TAIR-curated functional summary prose
brief_descriptionNoGene.briefDescription — short blurb (often same as full_name)
tair_short_descriptionNoGene.tairShortDescription — TAIR-specific short description
computational_descriptionNoGene.tairComputationalDescription — Araport11-sourced computed description

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already provide idempotent, read-only, non-destructive hints. The description adds valuable behavioral details: it returns curator summary, computational description, NCBI Gene ID, and cross-database aliases, and identifies the data source. No contradictions.

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

Conciseness5/5

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

The description is compact and front-loaded, conveying essential information in two sentences with no redundancy. Every sentence adds value.

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

Completeness5/5

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

Given the presence of an output schema (not shown), the description appropriately omits return value details. It covers purpose, source, scope, and relationship to siblings, which is complete for a single-parameter tool.

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

Parameters4/5

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

Schema coverage is 100% for the single 'locus' parameter, with a descriptive example. The description adds the Arabidopsis-only restriction, which provides semantic context beyond the schema. This justifies a score above the baseline of 3.

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

Purpose5/5

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

The description clearly states the tool fetches a TAIR curator-vetted Arabidopsis locus summary. It specifies the resource (BAR/ThaleMine) and distinguishes itself from siblings by mentioning it's an alias of bar_gene_summary and restricted to Arabidopsis.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool (for TAIR-style curator summaries), notes it is specific to Arabidopsis, and provides context that it replaces a paid TAIR API. The alias reference clarifies its relationship to bar_gene_summary.

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

tf_binding_motifsJASPAR: TF Binding MotifsA
Read-onlyIdempotent

Fetch curated transcription-factor DNA binding motifs for a locus from JASPAR (jaspar.elixir.no; free, no key) — the cis-regulatory view. Resolves the locus → UniProt accession + gene symbol, searches JASPAR by symbol scoped to the organism's taxid, then CONFIRMS each candidate by matching the accession against the profile's uniprot_ids. Returns per motif the JASPAR matrix id, TF class/family, assay type (SELEX / ChIP-seq / PBM / DAP-seq), an IUPAC consensus derived from the position-frequency matrix (e.g. CACGTG, the G-box/ABRE core), motif length, PubMed refs, and an SVG sequence-logo URL. IMPORTANT: JASPAR's name search is fuzzy, so name-similarity hits belonging to a DIFFERENT gene are returned separately in name_only_matches and must NOT be attributed to this locus; only motifs is UniProt-confirmed. found=false means the gene has no curated profile (not a TF, or its family is unprofiled for that species) — a normal outcome, not an error. Use jaspar_motif to retrieve the raw matrix for any matrix_id. Coverage is Arabidopsis-heavy (1236 profiles) and thin elsewhere (maize 131, soybean 91, wheat 58, tomato 51, rice 10; Brachypodium and sorghum have none). Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
locusYese.g. AT2G46830 (Arabidopsis CCA1), Os01g0100100 (rice RAP-DB)
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesTrue if any profile was UniProt-confirmed for this locus
locusYes
motifsNoUniProt-confirmed binding profiles
tax_idYesNCBI taxid the JASPAR search was scoped to
accessionYesResolved UniProt accession
truncatedYesTrue if the motif list was capped
motif_countYesTotal confirmed profiles (pre-cap)
name_only_matchesNoName-similarity hits belonging to a DIFFERENT gene [{matrix_id, name, uniprot_ids}] — not this locus's motifs
gene_names_searchedNoGene symbols used as JASPAR search keys

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses many behavioral traits beyond annotations: it resolves locus to UniProt, confirms hits by accession matching, returns name_only_matches separately, explains coverage biases, and clarifies normal outcomes. Annotations only provide basic hints.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose. Every sentence adds value, explaining the process, important caveats, and usage. It is concise given the tool's complexity.

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

Completeness5/5

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

The description covers all key aspects: what the tool does, how it works, what is returned, important behavioral notes, coverage limitations, and relation to siblings. The existence of an output schema complements the description.

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

Parameters5/5

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

The input schema covers both parameters with descriptions. The description adds meaning by explaining the default organism, accepted formats, and providing locus examples. This enriches the semantic understanding.

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

Purpose5/5

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

The description clearly states the tool fetches curated transcription-factor DNA binding motifs for a locus from JASPAR. It specifies the source, the process, and what is returned, and distinguishes from sibling tool jaspar_motif.

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

Usage Guidelines4/5

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

The description provides guidance on when to use this tool by noting that jaspar_motif is for raw matrices, and explains that found=false is a normal outcome. It also contrasts with sibling tools implicitly. However, it does not explicitly list when not to use it.

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

vep_annotateVEP: Variant EffectA
Read-onlyIdempotent

Predict a variant's molecular consequences with Ensembl VEP (rest.ensembl.org; free, no key). Variant-first (not locus-first): supply an Ensembl region (chr:start-end:strand, e.g. '1:10000-10000:1') and an alternate allele (e.g. 'C'); returns the most-severe consequence plus one row per overlapping transcript (consequence terms, IMPACT, and SIFT/PolyPhen when the variant is coding-missense). found=false when Ensembl reports no overlapping feature. Works for all 12 organisms. Defaults to arabidopsis_thaliana; pass organism= for other species.

ParametersJSON Schema
NameRequiredDescriptionDefault
alleleYesAlternate allele, e.g. 'C' (or 'A/C', an insertion, etc.)
regionYesEnsembl region chr:start-end:strand, e.g. '1:10000-10000:1'
organismNoPlant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxidarabidopsis_thaliana

Output Schema

ParametersJSON Schema
NameRequiredDescription
endNo
foundYesTrue if VEP returned an overlapping feature
inputNoVEP echo of the parsed input
startNo
alleleYesAlternate allele, e.g. 'C'
regionYesEnsembl region, e.g. '1:10000-10000:1'
organismYesResolved Ensembl species slug
allele_stringNo
assembly_nameNoAssembly the call is against
seq_region_nameNo
most_severe_consequenceNoMost severe SO term
transcript_consequencesNoPer-transcript {gene_id, transcript_id, consequence_terms, impact, sift_*, …}

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare safe, idempotent, read-only. The description adds significant behavioral context: free API, no key needed, returns most-severe consequence per transcript, found=false when no features, works for 12 organisms, default organism, and output format. Adds value beyond annotations with no contradictions.

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

Conciseness4/5

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

The description is well-structured with front-loaded core purpose, followed by details on input, output, and scope. While it is on the longer side, all sentences provide useful information and are necessary given the tool's complexity.

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

Completeness5/5

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

The tool has 3 parameters (100% schema coverage), an output schema, and clear annotations. The description covers remaining aspects: free API, organism support, found flag, and consequence detail. Everything an agent needs is present.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description enriches parameters with format examples for region (chr:start-end:strand), allele example ('C'), and organism accepted types (slug, name, taxid) and default. This provides valuable guidance beyond schema.

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

Purpose5/5

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

The description uses specific verb 'predict' and resource 'molecular consequences with Ensembl VEP'. It explicitly states the tool is variant-first (not locus-first), and distinguishes from sibling tools that handle loci or other analyses, making the purpose clear.

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

Usage Guidelines4/5

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

The description explains when to use (variant effect prediction), specifies variant-first approach, and provides examples of input format. It does not explicitly exclude alternative tools but implies context through sibling list; clear usage context is given.

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.

  1. 2 tool updatesv1.21.0
    • Addedconsensus_homologs
    • Addedgene_report
  2. 8 tool updatesv1.20.0
    • Removedconsensus_homologs
    • Removedgene_report
    • Changedgramene_homologs3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Max homolog rows to return. 'total' always reports the true pre-cap count and 'truncated' says whether the cap bit.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / total / description
        Previous value: -"Number of homologs after filtering"New value: +"Number of homologs after filtering, BEFORE the row cap"
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "default": false,
        +  "description": "True when the row list was capped (< total); pass limit= to change the cap",
        +  "title": "Truncated",
        +  "type": "boolean"
        +}
    • Changedinterpro_domains1 field changed
      • addedOutput schema / properties / upstream_version
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "InterPro release that produced THIS response, as stated by the upstream's own header (e.g. '109.0'). null means InterPro did not state one — never that no release exists, and never inferred from a separate metadata call, which can describe a different release than the one that answered.",
        +  "title": "Upstream Version"
        +}
    • Changedlocus_literature2 fields changed
      • addedInput schema / properties / include_abstract
        Added value: +{
        +  "default": true,
        +  "description": "Set false to null out abstractText, which is ~67% of this payload. The response echoes 'abstracts_included' so a null abstract is not mistaken for an article that has none.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / abstracts_included
        Added value: +{
        +  "default": true,
        +  "description": "False when include_abstract=False was passed, in which case every abstractText is null because it was not requested — not because the article lacks one. Abstracts are ~67% of this payload.",
        +  "title": "Abstracts Included",
        +  "type": "boolean"
        +}
    • Changedlocus_variants1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 500,
        +  "description": "Max variant rows to return. 'variant_count' always reports the true pre-cap total and 'truncated' says whether the cap bit.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedorthodb_orthologs1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Max ortholog member rows to return. 'member_count' always reports the true pre-cap total and 'truncated' says whether the cap bit.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedresolve_locus_to_uniprot1 field changed
      • addedOutput schema / properties / upstream_version
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "UniProt release that produced THIS record, as stated by the upstream's own header (e.g. '2026_02'). null means UniProt did not state one — never that no release exists, and never inferred from a separate metadata call, which can describe a different release than the one that answered.",
        +  "title": "Upstream Version"
        +}
  3. 18 tool updatesv1.19.4
    • Addedaragwas_associations
    • Addedatted_coexpression
    • Changedbatch_atted_coexpression1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_bar_aiv_interactions1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_bar_gene_summary1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_ensembl_plants_lookup_locus1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Addedbatch_get_gene_xrefs
    • Changedbatch_gramene_homologs1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_kegg_pathways1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_locus_go_annotations1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_locus_literature1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_phytozome_lookup_locus1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_resolve_locus_to_uniprot1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedbatch_string_interactions1 field changed
      • changedOutput schema / properties / count / description
        Previous value: -"Number of loci in the input list"New value: +"Number of distinct loci queried, returned (== len(results) + len(errors)). The input list is de-duplicated first, so this is LOWER than the number of loci you sent if you sent a duplicate — that is de-duplication, not a dropped locus."
    • Changedexperimental_interactions1 field changed
      • changedOutput schema / properties / evidence_count / description
        Previous value: -"Total evidence records across all partners"New value: +"Total evidence records across all partners (pre-cap) — counted over every partner upstream, not only the partners listed here"
    • Addedlocus_literature
    • Addedlocus_plant_ontology
    • Changedorthodb_orthologs4 fields changed
      • changedInput schema / properties / organism / description
        Previous value: -"Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid"New value: +"Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. Validated and echoed only: it does NOT scope the OrthoDB search, which keys on the locus id at the Viridiplantae level"
      • changedOutput schema / description
        Previous value: -"OrthoDB ortholog group + cross-species member genes for a locus.\n\n``found=False`` means the locus maps to no Viridiplantae ortholog group.\n``organism_count`` is the true cluster total even when members are capped."New value: +"OrthoDB ortholog group + cross-species member genes for a locus.\n\n``found=False`` means the locus maps to no Viridiplantae ortholog group.\n``organism_count`` is the true cluster total even when members are capped.\n\n``organism`` is an echo of the request, NOT a property of the result: the\nsearch keys on the locus id at the Viridiplantae level, so the group comes\nback the same whichever organism was declared."
      • changedOutput schema / properties / organism / description
        Previous value: -"Resolved canonical organism"New value: +"Canonical organism as requested — echoed, not inferred from the hit. Does not scope the search (see class docstring)"
      • changedOutput schema / properties / organism_count / description
        Previous value: -"Number of member organisms (clusters)"New value: +"Number of member organisms in the whole ortholog group (pre-cap) — the true cluster total, unaffected by the member cap below"
  4. 20 tool updatesv1.18.2
    • Addedalphafold_structure
    • Addedarabidopsis_natural_variation
    • Removedatted_coexpression
    • Removedbatch_get_gene_xrefs
    • Addedensembl_region_query
    • Addedexperimental_interactions
    • Addedexperimental_structures
    • Addedgene_report
    • Addedget_sequence
    • Addedgo_enrichment
    • Addedinterpro_domains
    • Addedjaspar_motif
    • Addedlocus_gene_rifs
    • Removedlocus_literature
    • Addedlocus_variants
    • Addedorthodb_orthologs
    • Addedpanther_family
    • Changedplantcyc_locus_info21 fields changed
      • changedInput schema / properties / locus / description
        Previous value: -"TAIR-canonical locus, e.g. AT1G01010"New value: +"e.g. AT3G51240 (Arabidopsis), Os11g0530600 (rice RAP-DB)"
      • addedInput schema / properties / organism
        Added value: +{
        +  "default": "arabidopsis_thaliana",
        +  "description": "Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid",
        +  "type": [
        +    "string",
        +    "integer"
        +  ]
        +}
      • addedOutput schema / $defs
        Added value: +{
        +  "PlantCycPathway": {
        +    "additionalProperties": true,
        +    "description": "One PlantCyc/PMN pathway the locus participates in.",
        +    "properties": {
        +      "id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Pathway frame id, e.g. PWY-6787",
        +        "title": "Id"
        +      },
        +      "name": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Pathway common name, e.g. flavonoid biosynthesis",
        +        "title": "Name"
        +      }
        +    },
        +    "title": "PlantCycPathway",
        +    "type": "object"
        +  },
        +  "PlantCycReaction": {
        +    "additionalProperties": true,
        +    "description": "One reaction catalyzed by a locus's gene product (PlantCyc/PMN).",
        +    "properties": {
        +      "id": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Reaction frame id, e.g. RXN-7775",
        +        "title": "Id"
        +      },
        +      "name": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Reaction common name, if the frame has one",
        +        "title": "Name"
        +      }
        +    },
        +    "title": "PlantCycReaction",
        +    "type": "object"
        +  }
        +}
      • changedOutput schema / description
        Previous value: -"PlantCyc stub response — adds ``plantcyc_web_url`` to the shared shape."New value: +"PlantCyc / PMN metabolic annotation for a locus.\n\nWalks gene → enzyme → reactions → pathways in the organism's PGDB via the\nfree BioCyc web-services API. ``found=False`` with empty lists when the\nlocus has no metabolic annotation (e.g. a non-enzymatic gene like a\ntranscription factor) — this is a normal result, not an error.\n``reaction_count`` / ``pathway_count`` are the true totals even when the\nreturned lists are capped (see ``plantcyc.MAX_REACTIONS`` / ``MAX_PATHWAYS``)."
      • removedOutput schema / properties / alternatives
        Removed value: -{
        -  "description": "Tool names users should call instead",
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Alternatives",
        -  "type": "array"
        -}
      • removedOutput schema / properties / alternatives_note
        Removed value: -{
        -  "description": "What the alternatives do and do NOT cover",
        -  "title": "Alternatives Note",
        -  "type": "string"
        -}
      • addedOutput schema / properties / enzymes
        Added value: +{
        +  "description": "Product monomer (enzyme) frame ids",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Enzymes",
        +  "type": "array"
        +}
      • addedOutput schema / properties / found
        Added value: +{
        +  "description": "True if the locus resolved to a metabolic gene",
        +  "title": "Found",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / gene_common_name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Gene common name in the PGDB",
        +  "title": "Gene Common Name"
        +}
      • addedOutput schema / properties / gene_frame
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Resolved PGDB gene frame id",
        +  "title": "Gene Frame"
        +}
      • addedOutput schema / properties / organism
        Added value: +{
        +  "description": "Canonical organism slug",
        +  "title": "Organism",
        +  "type": "string"
        +}
      • addedOutput schema / properties / orgid
        Added value: +{
        +  "description": "PlantCyc PGDB org id, e.g. ARA (AraCyc)",
        +  "title": "Orgid",
        +  "type": "string"
        +}
      • addedOutput schema / properties / pathway_count
        Added value: +{
        +  "description": "Total distinct pathways (pre-cap)",
        +  "title": "Pathway Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / pathways
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/PlantCycPathway"
        +  },
        +  "title": "Pathways",
        +  "type": "array"
        +}
      • removedOutput schema / properties / plantcyc_web_url
        Removed value: -{
        -  "description": "Browser URL for the PlantCyc gene page",
        -  "title": "Plantcyc Web Url",
        -  "type": "string"
        -}
      • removedOutput schema / properties / probed_at
        Removed value: -{
        -  "description": "ISO date of the last live access probe (YYYY-MM-DD)",
        -  "title": "Probed At",
        -  "type": "string"
        -}
      • removedOutput schema / properties / rationale
        Removed value: -{
        -  "description": "Why this backend is gated",
        -  "title": "Rationale",
        -  "type": "string"
        -}
      • addedOutput schema / properties / reaction_count
        Added value: +{
        +  "description": "Total distinct reactions (pre-cap)",
        +  "title": "Reaction Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / reactions
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/PlantCycReaction"
        +  },
        +  "title": "Reactions",
        +  "type": "array"
        +}
      • removedOutput schema / properties / status
        Removed value: -{
        -  "description": "Always \"subscription_required\" — upstream REST is paid-only.",
        -  "title": "Status",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "locus",
        -  "status",
        -  "probed_at",
        -  "rationale",
        -  "alternatives",
        -  "alternatives_note",
        -  "plantcyc_web_url"
        -]New value: +[
        +  "locus",
        +  "organism",
        +  "orgid",
        +  "found",
        +  "enzymes",
        +  "reactions",
        +  "pathways",
        +  "reaction_count",
        +  "pathway_count"
        +]
    • Addedtf_binding_motifs
    • Addedvep_annotate
  5. 32 tool updatesv1.8.0
    • First observedanalyze_locus_synth
    • First observedatted_coexpression
    • First observedbar_aiv_interactions
    • First observedbar_efp_expression
    • First observedbar_gene_summary
    • First observedbatch_atted_coexpression
    • First observedbatch_bar_aiv_interactions
    • First observedbatch_bar_gene_summary
    • First observedbatch_ensembl_plants_lookup_locus
    • First observedbatch_get_gene_xrefs
    • First observedbatch_gramene_homologs
    • First observedbatch_kegg_pathways
    • First observedbatch_locus_go_annotations
    • First observedbatch_locus_literature
    • First observedbatch_phytozome_lookup_locus
    • First observedbatch_resolve_locus_to_uniprot
    • First observedbatch_string_interactions
    • First observedbiological_context_synth
    • First observedblast_sequence
    • First observedconsensus_homologs
    • First observedensembl_plants_lookup_locus
    • First observedfind_homologs_synth
    • First observedget_gene_xrefs
    • First observedgramene_homologs
    • First observedkegg_pathways
    • First observedlocus_go_annotations
    • First observedlocus_literature
    • First observedphytozome_lookup_locus
    • First observedplantcyc_locus_info
    • First observedresolve_locus_to_uniprot
    • First observedstring_interactions
    • First observedtair_locus_info

TDQS

A3.7/5.0

Scored across 50 tools

Disambiguation2/5

Several tools occupy overlapping functional territory: tair_locus_info is literally an alias of bar_gene_summary, and locus_variants, arabidopsis_natural_variation, and aragwas_associations all return variant data for a locus. The many batch_* duplicates and synthesis wrappers such as gene_report, analyze_locus_synth, and biological_context_synth further blur boundaries, even though individual descriptions often clarify the intended use case.

Naming Consistency3/5

Names are consistently snake_case and group into recognizable families like locus_*, get_*, and batch_*, but the set mixes verb-first names (get_sequence, resolve_locus_to_uniprot), resource-first names (locus_literature, string_interactions), and source-first names (bar_gene_summary, phytozome_lookup_locus). It is readable and searchable, but there is no single predictable verb_noun convention across the server.

Tool Count1/5

Fifty tools is excessive for one MCP server, especially because 12 are batc_* duplicates of existing single-locus tools and several synthesis wrappers overlap with one another. Even for broad plant genomics, this surface would be far easier to navigate as multiple focused servers or with batc functionality merged into the base tools.

Completeness4/5

The server covers an impressively broad read-only plant genomics workflow: sequence retrieval, BLAST, GO and ontology annotations, pathways, structures, variants, interactions, homology, motifs, literature, and synthesis reports. Minor gaps exist—such as no tissue/developmental expression atlas or synteny browser—but agents can work around them using the existing tools and batch/synthesis endpoints.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    F
    maintenance
    Provides AI-powered access to major biological databases for GWAS and bioinformatics research. Enables natural language queries for protein, gene, variant, pathway, and drug discovery analysis.
    44
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Searches and fetches research datasets across Zenodo, DataCite (Dryad/Figshare/Dataverse/OSF), NCBI omics archives (GEO/SRA/BioProject), and the literature (PubMed/OpenAIRE) through one normalized model — deduplicating by DOI, expanding organism queries with NCBI Taxonomy synonyms, and bridging papers to the datasets they produced. Resolves citations and open-access full text, and downloads files.
    6
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Grounds gene-nomenclature work in the HUGO Gene Nomenclature Committee (HGNC) dataset, enabling resolution of gene symbols and IDs to canonical HGNC identifiers, plus cross-references and batch operations.
    9
    MIT