Skip to main content
Glama

Get tree documentation

get_tree_docs
Read-onlyIdempotent

Tree documentation for one dataset: coverage note from the shipped README and per-stack bundle or node counts from the shipped index. Does not read or modify range bytes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
datasetYesDataset id from list_datasets, e.g. "nl/v2", "nl9", "nlmtt8", "plo", "plo9", "plo5", "plo6hu".

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent instead of a payload when the request named something that does not exist. No figure is estimated in its place.
sourceNoFile the coverage note came from.
stacksNoPer-stack counts.
datasetNoDataset id, echoed.
coverageNoCoverage row from the shipped README.
preflopExploitabilityNoAlways "not available".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Tree documentation and per-stack counts for one dataset.",
      +  "properties": {
      +    "coverage": {
      +      "description": "Coverage row from the shipped README.",
      +      "type": "string"
      +    },
      +    "dataset": {
      +      "description": "Dataset id, echoed.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "description": "Present instead of a payload when the request named something that does not exist. No figure is estimated in its place.",
      +      "type": "string"
      +    },
      +    "preflopExploitability": {
      +      "description": "Always \"not available\".",
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "File the coverage note came from.",
      +      "type": "string"
      +    },
      +    "stacks": {
      +      "description": "Per-stack counts.",
      +      "items": {
      +        "description": "One stack depth of the dataset.",
      +        "properties": {
      +          "analyzed": {
      +            "description": "Analyzed rows at this depth.",
      +            "type": "integer"
      +          },
      +          "bundles": {
      +            "description": "Bundles at this depth, for per-bundle datasets.",
      +            "items": {
      +              "description": "One bundle.",
      +              "properties": {
      +                "analyzed": {
      +                  "description": "Whether the bundle was analyzed.",
      +                  "type": "boolean"
      +                },
      +                "decisionNodes": {
      +                  "description": "Decision nodes in the bundle.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "edges": {
      +                  "description": "Edges in the bundle.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "gzBytes": {
      +                  "description": "Compressed size in bytes.",
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "key": {
      +                  "description": "Bundle key.",
      +                  "type": "string"
      +                },
      +                "position": {
      +                  "description": "Acting position the bundle covers.",
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "decisionNodes": {
      +            "description": "Decision nodes across the bundles.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "edges": {
      +            "description": "Edges across the bundles.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "formats": {
      +            "description": "Formats at this depth.",
      +            "items": {
      +              "description": "Format label.",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "hasRaiseMeta": {
      +            "description": "Whether raise metadata is stored.",
      +            "type": "boolean"
      +          },
      +          "note": {
      +            "description": "How to read the rows at this depth.",
      +            "type": "string"
      +          },
      +          "positions": {
      +            "description": "Positions at this depth.",
      +            "items": {
      +              "description": "Seat label.",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "rows": {
      +            "description": "Index rows at this depth.",
      +            "type": "integer"
      +          },
      +          "sampleKeys": {
      +            "description": "Sample keys, for per-node datasets.",
      +            "items": {
      +              "description": "A node key.",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "stackBb": {
      +            "description": "Stack depth in big blinds.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false and closed-world, so the safety profile is covered. The description adds real scope detail beyond that: it clarifies the payload comes only from the shipped README and shipped index, and explicitly that range bytes are neither read nor modified. That scoping is meaningful added context, though no auth, staleness or paging behavior is mentioned.

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

Conciseness5/5

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

Two compact sentences, front-loaded with what the tool returns, followed by a scope-limiting exclusion. Every clause carries information and nothing is redundant.

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?

For a one-parameter, read-only tool with full annotations and an output schema, the description needn't explain return values, and it adequately covers content and scope. It is essentially complete, with only the absence of any when-to-use guidance keeping it from a 5.

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?

There is a single parameter (dataset) at 100% schema description coverage, with the schema supplying concrete id examples. The description contributes only "for one dataset", adding no format or constraint beyond what the schema already documents, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource (documentation for one dataset's tree) and enumerates exactly what the payload contains: a coverage note from the shipped README and per-stack bundle/node counts from the shipped index. This is far more specific than a tautology. However, it never names a sibling it should be preferred over (e.g. get_range or get_range_metadata), so sibling differentiation is left implicit.

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 clause "Does not read or modify range bytes" gives a negative boundary that implicitly routes an agent wanting actual range data to a sibling like get_range. But there is no positive statement of when to reach for this tool and no alternative is named, so guidance is merely implied.

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.

Resources