Skip to main content
Glama
musharna

plant-genomics-mcp

by musharna

ATTED-II: Coexpression

atted_coexpression
Read-onlyIdempotent

Fetch co-expressed gene neighbors for a plant locus from ATTED-II, ranked by score, to uncover functionally related partners across 7 plant species.

Instructions

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 + score (higher = stronger coexpression), in the index the release declares as score_type: 'z' for Ath-u.c4-0, 'LSmr' (logit score) for the other releases. The ATTED-II release (e.g. Ath-u.c4-0 for Arabidopsis, Osa-u.c1-0 for rice) is resolved per-organism. Covers: arabidopsis_thaliana, glycine_max, medicago_truncatula, oryza_sativa, solanum_lycopersicum, vitis_vinifera, zea_mays. Any other organism raises OrganismNotSupported before any request (both the single and batch forms). A locus that is not in the organism's release raises NotFoundError. Pairs with string_interactions to surface high-confidence functional partners (interactors that are also coexpressed).

Input Schema

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

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
locusYes
totalNoAlways null: the upstream returns the top coexpression neighbours asked for and states no total; null means unknown, never zero (#123)
returnedYesRows in this payload (#123)
neighborsYes
truncatedNoAlways null: without a stated total, truncation is unknown (#123)
score_typeYesThe coexpression index every neighbour's score is in, as ATTED-II declares it: 'z' for Ath-u.c4-0, 'LSmr' (logit score) for the other releases
atted_releaseYesATTED-II DB identifier, e.g. Ath-u.c4-0 (release version included)
upstream_versionNoATTED-II release that produced THIS response, as stated by the db= pinned in the request (e.g. 'Ath-u.c4-0'); same value as atted_release. null means ATTED-II 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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv1.24.0
    • addedOutput schema / $defs / CoexNeighbor / properties / score
      Added value: +{
      +  "description": "Coexpression score in the release's own index, named by the response's score_type; higher = stronger coexpression",
      +  "title": "Score",
      +  "type": "number"
      +}
    • changedOutput schema / $defs / CoexNeighbor / properties / z_score / description
      Previous value: -"ATTED-II z-score; higher = stronger coexpression"New value: +"ATTED-II z-score; higher = stronger coexpression. Null unless score_type is 'z' (Ath-u.c4-0); read score for every release"
    • addedOutput schema / $defs / CoexNeighbor / required
      Added value: +[
      +  "score"
      +]
    • addedOutput schema / properties / score_type
      Added value: +{
      +  "description": "The coexpression index every neighbour's score is in, as ATTED-II declares it: 'z' for Ath-u.c4-0, 'LSmr' (logit score) for the other releases",
      +  "title": "Score Type",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "returned",
      -  "locus",
      -  "atted_release",
      -  "neighbors"
      -]New value: +[
      +  "returned",
      +  "locus",
      +  "atted_release",
      +  "score_type",
      +  "neighbors"
      +]
  2. Changed5 schema fields changedv1.22.0
    • addedOutput schema / properties / returned
      Added value: +{
      +  "description": "Rows in this payload (#123)",
      +  "title": "Returned",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / total
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Always null: the upstream returns the top coexpression neighbours asked for and states no total; null means unknown, never zero (#123)",
      +  "title": "Total"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Always null: without a stated total, truncation is unknown (#123)",
      +  "title": "Truncated"
      +}
    • addedOutput schema / properties / upstream_version
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ATTED-II release that produced THIS response, as stated by the db= pinned in the request (e.g. 'Ath-u.c4-0'); same value as atted_release. null means ATTED-II 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"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "locus",
      -  "atted_release",
      -  "neighbors"
      -]New value: +[
      +  "returned",
      +  "locus",
      +  "atted_release",
      +  "neighbors"
      +]
  3. Addedv1.19.4
  4. Removedv1.18.2
  5. First observedv1.8.0

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses concrete behavior: per-organism release resolution, explicit error behavior (OrganismNotSupported before any request, NotFoundError for missing loci), score_type semantics, and the organism allowlist. This is substantial context an agent would not get from the annotations or schema.

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

Conciseness4/5

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

The description is front-loaded with purpose and output, followed by release, organism, and error details in a logical order. The final 'Pairs with string_interactions' sentence is ambiguous and slightly undercuts the otherwise tight structure.

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

Completeness4/5

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

Given the output schema and annotations already exist, the description is largely complete: it covers organisms, errors, scoring, and release handling. Minor unresolved details are the exact meaning of 'Pairs with string_interactions' and possible API limits, which are not critical for calling the tool.

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

Parameters4/5

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

Schema coverage is 67% and locus/organism already have decent descriptions. The description adds value by clarifying top_n as the number of returned neighbors, enumerating the organisms accepted by organism, and explaining release resolution. It does not merely repeat the schema text.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Fetch co-expressed gene neighbors from ATTED-II.' It names API v5, the input (plant locus), the output shape (top_n neighbors with locus, Entrez ID, score), and the supported organisms, so an agent can distinguish it from sibling interaction tools like string_interactions.

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

Usage Guidelines3/5

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

The description states what it returns and lists supported organisms, but it never explicitly says when to choose this over coexpression or interaction alternatives, and it does not give exclusions. The final sentence about pairing with string_interactions is too vague to count as solid usage guidance.

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