plant-genomics-mcp
This server provides 50 tools for comprehensive plant genomics locus lookup over the Model Context Protocol, enabling AI agents to query and synthesize data across 23 public databases for 12 plant species (Arabidopsis, rice, maize, soybean, and more).
Gene & Locus Information
Fetch gene metadata from Ensembl Plants and Phytozome BioMart
Retrieve cross-database references (UniProt, NCBI Gene, TAIR, GO, etc.)
Get curated summaries, TAIR functional descriptions, and Araport11 computational descriptions via BAR/ThaleMine
Query genomic regions to list overlapping features (genes, transcripts, exons)
Sequence, Homology & Evolution
Retrieve genomic, CDS, cDNA, or protein sequences from Ensembl
Run NCBI BLAST searches (blastn/blastp/blastx/tblastn/tblastx) with async polling
Find orthologs/paralogs from Gramene Compara, OrthoDB ortholog groups, and PANTHER family classification
Generate consensus homologs by combining Gramene and BLAST results
Functional Annotation
GO annotations via QuickGO; plant-specific ontologies (PO/TO/PECO) from Planteome
KEGG pathway memberships and PlantCyc/PMN metabolic pathways (gene→enzyme→reactions)
GeneRIF curated functional statements with PubMed citations
GO/KEGG over-representation enrichment for gene lists via g:Profiler
Protein Structure & Domains
AlphaFold predicted structures with pLDDT confidence scores
Experimental PDB structures (X-ray/cryo-EM/NMR) ranked by coverage via PDBe
InterPro domain/family architecture (Pfam, CDD, PANTHER)
JASPAR transcription factor binding motifs with IUPAC consensus and position-frequency matrices
Interactions & Coexpression
STRING-DB interaction partners with per-channel confidence scores
Curated experimental interactions (BioGRID/IntAct) from ThaleMine
BAR AIV predicted interactions (Arabidopsis GRN / rice PPI)
ATTED-II coexpression neighbors with z-scores
Variation, GWAS & Expression
Natural variants overlapping a locus (EVA/dbSNP)
Variant consequence prediction via Ensembl VEP (SIFT/PolyPhen)
AraGWAS GWAS associations and 1001 Genomes natural variation (Arabidopsis-specific)
BAR eFP expression profiles across ~36 Arabidopsis ecotypes
Literature
Search Europe PMC for papers mentioning a locus, with abstracts, DOIs, and citation counts
Batch Processing
Batch variants (up to 50 loci per call) for Ensembl lookup, xrefs, UniProt, GO, homologs, pathways, interactions, coexpression, and more
Cross-Source Synthesis
gene_report: one-shot Markdown gene dossier composing 7 backendsanalyze_locus_synth: locus overview combining Ensembl, UniProt, Europe PMC, and QuickGObiological_context_synth: UniProt + Gramene + KEGG + STRING + ATTED-II with consensus partner rankingfind_homologs_synth: BLAST + UniProt enrichment in one callconsensus_homologs: cross-source homology deduped and scored
Organism input accepts canonical slugs, scientific names, common names, or NCBI taxids, with automatic routing to the relevant backend databases.
🌱 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).
📦 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) |
| Fetches gene record from Ensembl Plants REST (any plant species). |
2 | Cross-references (live) |
| Fetches cross-DB references (UniProt, NCBI Gene, TAIR, GO, …) from Ensembl. |
3 | Gene metadata (live) |
| Fetches gene record from Phytozome BioMart (any Phytozome proteome). |
4 | Protein (live) |
| Resolves a locus to its UniProtKB record (Swiss-Prot preferred, TrEMBL OK). |
5 | Literature (live) |
| Searches Europe PMC for papers mentioning the locus (free, no API key). |
6 | GO annotations (live) |
| Fetches QuickGO GO annotations (locus → UniProt → QuickGO). |
7 | Sequence search (live) |
| NCBI BLAST URLAPI — async Put/Get polling with progress notifications. |
8 | Homology (live) |
| Fetches Gramene v69 homology entries (ortholog / paralog) with gene_tree_id. |
9 | Pathways (live) |
| Fetches KEGG pathway memberships. 7 organisms: Arabidopsis ( |
10 | Interactions (live) |
| Fetches STRING-DB first-neighbor interaction partners with per-channel score. |
11 | Coexpression (live) |
| Fetches ATTED-II Ath-u.c4-0 top-N coexpression neighbors with z-scores. |
12 | Curator summary (live) |
| Fetches BAR ThaleMine + GAIA-aliases curator summary for an Arabidopsis locus. |
13 | Expression (live) |
| Fetches BAR eFP-Browser expression profile (mean ± SD per tissue) for a locus. |
14 | Interactions (live) |
| Fetches BAR AIV interaction partners (Arabidopsis + rice) with confidence + papers. |
15 | Curator summary (live) |
| Silent upgrade — alias of |
16 | Metabolism (live) |
| 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) |
| Fetches a locus's sequence (genomic / cds / cdna / protein) from Ensembl |
18 | Region query (live) |
| Lists gene/transcript/cds/exon features overlapping a genomic interval (chr:start-end) via Ensembl |
19 | Enrichment (live) |
| 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) |
| 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 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) |
| 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 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) |
| 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 |
25 | TF motifs (live) |
| One JASPAR profile by matrix id (e.g. |
26 | Interactions (live) |
| 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 |
27 | Function (live) |
| 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) |
| Natural (EVA/dbSNP) variants overlapping a locus's genomic span via Ensembl |
29 | Variation (live) |
| 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 protein family + subfamily (id + name), GO terms by aspect, protein class, and pathways. found=false when unclassified. All 12 organisms. |
31 | Orthology (live) |
| OrthoDB ortholog group (name, evolutionary rate) + cross-species member genes at the Viridiplantae level. organism_count + truncated. All 12 organisms. |
32 | Diversity (live) |
| AraGWAS genome-wide association hits per locus — score, MAF, SNP effect, phenotype/study. Arabidopsis-only. |
33 | Diversity (live) |
| 1001 Genomes natural-variation SNP effects across 1135 accessions — chr, position, effect, impact, amino-acid change, transcript + gene span. Arabidopsis-only. |
34 | Batch (live) |
| Parallel per-locus fanout for tools 1–6, 8–12, 14. Up to 50 loci per call. |
35 | Synthesis (live) |
| Compose 2–5 backends in parallel, return a |
36 | Synthesis (live) |
| One-shot "tell me about this gene" dossier — annotation + xrefs + protein + domains + GO + KEGG + STRING + literature composed into a rendered Markdown |
⚡ 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 |
One-shot Markdown gene dossier — 7 backends composed, with graceful KEGG degradation. | |
Ensembl → xrefs → UniProt → Europe PMC → QuickGO chain (5 tools). | |
BLAST + per-hit UniProt enrichment. | |
Gramene + KEGG + UniProt + STRING + ATTED-II (5 tools). | |
All 4 v0.8 synthesis tools ( | |
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 |
| Per-backend |
| Slug → Phytozome |
| Per-backend liveness rollup — |
| 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 |
|
|
| Ensembl → xrefs → UniProt → Europe PMC → QuickGO. |
|
|
|
|
|
|
| Gramene → KEGG → UniProt → STRING → ATTED-II. |
🔌 Transports
Transport | How to launch |
stdio (default) |
|
streamable-HTTP |
|
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/mcpIntended 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/mcpFor 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 |
| HTTP transport only | Bearer token for |
| If you use BLAST | NCBI etiquette contact. Unset → placeholder + per-call warning; NCBI may throttle. |
Variable | Default | Effect |
|
| HTTP bind address. |
|
| HTTP TCP port. |
|
| Reject POSTs with |
|
|
|
|
|
|
|
| Max in-flight BLAST searches per process (NCBI per-IP rate limit). |
|
| Per-backend TTL+LRU cache entry lifetime, in seconds. 200-only. |
|
| Max entries per backend before LRU eviction. |
| 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 |
| 404 / empty BioMart row / invalid locus identifier |
| 429 retry budget exhausted — back off and retry |
| 5xx past retry budget — service outage, try a peer backend |
| Other (BioMart |
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-mcpLicense
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 toolsalphafold_structureAlphaFold: Predicted StructureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| gene | No | Gene name from UniProt |
| found | Yes | True if a predicted model exists |
| locus | Yes | |
| cif_url | No | mmCIF model download URL |
| pdb_url | No | PDB model download URL |
| organism | No | Organism scientific name |
| accession | Yes | Resolved UniProt accession |
| mean_plddt | No | Global mean pLDDT confidence (0–100) |
| description | No | UniProt protein description |
| plddt_bands | No | Fraction of residues per confidence band |
| model_created | No | Model creation date (ISO 8601) |
| pae_image_url | No | Predicted-aligned-error image URL |
| residue_range | No | Modelled residue span {start, end} |
| latest_version | No | Latest AlphaFold model version |
| model_entity_id | No | e.g. AF-Q9SZ92-F1 |
TDQS
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.
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.
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.
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.
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.
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 OverviewARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Locus name, e.g. AT1G01010 | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Synthesis tool name, e.g. analyze_locus_synth |
| input | Yes | Echoed input arguments |
| steps | Yes | Per-backend execution rows |
| result | No | Composed cross-source result; None if root step failed |
| elapsed_s | Yes | Total orchestrator wall time |
| started_at | Yes | ISO 8601 UTC timestamp |
TDQS
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.
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.
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.
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.
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.
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 VariationARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01060 (a bare AGI is transcript-scoped to .1) | |
| organism | No | Arabidopsis only (the 1001 Genomes panel is A. thaliana) | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True once the effects endpoint returned 200 |
| locus | Yes | |
| region | No | Genomic span, e.g. 'Chr1:33666..37840' |
| organism | Yes | Always arabidopsis_thaliana |
| returned | Yes | Effect rows returned (post-cap) |
| variants | No | Per-effect {chr, position, accession_id, effect, impact, amino_acid_change, …} |
| truncated | Yes | True if the effect list was capped |
| transcript | Yes | Transcript-scoped gene id used (e.g. AT1G01060.1) |
| variant_count | Yes | Total effect rows (pre-cap) |
TDQS
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.
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.
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.
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.
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.
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 AssociationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01060 | |
| organism | No | Arabidopsis only (the 1001 Genomes panel is A. thaliana) | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True once the associations endpoint returned 200 |
| locus | Yes | |
| organism | Yes | Always arabidopsis_thaliana |
| returned | Yes | Associations returned (post page-cap) |
| truncated | Yes | True if pagination was capped |
| associations | No | Per-hit {score, maf, mac, snp{…}, study{…}} |
| association_count | Yes | Total associations (pre-cap) |
TDQS
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.
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.
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.
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.
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.
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: CoexpressionARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Plant locus, e.g. AT1G01010 (Arabidopsis) or Os01g0100100 (rice) | |
| top_n | No | ||
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| neighbors | Yes | |
| atted_release | Yes | ATTED-II DB identifier, e.g. Ath-u.c4-0 (release version included) |
TDQS
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.
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.
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.
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.
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.
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 InteractionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | AGI locus (AT1G01010) for Arabidopsis or MSU locus (LOC_Os01g01080) for rice | |
| organism | No | arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | Discriminator: grn_papers (Arabidopsis) or ppi_predictions (rice) |
| count | Yes | Total rows returned (len of papers or partners) |
| locus | Yes | |
| papers | No | GRN paper refs (populated when kind=grn_papers) |
| organism | Yes | |
| partners | No | PPI predictions (populated when kind=ppi_predictions) |
| source_url | Yes | BAR AIV endpoint URL for traceability |
TDQS
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.
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.
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.
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.
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.
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 ExpressionARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01010 |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| species | Yes | |
| ecotypes | Yes | |
| probeset | No | Microarray probeset ID, uniform across ecotypes for one gene |
| source_url | Yes | BAR world-eFP endpoint URL for traceability |
| ecotype_count | Yes | Number of ecotype rows in `ecotypes` |
TDQS
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.
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.
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.
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.
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.
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 SummaryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01010 |
Output Schema
| Name | Required | Description |
|---|---|---|
| agi | No | AGI primary identifier echoed by ThaleMine, e.g. "AT1G01010" |
| locus | Yes | |
| symbol | No | Gene symbol, e.g. "NAC001" |
| aliases | No | Cross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded. |
| species | Yes | |
| synonyms | No | TAIR aliases (CSV from Gene.tairAliases, split on commas + stripped) |
| full_name | No | Gene name from ThaleMine |
| source_url | Yes | ThaleMine endpoint URL for traceability |
| ncbi_gene_id | No | NCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref |
| tair_locus_id | No | TAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935" |
| curator_summary | No | Gene.tairCuratorSummary — the TAIR-curated functional summary prose |
| brief_description | No | Gene.briefDescription — short blurb (often same as full_name) |
| tair_short_description | No | Gene.tairShortDescription — TAIR-specific short description |
| computational_description | No | Gene.tairComputationalDescription — Araport11-sourced computed description |
TDQS
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.
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.
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.
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.
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.
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 CoexpressionARead-onlyIdempotent
Batch version of atted_coexpression. Up to 50 loci per call.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | ||
| top_n | No | ||
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 InteractionsARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| organism | No | arabidopsis_thaliana or oryza_sativa — slug, scientific/common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 SummaryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 MetadataARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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-ReferencesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 HomologsARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (max 50) | |
| homology_type | No | ortholog |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 PathwaysARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | ||
| organism | No | Plant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge lands | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 AnnotationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| limit | No | Max annotations per locus from QuickGO (1–100, default 50) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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: LiteratureARead-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[]).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| size | No | Max results per locus (1–25, default 10) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 MetadataARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 → UniProtARead-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 + …).
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | List of locus identifiers (1–50). Successes land in results[locus]; PlantGenomicsError failures in errors[locus]. | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 InteractionsARead-onlyIdempotent
Batch version of string_interactions. Up to 50 inputs per call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
| loci_or_accessions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | The batch tool name, e.g. batch_resolve_locus_to_uniprot |
| count | Yes | 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. |
| errors | Yes | locus → '[ClassName] message' for PlantGenomicsError failures |
| results | Yes | locus → per-locus result dict (same shape as the single-locus tool) |
TDQS
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.
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.
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.
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.
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.
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 ContextARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | ||
| top_n | No | ||
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Synthesis tool name, e.g. analyze_locus_synth |
| input | Yes | Echoed input arguments |
| steps | Yes | Per-backend execution rows |
| result | No | Composed cross-source result; None if root step failed |
| elapsed_s | Yes | Total orchestrator wall time |
| started_at | Yes | ISO 8601 UTC timestamp |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| expect | No | E-value threshold (default 10). | |
| program | No | BLAST program — default blastp. | blastp |
| database | No | NCBI BLAST database slug (e.g. swissprot, core_nt, refseq_protein). Defaults to swissprot for protein programs and core_nt for nucleotide programs. | |
| max_wait | No | Max seconds to wait for the search to finish before raising NotFoundError with the RID preserved (default 600). | |
| sequence | Yes | Raw or FASTA-formatted query sequence. | |
| megablast | No | Enable megablast (blastn only). Default false. | |
| hitlist_size | No | Max hits to return (default 10). | |
| poll_interval | No | Seconds between polls. Clamped up to NCBI's per-RID 60s floor. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rid | Yes | NCBI BLAST request ID — re-usable via fetch_result() |
| hits | Yes | Top alignments, sorted by BLAST default order |
| status | Yes | Always "READY" when this object is returned |
| program | Yes | blastn | blastp | blastx | tblastn | tblastx |
| database | Yes | NCBI BLAST database, e.g. swissprot, core_nt |
| hitCount | Yes | Number of rows parsed from the alignment summary |
| elapsed_seconds | Yes | Wall-clock from submit to READY |
| raw_report_excerpt | Yes | First 50 KB of the FORMAT_TYPE=Text report |
| raw_report_truncated | Yes | True if the upstream report exceeded the cap |
TDQS
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.
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.
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.
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.
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.
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 HomologsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | ||
| top_n | No | ||
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Synthesis tool name, e.g. analyze_locus_synth |
| input | Yes | Echoed input arguments |
| steps | Yes | Per-backend execution rows |
| result | No | Composed cross-source result; None if root step failed |
| elapsed_s | Yes | Total orchestrator wall time |
| started_at | Yes | ISO 8601 UTC timestamp |
TDQS
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.
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.
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.
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.
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.
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 MetadataARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Locus identifier, e.g. AT1G01010 |
| end | No | |
| start | No | |
| source | No | |
| strand | No | 1 forward, -1 reverse |
| biotype | No | protein_coding, lncRNA, miRNA, ... |
| db_type | No | Usually "core" |
| organism | Yes | Plant organism canonical slug, e.g. arabidopsis_thaliana |
| logic_name | No | Source annotation pipeline |
| description | No | |
| object_type | No | Usually "Gene" |
| display_name | No | Human-readable gene symbol |
| assembly_name | No | e.g. TAIR10 |
| seq_region_name | No | Chromosome / contig name |
| canonical_transcript | No |
TDQS
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.
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.
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.
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.
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.
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 → FeaturesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | 1-based inclusive end | |
| start | Yes | 1-based start | |
| region | Yes | seq-region name (chromosome / contig), e.g. '1' or 'Chr1' | |
| feature | No | Feature type to return | gene |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of overlapping features returned |
| region | Yes | seq_region:start-end, e.g. 1:3000-10000 |
| feature | Yes | Feature type queried |
| features | Yes | Raw Ensembl overlap records |
| organism | Yes |
TDQS
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.
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.
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.
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.
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.
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 InteractionsARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | AGI locus, e.g. AT5G11260 (HY5) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only. | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if any curated interaction exists for this locus |
| locus | Yes | |
| organism | Yes | Canonical organism slug (Arabidopsis only) |
| partners | No | Partners ordered by evidence count, descending |
| truncated | Yes | True if the partner list was capped |
| source_url | Yes | ThaleMine gene report page |
| gene_symbol | No | Gene symbol from ThaleMine |
| partner_count | Yes | Total distinct partners (pre-cap) |
| evidence_count | Yes | Total evidence records across all partners (pre-cap) — counted over every partner upstream, not only the partners listed here |
TDQS
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.
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.
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.
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.
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.
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 StructuresARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if any experimental structure is deposited |
| locus | Yes | |
| accession | Yes | Resolved UniProt accession |
| truncated | Yes | True if the structure list was capped |
| structures | No | Best-first {pdb_id, chain_id, experimental_method, resolution, coverage, …} |
| structure_count | Yes | Total deposited structures (pre-cap) |
TDQS
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.
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.
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.
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.
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.
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 SearchARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| program | No | blastp | |
| sequence | Yes | Query sequence (protein or nucleotide) |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Synthesis tool name, e.g. analyze_locus_synth |
| input | Yes | Echoed input arguments |
| steps | Yes | Per-backend execution rows |
| result | No | Composed cross-source result; None if root step failed |
| elapsed_s | Yes | Total orchestrator wall time |
| started_at | Yes | ISO 8601 UTC timestamp |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Locus name, e.g. AT1G01010 | |
| top_n | No | Caps GO terms, pathways, interactors, xrefs, and papers per section | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | Yes | Synthesis tool name, e.g. analyze_locus_synth |
| input | Yes | Echoed input arguments |
| steps | Yes | Per-backend execution rows |
| result | No | Composed cross-source result; None if root step failed |
| elapsed_s | Yes | Total orchestrator wall time |
| started_at | Yes | ISO 8601 UTC timestamp |
TDQS
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.
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.
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.
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.
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.
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-ReferencesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| by_db | Yes | dbname → primary_ids[]; e.g. {'Uniprot_gn': ['Q0WV96']} |
| count | Yes | Number of xref records returned |
| locus | Yes | |
| xrefs | Yes | Raw Ensembl xref records |
| organism | Yes |
TDQS
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.
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.
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.
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.
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.
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 SequenceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
| seq_type | No | Sequence type to fetch | protein |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | Sequence type requested |
| locus | Yes | |
| length | Yes | Sequence length (residues for protein, bases otherwise) |
| version | No | Ensembl sequence version |
| molecule | No | "dna" or "protein" |
| organism | Yes | Resolved canonical organism slug |
| sequence | Yes | The sequence string; feed to blast_sequence |
| ensembl_id | No | Resolved Ensembl stable id |
| description | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| loci | Yes | Query gene set, e.g. ['AT2G46830', 'AT1G01060', ...] | |
| top_n | No | Max terms returned, sorted by p-value (1–200, default 50) | |
| sources | No | Annotation sources to test (default: all four) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
| background | No | Optional custom statistical background gene set | |
| user_threshold | No | Significance cutoff, g:SCS-corrected (default 0.05) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mapped | Yes | Loci g:Profiler recognized |
| sources | Yes | Annotation sources queried |
| enriched | Yes | |
| organism | Yes | Canonical organism slug |
| returned | Yes | Terms in enriched[] after the top_n cap |
| unmapped | Yes | Loci g:Profiler could not map |
| query_size | Yes | Number of loci submitted |
| total_terms | Yes | Significant terms before the top_n cap |
| gprofiler_id | Yes | g:Profiler organism ID used, e.g. athaliana |
TDQS
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.
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.
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.
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.
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.
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 HomologsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max homolog rows to return. 'total' always reports the true pre-cap count and 'truncated' says whether the cap bit. | |
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| homology_type | No | Filter on homology kind | ortholog |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| total | Yes | Number of homologs after filtering, BEFORE the row cap |
| release | Yes | Gramene release identifier, e.g. v69 |
| homologs | Yes | |
| truncated | No | True when the row list was capped (< total); pass limit= to change the cap |
TDQS
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.
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.
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.
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.
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.
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 DomainsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT4G09760 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True once the locus resolved to a UniProt entry |
| locus | Yes | |
| domains | Yes | |
| accession | Yes | Resolved UniProt accession |
| truncated | Yes | True if the row list was page-capped (< domain_count) |
| domain_count | Yes | Total InterPro entries (pre-cap) |
| count_by_type | Yes | Rollup of entry count by type |
| upstream_version | No | 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. |
TDQS
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.
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.
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.
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.
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.
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 MatrixARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| matrix_id | Yes | JASPAR profile id, e.g. MA0570.1 or MA0570 (latest version) |
Output Schema
| Name | Required | Description |
|---|---|---|
| pfm | No | Position-frequency matrix: per-base count vectors keyed A/C/G/T |
| name | No | TF name as curated by JASPAR |
| length | No | Motif width in bases |
| base_id | No | Version-less profile id, e.g. MA0570 |
| species | No | Source species [{tax_id, name}] |
| version | No | JASPAR release version of the profile |
| web_url | No | JASPAR profile page |
| tf_class | No | Structural class, e.g. ['Basic leucine zipper factors (bZIP)'] |
| consensus | No | IUPAC consensus derived from the PFM, e.g. 'AAATATCT' (the Evening Element) |
| data_type | No | Assay the profile derives from: SELEX / ChIP-seq / PBM / DAP-seq |
| matrix_id | No | JASPAR profile id, e.g. MA0570.1 |
| tf_family | No | TF family, e.g. ['MYB-related'] |
| collection | No | CORE / PBM / UNVALIDATED / … |
| pubmed_ids | No | Supporting PubMed IDs |
| uniprot_ids | No | UniProt accessions JASPAR attributes the profile to |
| sequence_logo | No | URL of the SVG sequence logo |
TDQS
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.
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.
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.
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.
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.
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 PathwaysARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01010 (case preserved verbatim — KEGG v118+ is case-sensitive) | |
| organism | No | Plant organism — only arabidopsis_thaliana is supported in v1.1.0; other plants raise OrganismNotSupported until an Entrez bridge lands | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| errors | No | Per-pathway step-2 failures (kept inline so the call doesn't abort) |
| organism | Yes | Resolved canonical organism slug, e.g. arabidopsis_thaliana |
| pathways | Yes | |
| kegg_gene_id | Yes | e.g. "ath:at1g01010" |
| entrez_gene_id | No | Entrez Gene ID from the non-Arabidopsis KEGG↔Entrez bridge; absent for ath. |
TDQS
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.
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.
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.
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.
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.
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 StatementsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | AGI locus, e.g. AT5G11260 (HY5) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid. ThaleMine supports Arabidopsis only. | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if the gene has at least one GeneRIF |
| locus | Yes | |
| organism | Yes | Canonical organism slug (Arabidopsis only) |
| gene_rifs | No | Curated statements in upstream order |
| rif_count | Yes | Total GeneRIFs (pre-cap) |
| truncated | Yes | True if the GeneRIF list was capped |
| source_url | Yes | ThaleMine gene report page |
| gene_symbol | No | Gene symbol from ThaleMine |
TDQS
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.
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.
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.
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.
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.
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 AnnotationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max annotations from QuickGO (1–100, default 50) | |
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| returned | Yes | Number of annotations in annotations[] |
| by_aspect | Yes | aspect → [{goId, goName}, ...], deduped on goId |
| annotations | Yes | |
| numberOfHits | Yes | Total annotations available upstream |
| uniprot_accession | Yes | UniProt accession used to query QuickGO |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Max results (1–25, default 10) | |
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
| include_abstract | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | |
| locus | Yes | |
| query | Yes | Final query string sent to Europe PMC |
| hitCount | Yes | Total hits available upstream (may exceed returned) |
| organism | Yes | |
| returned | Yes | Number of hits actually in hits[] |
| abstracts_included | No | 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. |
TDQS
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.
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.
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.
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.
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.
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) TermsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max annotations from Planteome (1–200, default 100) | |
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| taxon | Yes | NCBI taxon filter applied, e.g. NCBITaxon:3702 |
| organism | Yes | Canonical organism slug |
| returned | Yes | Number of annotations in annotations[] |
| annotations | Yes | |
| by_ontology | Yes | namespace → [{term_id, term_name}, ...], deduped on term_id |
| numberOfHits | Yes | Total annotations available upstream |
TDQS
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.
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.
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.
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.
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.
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 VariantsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max variant rows to return. 'variant_count' always reports the true pre-cap total and 'truncated' says whether the cap bit. | |
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| locus | Yes | |
| region | Yes | Queried gene span, e.g. '1:33666-37840' |
| gene_end | No | Gene span end (1-based) |
| organism | Yes | Resolved Ensembl species slug |
| variants | No | Per-variant {id, source, consequence_type, alleles, …} |
| truncated | Yes | True if the variant list was capped |
| gene_start | No | Gene span start (1-based) |
| variant_count | Yes | Total overlapping variants (pre-cap) |
TDQS
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.
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.
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.
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.
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.
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: OrthologsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max ortholog member rows to return. 'member_count' always reports the true pre-cap total and 'truncated' says whether the cap bit. | |
| locus | Yes | e.g. AT1G01060 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | 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 | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if the locus maps to an ortholog group |
| group | No | Group metadata {id, name, evolutionary_rate, level_name, …} |
| locus | Yes | |
| members | No | Per-gene {organism, gene_id, xref, description} |
| organism | Yes | Canonical organism as requested — echoed, not inferred from the hit. Does not scope the search (see class docstring) |
| truncated | Yes | True if the member list was capped |
| member_count | Yes | Member genes returned (post-cap) |
| organism_count | Yes | Number of member organisms in the whole ortholog group (pre-cap) — the true cluster total, unaffected by the member cap below |
TDQS
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.
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.
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.
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.
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.
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 FamilyARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01060 (Arabidopsis), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if PANTHER classified the locus |
| locus | Yes | |
| pathways | No | |
| accession | No | PANTHER mapped accession |
| family_id | No | PANTHER family id, e.g. PTHR12802 |
| family_name | No | |
| subfamily_id | No | e.g. PTHR12802:SF176 |
| protein_class | No | |
| subfamily_name | No | |
| go_biological_process | No | |
| go_cellular_component | No | |
| go_molecular_function | No |
TDQS
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.
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.
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.
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.
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.
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 MetadataARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Glyma.01G000100 (soybean) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| strand | Yes | String — typically "1" or "-1" |
| gene_end | Yes | String — BioMart TSV is untyped |
| gene_name | Yes | |
| chromosome | Yes | |
| gene_start | Yes | String — BioMart TSV is untyped |
| description | Yes | |
| organism_name | Yes |
TDQS
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.
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.
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.
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.
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.
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 PathwaysARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT3G51240 (Arabidopsis), Os11g0530600 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if the locus resolved to a metabolic gene |
| locus | Yes | |
| orgid | Yes | PlantCyc PGDB org id, e.g. ARA (AraCyc) |
| enzymes | Yes | Product monomer (enzyme) frame ids |
| organism | Yes | Canonical organism slug |
| pathways | Yes | |
| reactions | Yes | |
| gene_frame | No | Resolved PGDB gene frame id |
| pathway_count | Yes | Total distinct pathways (pre-cap) |
| reaction_count | Yes | Total distinct reactions (pre-cap) |
| gene_common_name | No | Gene common name in the PGDB |
TDQS
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.
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.
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.
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.
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.
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 → UniProtARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT1G01010 (Arabidopsis), Os01g0100100 (rice) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| taxonId | No | NCBI taxonomy ID |
| web_url | No | Browser URL for the UniProt entry |
| organism | No | Scientific name |
| reviewed | Yes | True if Swiss-Prot (curated) |
| entryType | Yes | e.g. 'UniProtKB reviewed (Swiss-Prot)' or '... (TrEMBL)' |
| geneNames | No | Gene symbols, e.g. ['NAC001'] |
| locus_query | Yes | The locus identifier the user asked about |
| uniProtkbId | Yes | UniProtKB ID, e.g. NAC1_ARATH |
| sequenceLength | No | Protein length in residues |
| recommendedName | No | Recommended protein name |
| primaryAccession | Yes | UniProt accession, e.g. Q0WV96 |
| upstream_version | No | 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. |
TDQS
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.
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.
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.
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.
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.
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 NetworkARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of partners to return | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
| locus_or_accession | Yes | UniProt accession (Q0WV96) or locus (AT1G01010) |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | The locus or accession the user passed |
| organism | Yes | Plant organism canonical slug, e.g. arabidopsis_thaliana |
| partners | Yes | |
| accession | Yes | UniProt accession actually queried at STRING |
TDQS
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.
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.
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.
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.
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.
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 SummaryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | Arabidopsis AGI locus, e.g. AT1G01010 |
Output Schema
| Name | Required | Description |
|---|---|---|
| agi | No | AGI primary identifier echoed by ThaleMine, e.g. "AT1G01010" |
| locus | Yes | |
| symbol | No | Gene symbol, e.g. "NAC001" |
| aliases | No | Cross-DB aliases from /gaia/aliases/ (RefSeq accessions, UniProt accessions, TIGR locus-model IDs, and TAIR aliases). Empty list if /gaia degraded. |
| species | Yes | |
| synonyms | No | TAIR aliases (CSV from Gene.tairAliases, split on commas + stripped) |
| full_name | No | Gene name from ThaleMine |
| source_url | Yes | ThaleMine endpoint URL for traceability |
| ncbi_gene_id | No | NCBI Gene ID from /gaia/aliases/ — None if BAR has no NCBI cross-ref |
| tair_locus_id | No | TAIR locus ID from Gene.secondaryIdentifier, e.g. "locus:2200935" |
| curator_summary | No | Gene.tairCuratorSummary — the TAIR-curated functional summary prose |
| brief_description | No | Gene.briefDescription — short blurb (often same as full_name) |
| tair_short_description | No | Gene.tairShortDescription — TAIR-specific short description |
| computational_description | No | Gene.tairComputationalDescription — Araport11-sourced computed description |
TDQS
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.
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.
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.
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.
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.
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 MotifsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| locus | Yes | e.g. AT2G46830 (Arabidopsis CCA1), Os01g0100100 (rice RAP-DB) | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | True if any profile was UniProt-confirmed for this locus |
| locus | Yes | |
| motifs | No | UniProt-confirmed binding profiles |
| tax_id | Yes | NCBI taxid the JASPAR search was scoped to |
| accession | Yes | Resolved UniProt accession |
| truncated | Yes | True if the motif list was capped |
| motif_count | Yes | Total confirmed profiles (pre-cap) |
| name_only_matches | No | Name-similarity hits belonging to a DIFFERENT gene [{matrix_id, name, uniprot_ids}] — not this locus's motifs |
| gene_names_searched | No | Gene symbols used as JASPAR search keys |
TDQS
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.
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.
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.
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.
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.
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 EffectARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| allele | Yes | Alternate allele, e.g. 'C' (or 'A/C', an insertion, etc.) | |
| region | Yes | Ensembl region chr:start-end:strand, e.g. '1:10000-10000:1' | |
| organism | No | Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid | arabidopsis_thaliana |
Output Schema
| Name | Required | Description |
|---|---|---|
| end | No | |
| found | Yes | True if VEP returned an overlapping feature |
| input | No | VEP echo of the parsed input |
| start | No | |
| allele | Yes | Alternate allele, e.g. 'C' |
| region | Yes | Ensembl region, e.g. '1:10000-10000:1' |
| organism | Yes | Resolved Ensembl species slug |
| allele_string | No | |
| assembly_name | No | Assembly the call is against |
| seq_region_name | No | |
| most_severe_consequence | No | Most severe SO term |
| transcript_consequences | No | Per-transcript {gene_id, transcript_id, consequence_terms, impact, sift_*, …} |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v1.21.0- Added
consensus_homologs - Added
gene_report
8 tool updates
v1.20.0- Removed
consensus_homologs - Removed
gene_report - Changed
gramene_homologs3 fields changed- added
Input schema / properties / limitAdded 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" +} - changed
Output schema / properties / total / descriptionPrevious value: -"Number of homologs after filtering"New value: +"Number of homologs after filtering, BEFORE the row cap" - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "description": "True when the row list was capped (< total); pass limit= to change the cap", + "title": "Truncated", + "type": "boolean" +}
- Changed
interpro_domains1 field changed- added
Output schema / properties / upstream_versionAdded 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" +}
- Changed
locus_literature2 fields changed- added
Input schema / properties / include_abstractAdded 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" +} - added
Output schema / properties / abstracts_includedAdded 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" +}
- Changed
locus_variants1 field changed- added
Input schema / properties / limitAdded 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" +}
- Changed
orthodb_orthologs1 field changed- added
Input schema / properties / limitAdded 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" +}
- Changed
resolve_locus_to_uniprot1 field changed- added
Output schema / properties / upstream_versionAdded 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" +}
18 tool updates
v1.19.4- Added
aragwas_associations - Added
atted_coexpression - Changed
batch_atted_coexpression1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_bar_aiv_interactions1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_bar_gene_summary1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_ensembl_plants_lookup_locus1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Added
batch_get_gene_xrefs - Changed
batch_gramene_homologs1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_kegg_pathways1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_locus_go_annotations1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_locus_literature1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_phytozome_lookup_locus1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_resolve_locus_to_uniprot1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
batch_string_interactions1 field changed- changed
Output schema / properties / count / descriptionPrevious 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."
- Changed
experimental_interactions1 field changed- changed
Output schema / properties / evidence_count / descriptionPrevious 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"
- Added
locus_literature - Added
locus_plant_ontology - Changed
orthodb_orthologs4 fields changed- changed
Input schema / properties / organism / descriptionPrevious 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" - changed
Output schema / descriptionPrevious 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." - changed
Output schema / properties / organism / descriptionPrevious value: -"Resolved canonical organism"New value: +"Canonical organism as requested — echoed, not inferred from the hit. Does not scope the search (see class docstring)" - changed
Output schema / properties / organism_count / descriptionPrevious 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"
20 tool updates
v1.18.2- Added
alphafold_structure - Added
arabidopsis_natural_variation - Removed
atted_coexpression - Removed
batch_get_gene_xrefs - Added
ensembl_region_query - Added
experimental_interactions - Added
experimental_structures - Added
gene_report - Added
get_sequence - Added
go_enrichment - Added
interpro_domains - Added
jaspar_motif - Added
locus_gene_rifs - Removed
locus_literature - Added
locus_variants - Added
orthodb_orthologs - Added
panther_family - Changed
plantcyc_locus_info21 fields changed- changed
Input schema / properties / locus / descriptionPrevious value: -"TAIR-canonical locus, e.g. AT1G01010"New value: +"e.g. AT3G51240 (Arabidopsis), Os11g0530600 (rice RAP-DB)" - added
Input schema / properties / organismAdded value: +{ + "default": "arabidopsis_thaliana", + "description": "Plant organism — accepts canonical slug (arabidopsis_thaliana), scientific or common name, or NCBI taxid", + "type": [ + "string", + "integer" + ] +} - added
Output schema / $defsAdded 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" + } +} - changed
Output schema / descriptionPrevious 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``)." - removed
Output schema / properties / alternativesRemoved value: -{ - "description": "Tool names users should call instead", - "items": { - "type": "string" - }, - "title": "Alternatives", - "type": "array" -} - removed
Output schema / properties / alternatives_noteRemoved value: -{ - "description": "What the alternatives do and do NOT cover", - "title": "Alternatives Note", - "type": "string" -} - added
Output schema / properties / enzymesAdded value: +{ + "description": "Product monomer (enzyme) frame ids", + "items": { + "type": "string" + }, + "title": "Enzymes", + "type": "array" +} - added
Output schema / properties / foundAdded value: +{ + "description": "True if the locus resolved to a metabolic gene", + "title": "Found", + "type": "boolean" +} - added
Output schema / properties / gene_common_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Gene common name in the PGDB", + "title": "Gene Common Name" +} - added
Output schema / properties / gene_frameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Resolved PGDB gene frame id", + "title": "Gene Frame" +} - added
Output schema / properties / organismAdded value: +{ + "description": "Canonical organism slug", + "title": "Organism", + "type": "string" +} - added
Output schema / properties / orgidAdded value: +{ + "description": "PlantCyc PGDB org id, e.g. ARA (AraCyc)", + "title": "Orgid", + "type": "string" +} - added
Output schema / properties / pathway_countAdded value: +{ + "description": "Total distinct pathways (pre-cap)", + "title": "Pathway Count", + "type": "integer" +} - added
Output schema / properties / pathwaysAdded value: +{ + "items": { + "$ref": "#/$defs/PlantCycPathway" + }, + "title": "Pathways", + "type": "array" +} - removed
Output schema / properties / plantcyc_web_urlRemoved value: -{ - "description": "Browser URL for the PlantCyc gene page", - "title": "Plantcyc Web Url", - "type": "string" -} - removed
Output schema / properties / probed_atRemoved value: -{ - "description": "ISO date of the last live access probe (YYYY-MM-DD)", - "title": "Probed At", - "type": "string" -} - removed
Output schema / properties / rationaleRemoved value: -{ - "description": "Why this backend is gated", - "title": "Rationale", - "type": "string" -} - added
Output schema / properties / reaction_countAdded value: +{ + "description": "Total distinct reactions (pre-cap)", + "title": "Reaction Count", + "type": "integer" +} - added
Output schema / properties / reactionsAdded value: +{ + "items": { + "$ref": "#/$defs/PlantCycReaction" + }, + "title": "Reactions", + "type": "array" +} - removed
Output schema / properties / statusRemoved value: -{ - "description": "Always \"subscription_required\" — upstream REST is paid-only.", - "title": "Status", - "type": "string" -} - changed
Output schema / requiredPrevious 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" +]
- Added
tf_binding_motifs - Added
vep_annotate
32 tool updates
v1.8.0- First observed
analyze_locus_synth - First observed
atted_coexpression - First observed
bar_aiv_interactions - First observed
bar_efp_expression - First observed
bar_gene_summary - First observed
batch_atted_coexpression - First observed
batch_bar_aiv_interactions - First observed
batch_bar_gene_summary - First observed
batch_ensembl_plants_lookup_locus - First observed
batch_get_gene_xrefs - First observed
batch_gramene_homologs - First observed
batch_kegg_pathways - First observed
batch_locus_go_annotations - First observed
batch_locus_literature - First observed
batch_phytozome_lookup_locus - First observed
batch_resolve_locus_to_uniprot - First observed
batch_string_interactions - First observed
biological_context_synth - First observed
blast_sequence - First observed
consensus_homologs - First observed
ensembl_plants_lookup_locus - First observed
find_homologs_synth - First observed
get_gene_xrefs - First observed
gramene_homologs - First observed
kegg_pathways - First observed
locus_go_annotations - First observed
locus_literature - First observed
phytozome_lookup_locus - First observed
plantcyc_locus_info - First observed
resolve_locus_to_uniprot - First observed
string_interactions - First observed
tair_locus_info
TDQS
Scored across 50 tools
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.
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.
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.
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
Related MCP Connectors
Protein research over UniProtKB — search by function, fetch curated records, map IDs, proteomes.
MyGene.info — gene annotation joining NCBI/Ensembl/UniProt/KEGG/OMIM
STRING protein-protein interaction networks across ~12k organisms
Link compounds to protein targets, rank bioactivity, and look up drug mechanisms and indications.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides access to the Ensembl genomics REST API with 30+ tools for genomic data including gene lookup, sequence retrieval, genetic variants, cross-species homology, phenotypes, and regulatory features.25ISC
- AlicenseCqualityFmaintenanceProvides 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.441MIT
- AlicenseAqualityAmaintenanceSearches 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.62MIT
- AlicenseAqualityAmaintenanceGrounds 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.9MIT