Skip to main content
Glama

Brapi Walk Pedigree

brapi_walk_pedigree
Read-only

Walk germplasm ancestry or descendancy as a deduplicated DAG with cycle detection and depth limits. leafCount counts graph terminals, confirmedLeafCount counts successfully verified leaves, and frontier records unresolved directions. Nodes and edges each fit loadLimit and a 24,000-byte preview budget; trimmed discovered graphs and already-fetched omitted relatives are staged for brapi_dataframe_describe and brapi_dataframe_query (SQL). Diagrams describe only the discovered graph, never unvisited relatives.

Input Schema

NameRequiredDescriptionDefault
aliasNoConnection alias. Omit to use alias `default`. An alias registered via brapi_connect works, and so does one the server has a URL configured for (a built-in alias, an operator-configured alias, or `default` on a deployment with a default server), which connects on first use. Calls that used a non-default alias must pass that same alias here.
diagramNoAlso return the walk as diagram source: `mermaid` (flowchart) or `dot` (Graphviz). Edges point parent → child, roots are bold, loop-closing edges are dashed. Omit for no diagram.
maxDepthNoMax generations to walk per direction (default 3, cap 10).
directionNoWhich direction to walk: ancestors (parents), descendants (progeny), or both — the union of the two walks. Ancestors are walked only upward and descendants only downward, so a descendant's other parent is not included.ancestors
loadLimitNoRow ceiling for each inline graph/frontier preview, also bounded by a 24,000-byte budget. Omit for the deployment default. A first row exceeding the byte budget yields zero preview rows; retrieve narrower projections from the staged dataframe.
germplasmDbIdsYesStarting germplasm (1–20 roots). All roots are walked concurrently.

Output Schema

NameRequiredDescriptionDefault
aliasNoConnection alias the call used.
edgesNoOne edge per discovered pair. Preview independently fits loadLimit and 24,000 bytes for array JSON and serialized row text; edgesDataframe retains omitted rows.
errorNoPresent when the call failed. Absent on success.
nodesNoDiscovered nodes sorted by depth/DbId. Preview fits loadLimit and 24,000 bytes for array JSON and serialized row text; nodesDataframe retains omitted rows.
noticeNoStaged graph, frontier or omitted-relative tables and how to read them.
diagramNoRequested Mermaid or DOT for the discovered graph, beyond previews; partial when capped. Omitted with a warning past 50,000 characters, or 500 edges for Mermaid.
frontierNoBounded preview of unresolved directions; frontierDataframe retains omitted entries.
maxDepthNoThe maximum depth the walk was allowed to reach (echoed from the input).
warningsNoAdvisory messages (capability gaps, per-node expansion failures, an omitted diagram).
directionNoThe direction the walk expanded (echoed from the input).
leafCountNoNon-root nodes with nothing recorded beyond them: ancestors with no parents, descendants with no progeny (a node on both sides needs neither). Includes nodes the depth limit stopped at.
rootCountNoNumber of starting germplasm roots.
truncatedNoTrue when the walk hit its safety cap (1000 nodes or 10000 edges) before exhausting depth.
cycleCountNoNumber of edges with isCycle: true. Paths that reconverge on one germplasm (shared ancestors, siblings, a parent shared by two roots) are not cycles.
deadEndCountNoNodes whose upstream pedigree/progeny lookup failed.
depthReachedNoDeepest BFS level that produced at least one new edge (0 if only roots were walked).
frontierCountNoUnresolved node/side expansions across the full walk.
edgesDataframeNoDiscovered edges when either preview is trimmed; truncated marks partial traversal. SQL renames from to from_; see columnLegend.
nodesDataframeNoDiscovered nodes when either preview is trimmed; truncated marks partial traversal. No unvisited relatives. JOIN germplasmDbId to the edge table on from_ or to.
frontierDataframeNoEvery unresolved node/side expansion, with ordinal ordering.
confirmedLeafCountNoNon-root nodes with successful empty lookups on every reached side; unresolved directions never confirm leaves.
knownOmittedRelativeCountNoDistinct fetched relative IDs per expansion node/side omitted by safety limits; unrequested counts remain unknown.
omittedRelativesDataframeNoFetched omitted relatives with ordinal, germplasmDbId, expansionNodeDbId and side; not an unvisited graph or resumable walk.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • changedInput schema / properties / loadLimit / description
      Previous value: -"Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row."New value: +"Row ceiling for each inline graph/frontier preview, also bounded by a 24,000-byte budget. Omit for the deployment default. A first row exceeding the byte budget yields zero preview rows; retrieve narrower projections from the staged dataframe."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "alias",
      -      "direction",
      -      "maxDepth",
      -      "nodes",
      -      "edges",
      -      "depthReached",
      -      "rootCount",
      -      "leafCount",
      -      "cycleCount",
      -      "deadEndCount",
      -      "truncated",
      -      "warnings"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "alias",
      +      "direction",
      +      "maxDepth",
      +      "nodes",
      +      "edges",
      +      "depthReached",
      +      "rootCount",
      +      "leafCount",
      +      "confirmedLeafCount",
      +      "frontierCount",
      +      "frontier",
      +      "knownOmittedRelativeCount",
      +      "cycleCount",
      +      "deadEndCount",
      +      "truncated",
      +      "warnings"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / confirmedLeafCount
      Added value: +{
      +  "description": "Non-root nodes with successful empty lookups on every reached side; unresolved directions never confirm leaves.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / diagram / description
      Previous value: -"Mermaid (`flowchart …`) or DOT (`digraph …`) source for the whole walk, nodes and edges past loadLimit included; present when `diagram` was requested. A diagram past 50,000 characters, or a Mermaid one past 500 edges, is omitted with a warning."New value: +"Requested Mermaid or DOT for the discovered graph, beyond previews; partial when capped. Omitted with a warning past 50,000 characters, or 500 edges for Mermaid."
    • changedOutput schema / properties / edges / description
      Previous value: -"One edge per parent–child pair."New value: +"One edge per discovered pair. Preview independently fits loadLimit and 24,000 bytes for array JSON and serialized row text; edgesDataframe retains omitted rows."
    • changedOutput schema / properties / edgesDataframe / description
      Previous value: -"The full edge set, staged when the walk exceeds loadLimit; edges[] is then a bounded preview. Reserved-word columns are renamed (`from` → `from_`; see columnLegend)."New value: +"Discovered edges when either preview is trimmed; truncated marks partial traversal. SQL renames from to from_; see columnLegend."
    • addedOutput schema / properties / frontier
      Added value: +{
      +  "description": "Bounded preview of unresolved directions; frontierDataframe retains omitted entries.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One unresolved expansion direction, distinct from a confirmed empty lookup.",
      +    "properties": {
      +      "error": {
      +        "description": "Failure message for a failed expansion.",
      +        "type": "string"
      +      },
      +      "germplasmDbId": {
      +        "description": "Expansion node identifier.",
      +        "type": "string"
      +      },
      +      "knownOmittedRelativeCount": {
      +        "description": "Already-fetched relatives omitted from the discovered graph; absent when not requested or failed.",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "outcome": {
      +        "description": "Why this direction remains unresolved.",
      +        "enum": [
      +          "depth_limited",
      +          "safety_skipped",
      +          "failed",
      +          "unsupported"
      +        ],
      +        "type": "string"
      +      },
      +      "side": {
      +        "description": "Direction not fully expanded.",
      +        "enum": [
      +          "ancestor",
      +          "descendant"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "germplasmDbId",
      +      "side",
      +      "outcome"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / frontierCount
      Added value: +{
      +  "description": "Unresolved node/side expansions across the full walk.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / frontierDataframe
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Every unresolved node/side expansion, with ordinal ordering.",
      +  "properties": {
      +    "columnLegend": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "description": "Sanitized column name → original upstream key, present only when a column was renamed to be SQL-safe (e.g. `end` → `end_`). SQL uses the sanitized names.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "columns": {
      +      "description": "Every column name.",
      +      "items": {
      +        "description": "Column name.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "createdAt": {
      +      "description": "ISO 8601 creation time.",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "description": "ISO 8601 time the dataframe metadata is purged; copy rows out before, or re-run the producing tool.",
      +      "type": "string"
      +    },
      +    "rowCount": {
      +      "description": "Rows in the dataframe.",
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "tableName": {
      +      "description": "Table name for brapi_dataframe_describe and brapi_dataframe_query.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "tableName",
      +    "rowCount",
      +    "columns",
      +    "createdAt",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / knownOmittedRelativeCount
      Added value: +{
      +  "description": "Distinct fetched relative IDs per expansion node/side omitted by safety limits; unrequested counts remain unknown.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / nodes / description
      Previous value: -"Deduplicated node list — every germplasm reached by the walk, sorted by depth then DbId."New value: +"Discovered nodes sorted by depth/DbId. Preview fits loadLimit and 24,000 bytes for array JSON and serialized row text; nodesDataframe retains omitted rows."
    • changedOutput schema / properties / nodesDataframe / description
      Previous value: -"The full node set, staged when the walk exceeds loadLimit; nodes[] is then a bounded preview. JOIN its germplasmDbId to the edges dataframe on from_ or to."New value: +"Discovered nodes when either preview is trimmed; truncated marks partial traversal. No unvisited relatives. JOIN germplasmDbId to the edge table on from_ or to."
    • changedOutput schema / properties / notice / description
      Previous value: -"When the walk was staged, the node and edge dataframes and how to read them."New value: +"Staged graph, frontier or omitted-relative tables and how to read them."
    • addedOutput schema / properties / omittedRelativesDataframe
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Fetched omitted relatives with ordinal, germplasmDbId, expansionNodeDbId and side; not an unvisited graph or resumable walk.",
      +  "properties": {
      +    "columnLegend": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "description": "Sanitized column name → original upstream key, present only when a column was renamed to be SQL-safe (e.g. `end` → `end_`). SQL uses the sanitized names.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "columns": {
      +      "description": "Every column name.",
      +      "items": {
      +        "description": "Column name.",
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "createdAt": {
      +      "description": "ISO 8601 creation time.",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "description": "ISO 8601 time the dataframe metadata is purged; copy rows out before, or re-run the producing tool.",
      +      "type": "string"
      +    },
      +    "rowCount": {
      +      "description": "Rows in the dataframe.",
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "tableName": {
      +      "description": "Table name for brapi_dataframe_describe and brapi_dataframe_query.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "tableName",
      +    "rowCount",
      +    "columns",
      +    "createdAt",
      +    "expiresAt"
      +  ],
      +  "type": "object"
      +}
  2. Changed42 schema fields changed
    • changedInput schema / properties / alias / description
      Previous value: -"Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` — i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here."New value: +"Connection alias. Omit to use alias `default`. An alias registered via brapi_connect works, and so does one the server has a URL configured for (a built-in alias, an operator-configured alias, or `default` on a deployment with a default server), which connects on first use. Calls that used a non-default alias must pass that same alias here."
    • addedInput schema / properties / diagram
      Added value: +{
      +  "description": "Also return the walk as diagram source: `mermaid` (flowchart) or `dot` (Graphviz). Edges point parent → child, roots are bold, loop-closing edges are dashed. Omit for no diagram.",
      +  "enum": [
      +    "mermaid",
      +    "dot"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / direction / description
      Previous value: -"Which direction to walk: ancestors (parents), descendants (progeny), or both."New value: +"Which direction to walk: ancestors (parents), descendants (progeny), or both — the union of the two walks. Ancestors are walked only upward and descendants only downward, so a descendant's other parent is not included."
    • removedInput schema / properties / germplasmDbIds / items / minLength
      Removed value: -1
    • addedInput schema / properties / germplasmDbIds / items / pattern
      Added value: +"\\S"
    • changedOutput schema / properties / alias / description
      Previous value: -"Alias of the registered BrAPI connection the call used."New value: +"Connection alias the call used."
    • changedOutput schema / properties / cycleCount / description
      Previous value: -"Number of times the walk revisited an already-registered node (cycles broken)."New value: +"Number of edges with isCycle: true. Paths that reconverge on one germplasm (shared ancestors, siblings, a parent shared by two roots) are not cycles."
    • addedOutput schema / properties / diagram
      Added value: +{
      +  "description": "Mermaid (`flowchart …`) or DOT (`digraph …`) source for the whole walk, nodes and edges past loadLimit included; present when `diagram` was requested. A diagram past 50,000 characters, or a Mermaid one past 500 edges, is omitted with a warning.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / edges / description
      Previous value: -"Deduplicated edge list. `relationship: \"parent\"` means `from` is a parent of `to`; `relationship: \"child\"` means `from` is a descendant of `to`."New value: +"One edge per parent–child pair."
    • changedOutput schema / properties / edges / items / description
      Previous value: -"One deduplicated pedigree edge between two nodes."New value: +"One parent–child pair, recorded once whichever side found it."
    • addedOutput schema / properties / edges / items / properties / isCycle
      Added value: +{
      +  "description": "True when this edge closes a loop (the parent is already a descendant of the child); the walk does not continue past it. Absent on other edges.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / edges / items / properties / parentType / description
      Previous value: -"E.g. MALE, FEMALE, SELF, when the upstream response supplies it."New value: +"The parent's role in the cross (e.g. MALE, FEMALE, SELF), when the upstream response supplies it."
    • changedOutput schema / properties / edges / items / properties / relationship / description
      Previous value: -"Direction: parent = from is a parent of to; child = from is a descendant of to."New value: +"Which lookup found the pair. parent = from is a parent of to (found via /pedigree); child = from is a child of to (found via /progeny). A pair found both ways is listed once, as parent."
    • changedOutput schema / properties / edgesDataframe / description
      Previous value: -"Canvas dataframe holding the full edge set, present when the walk exceeds loadLimit — edges[] is then a bounded preview. Any edge field that is a reserved SQL word (e.g. `from` → `from_`) is renamed to a SQL-safe identifier; columnLegend maps it back. Query with brapi_dataframe_query (SQL)."New value: +"The full edge set, staged when the walk exceeds loadLimit; edges[] is then a bounded preview. Reserved-word columns are renamed (`from` → `from_`; see columnLegend)."
    • changedOutput schema / properties / edgesDataframe / properties / columnLegend / description
      Previous value: -"Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` → `end_`). Present only when a column was renamed — write SQL against the sanitized (left-hand) names."New value: +"Sanitized column name → original upstream key, present only when a column was renamed to be SQL-safe (e.g. `end` → `end_`). SQL uses the sanitized names."
    • changedOutput schema / properties / edgesDataframe / properties / columns / description
      Previous value: -"Full column list of the dataframe."New value: +"Every column name."
    • changedOutput schema / properties / edgesDataframe / properties / columns / items / description
      Previous value: -"Column name from the materialized rows."New value: +"Column name."
    • changedOutput schema / properties / edgesDataframe / properties / createdAt / description
      Previous value: -"ISO 8601 timestamp the dataframe was created."New value: +"ISO 8601 creation time."
    • changedOutput schema / properties / edgesDataframe / properties / expiresAt / description
      Previous value: -"ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry."New value: +"ISO 8601 time the dataframe metadata is purged; copy rows out before, or re-run the producing tool."
    • changedOutput schema / properties / edgesDataframe / properties / maxRows / description
      Previous value: -"Cap that was applied at create time, when truncation occurred."New value: +"Row cap that ended the pull, present only when that cap fired."
    • changedOutput schema / properties / edgesDataframe / properties / rowCount / description
      Previous value: -"Number of rows materialized in the dataframe."New value: +"Rows in the dataframe."
    • changedOutput schema / properties / edgesDataframe / properties / tableName / description
      Previous value: -"Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL)."New value: +"Table name for brapi_dataframe_describe and brapi_dataframe_query."
    • changedOutput schema / properties / edgesDataframe / properties / totalCount / description
      Previous value: -"Total rows reported by the upstream server (may exceed rowCount when truncated)."New value: +"Upstream-reported row total, when known; can exceed rowCount."
    • changedOutput schema / properties / edgesDataframe / properties / truncated / description
      Previous value: -"True when the dataframe hit a row cap before exhausting upstream."New value: +"True when the dataframe holds less than the upstream reports: a cap, failed page, deadline, or short upstream ended the pull, or it was skipped. warnings says which. Absent otherwise."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection is registered under the requested alias, and the server has no base URL configured for it to connect on first use. `auth_token_exchange_failed`: Connecting the alias on first use, the SGN or OAuth token exchange against the BrAPI /token endpoint failed. `auth_no_access_token`: Connecting the alias on first use, the token endpoint answered without returning an access token. `capability_discovery_unavailable`: Neither /serverinfo nor /calls listed any call, and at least one of them timed out, was unreachable, or answered 429 or a 5xx other than 501, so nothing was cached. `upstream_unauthorized`: The BrAPI server answered HTTP 401: it requires credentials, or rejected the ones sent. `upstream_forbidden`: The BrAPI server answered HTTP 403: the credentials sent, or their absence, lack access. `alias_base_url_invalid`: The base URL configured on the server for this alias is not an absolute http(s) URL, or carries credentials. `private_address_blocked`: The base URL configured for this alias, or its token URL, is on a private or reserved address this server may not reach. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "unknown_alias"
      -]New value: +[
      +  "unknown_alias",
      +  "auth_token_exchange_failed",
      +  "auth_no_access_token",
      +  "capability_discovery_unavailable",
      +  "upstream_unauthorized",
      +  "upstream_forbidden",
      +  "alias_base_url_invalid",
      +  "private_address_blocked"
      +]
    • changedOutput schema / properties / leafCount / description
      Previous value: -"Nodes that have no outgoing edges in the walked direction — terminal in the DAG."New value: +"Non-root nodes with nothing recorded beyond them: ancestors with no parents, descendants with no progeny (a node on both sides needs neither). Includes nodes the depth limit stopped at."
    • changedOutput schema / properties / nodes / items / properties / direction / description
      Previous value: -"Side of the root this node was reached from. `root` = the starting germplasm itself. `ancestor` = reached via /pedigree (a parent of the root or one of its parents). `descendant` = reached via /progeny. `both` = encountered as both an ancestor and a descendant in a bidirectional walk (rare — backcross or selfing chain)."New value: +"`root` = a starting germplasm; `ancestor` = reached upward via /pedigree; `descendant` = reached downward via /progeny; `both` = reached from both sides (a descendant of one root and an ancestor of another, or a node on a pedigree loop)."
    • changedOutput schema / properties / nodesDataframe / description
      Previous value: -"Canvas dataframe holding the full node set, present when the walk exceeds loadLimit — nodes[] is then a bounded preview. Query with brapi_dataframe_query (SQL); JOIN to the edges dataframe on germplasmDbId."New value: +"The full node set, staged when the walk exceeds loadLimit; nodes[] is then a bounded preview. JOIN its germplasmDbId to the edges dataframe on from_ or to."
    • changedOutput schema / properties / nodesDataframe / properties / columnLegend / description
      Previous value: -"Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` → `end_`). Present only when a column was renamed — write SQL against the sanitized (left-hand) names."New value: +"Sanitized column name → original upstream key, present only when a column was renamed to be SQL-safe (e.g. `end` → `end_`). SQL uses the sanitized names."
    • changedOutput schema / properties / nodesDataframe / properties / columns / description
      Previous value: -"Full column list of the dataframe."New value: +"Every column name."
    • changedOutput schema / properties / nodesDataframe / properties / columns / items / description
      Previous value: -"Column name from the materialized rows."New value: +"Column name."
    • changedOutput schema / properties / nodesDataframe / properties / createdAt / description
      Previous value: -"ISO 8601 timestamp the dataframe was created."New value: +"ISO 8601 creation time."
    • changedOutput schema / properties / nodesDataframe / properties / expiresAt / description
      Previous value: -"ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry."New value: +"ISO 8601 time the dataframe metadata is purged; copy rows out before, or re-run the producing tool."
    • changedOutput schema / properties / nodesDataframe / properties / maxRows / description
      Previous value: -"Cap that was applied at create time, when truncation occurred."New value: +"Row cap that ended the pull, present only when that cap fired."
    • changedOutput schema / properties / nodesDataframe / properties / rowCount / description
      Previous value: -"Number of rows materialized in the dataframe."New value: +"Rows in the dataframe."
    • changedOutput schema / properties / nodesDataframe / properties / tableName / description
      Previous value: -"Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL)."New value: +"Table name for brapi_dataframe_describe and brapi_dataframe_query."
    • changedOutput schema / properties / nodesDataframe / properties / totalCount / description
      Previous value: -"Total rows reported by the upstream server (may exceed rowCount when truncated)."New value: +"Upstream-reported row total, when known; can exceed rowCount."
    • changedOutput schema / properties / nodesDataframe / properties / truncated / description
      Previous value: -"True when the dataframe hit a row cap before exhausting upstream."New value: +"True when the dataframe holds less than the upstream reports: a cap, failed page, deadline, or short upstream ended the pull, or it was skipped. warnings says which. Absent otherwise."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "When the walk was staged, the node and edge dataframes and how to read them.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when the walk hit the 1000-node safety cap before exhausting depth."New value: +"True when the walk hit its safety cap (1000 nodes or 10000 edges) before exhausting depth."
    • changedOutput schema / properties / warnings / description
      Previous value: -"Advisory messages (capability gaps, per-node expansion failures)."New value: +"Advisory messages (capability gaps, per-node expansion failures, an omitted diagram)."
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description goes well beyond by disclosing deduplication, cycle detection, direction semantics, the 24,000-byte preview budget and first-row-over-budget truncation behavior, and the fact that diagrams cover only the discovered graph. It also clarifies that unresolved frontier items are staged rather than silently dropped.

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?

Four dense sentences with the core action front-loaded and constraints following; every sentence carries information. Slightly heavy in packing output-field semantics (leafCount, confirmedLeafCount, frontier) into description prose when an output schema exists.

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

Completeness5/5

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

For a graph-traversal tool with six parameters, an output schema and safety annotations, the description covers scope, direction limits, preview budgets, truncation handling, downstream staging, and diagram coverage. An agent has everything needed to invoke it correctly and know what it will not return.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents alias, diagram, maxDepth, direction, loadLimit and germplasmDbIds in detail. The description adds only a small amount, mostly clarifying that diagrams and previews are bounded and that direction='both' is a union walk rather than a full cross-link — the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource — walking germplasm ancestry/descendancy — and qualifies it as a deduplicated DAG with cycle detection and depth limits. That is distinguishable from brapi_get_germplasm (record fetch) and the brapi_dataframe_* tools without opening any schema.

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

Usage Guidelines4/5

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

Gives clear context on what the tool produces and explicitly routes follow-up work to brapi_dataframe_describe and brapi_dataframe_query for trimmed/omitted relatives. No explicit exclusions or 'when not to use this vs X' statement, so it stops short of a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.