Skip to main content
Glama

Business Frameworks: read a node

bf_read_node
Read-only

Returns one node with its citations and a cite-as line; variant chooses full (the default), terse (the lede alone) or agent (the same text as fields: scope, inputs, rule, action, check, units, example, the applied route, the recheck, and two strings to paste: recheck_note and closing_citation) at the same price. Free nodes (marked in bf_catalogue) cost nothing; the rest cost their catalogue price ($0.02 to $0.05, USDC on Base over x402), charged once per call, only when the node is returned. Call it with a path from bf_catalogue when the question needs that node's rule; prefer variant agent when you will answer from it (the decision in one sentence, the first step, the reason, the next check, the offer to write the recheck into the user's notes, then closing_citation last). Read the free parent first; use bf_resolve when the question takes several nodes. Do not call a paid path to see what it contains: the catalogue line says what it covers; a rule on numbers is bf_apply_decision.

Input Schema

NameRequiredDescriptionDefault
pathYesNode path from bf_catalogue, e.g. "risk" (free) or "risk/decide/hurdle" (paid). A full handle is accepted.
variantNofull (default): lede, conditions and reasoning; terse: the lede alone; agent: the same text as fields (scope, inputs, rule, action, check, reasoning, units, example, apply, recheck, recheck_note, closing_citation). The same price for all three.

Output Schema

NameRequiredDescriptionDefault
urlNo
kindNo
ruleNo
textNo
applyNo
checkNo
citesNo
scopeNo
titleNo
unitsNo
actionNo
handleYes
inputsNo
levelsNo
tokensNo
cite_asNo
exampleNo
recheckNo
relatedNo
variantNo
leads_toNo
versionsNo
citationsNo
reasoningNo
free_firstNo
recheck_noteNo
closing_citationNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / variant / description
      Previous value: -"full (default): lede, conditions and reasoning; terse: the lede alone. The same price either way."New value: +"full (default): lede, conditions and reasoning; terse: the lede alone; agent: the same text as fields (scope, inputs, rule, action, check, reasoning, units, example, apply, recheck, recheck_note, closing_citation). The same price for all three."
    • changedInput schema / properties / variant / enum
      Previous value: -[
      -  "full",
      -  "terse"
      -]New value: +[
      +  "full",
      +  "terse",
      +  "agent"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "description": "One node. full/terse: text (and levels), cites, related, cite_as. agent: the accepted text as fields — scope.applies_if / scope.not_for, inputs, rule, action, check, reasoning, units (every input's unit, bounds and default), example (the published example input run through the rule), citations, leads_to, apply (the applied route), free_first, recheck (cadence, trigger, handle, the exact re-run call), and two strings to paste unchanged: recheck_note and closing_citation.",
      +  "properties": {
      +    "action": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "apply": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "method": {
      +              "type": "string"
      +            },
      +            "schema_url": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "check": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "citations": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "cite_as": {
      +      "type": "string"
      +    },
      +    "cites": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "closing_citation": {
      +      "type": "string"
      +    },
      +    "example": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "action": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "basis": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "check": {
      +              "type": "string"
      +            },
      +            "error": {
      +              "type": "string"
      +            },
      +            "figures": {
      +              "additionalProperties": {},
      +              "properties": {},
      +              "type": "object"
      +            },
      +            "input": {
      +              "additionalProperties": {},
      +              "properties": {},
      +              "type": "object"
      +            },
      +            "source": {
      +              "type": "string"
      +            },
      +            "verdict": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "free_first": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "handle": {
      +      "type": "string"
      +    },
      +    "inputs": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "kind": {
      +      "type": "string"
      +    },
      +    "leads_to": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "levels": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "conditions": {
      +          "type": "string"
      +        },
      +        "lede": {
      +          "type": "string"
      +        },
      +        "reasoning": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "lede"
      +      ],
      +      "type": "object"
      +    },
      +    "reasoning": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "recheck": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "cadence": {
      +              "anyOf": [
      +                {
      +                  "anyOf": [
      +                    {
      +                      "type": "string"
      +                    },
      +                    {
      +                      "items": {
      +                        "type": "string"
      +                      },
      +                      "type": "array"
      +                    }
      +                  ]
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "handle": {
      +              "type": "string"
      +            },
      +            "rerun": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "body": {},
      +                "method": {
      +                  "type": "string"
      +                },
      +                "url": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "trigger": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "recheck_note": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "related": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "rule": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "scope": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "applies_if": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "not_for": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "applies_if",
      +        "not_for"
      +      ],
      +      "type": "object"
      +    },
      +    "text": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "tokens": {
      +      "type": "number"
      +    },
      +    "units": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "fields": {
      +              "additionalProperties": {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "note": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "required": {
      +              "anyOf": [
      +                {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "url": {
      +      "type": "string"
      +    },
      +    "variant": {
      +      "enum": [
      +        "full",
      +        "terse",
      +        "agent"
      +      ],
      +      "type": "string"
      +    },
      +    "versions": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "handle"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the read-only safety profile, and the description adds genuinely new behavioral context: free vs paid nodes, the $0.02–$0.05 USDC/x402 pricing charged once per call and only when the node is returned, and a strong nudge (prefer agent variant when answering from it, closing_citation last). None of this is in the structured fields.

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?

Purpose and the variant behavior are front-loaded and every clause carries information (pricing, routing, variant choice). It is, however, a dense run-on paragraph of semicolon-clause chains that takes effort to parse; a little structural separation would help.

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?

With an output schema present, return values need not be explained, yet the description still covers variant shapes, pricing conditions, and the cite-as behavior. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents both parameters, so baseline is 3. The description adds meaning: what each variant actually contains relative to the others and the fact that all three cost the same, which is decision-relevant beyond the enum description.

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

Purpose5/5

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

States a specific verb+resource (returns one node with citations and cite-as line) and immediately names the sibling it is not: bf_resolve for multi-node questions and bf_apply_decision for number rules. An agent can pick this tool over its siblings 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 Guidelines5/5

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

Explicit when-to-use (call with a path from bf_catalogue when the question needs that node's rule), when-not (do not call a paid path to see what it contains; a rule on numbers is bf_apply_decision), and alternatives (bf_resolve, read the free parent first). This is textbook routing guidance.

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.