Skip to main content
Glama
figjam-context-mcp

figjam-context-mcp

Get Board Context

get_board_context
Read-onlyIdempotent

Retrieves source-cited context from an ingested FigJam board snapshot, including section overviews, node excerpts, search results, and paginated details for summaries or documentation.

Instructions

Read source-cited context from an ingested board snapshot. Start overviews, summaries and documentation with a call without topic, nodeIds, limit and maxChars: its first page names the largest sections and lists sections with IDs. Then pass section, page, frame or group IDs as nodeIds; several IDs share each page in request order. For a whole-board summary, pass all top-level section IDs (at most 50 per call) with maxChars 24000, follow nextCursor, then read outsideSections: true. Default detail: "auto" switches reads of multiple distinct IDs or one page, section, frame or group to a compact overview only when the first full page would leave unread excerpts. Overview lines contain node IDs and deterministically shortened text (50–120 characters); structuredContent puts the excerpts once in overview.text, with empty evidence and clusters. limit applies only to the full view and is ignored in an overview, even when explicit. Read the complete source and Figma link with the same boardId and snapshotId, nodeIds: [""] and detail: "full"; table IDs read every row. Without overview, excerpts are in evidence. Read outsideSections: true, search with topic, or continue with cursor. Cite the node ID or Figma link behind each statement. Synthesize the answer yourself. No network or LLM calls; use ingest_board to refresh Figma content.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum evidence excerpts per full page (default 20, at most 100); ignored in an automatic overview, even when explicit. Use detail: full for an excerpt limit
topicNoWords to search for. An excerpt matches when at least one of them is in its text, its section or node name, the label of an arrow attached to it or, for a table row, its column headings, as a whole word ignoring case and accents (words of five or more letters also match compounds that begin with them); excerpts with more of the words come first. Other word forms, synonyms and translations do not match: include them yourself, for example "payment payments pay Bezahlung". Cannot be combined with nodeIds or outsideSections.
cursorNonextCursor of the previous page, unchanged; send it with the same topic, nodeIds, outsideSections, detail, limit and maxChars
detailNoauto uses a compact, source-marked overview when a requested container or several nodeIds need multiple full pages; full returns linked evidence objects. Overview lines may be shortened; use full to read all textauto
boardIdYesThe Figma file key returned by ingest_board, or the board URL. A URL with a node-id, without nodeIds, topic and outsideSections, reads that node
nodeIdsNoRead exact source nodes, all rows of a table or the row of a table cell, or every excerpt inside a page, section, frame or group by its ID (nested sections included, in reading order); several IDs in one call share every page in request order; cannot be combined with topic
maxCharsNoCharacter budget for each representation: the readable text content and the JSON of structuredContent (default 12000, minimum 2000)
snapshotIdNoRead a specific retained snapshot instead of the latest board
outsideSectionsNoRead every excerpt that lies in no section, cluster by cluster in reading order, tables row by row; on a board without sections, all excerpts. Cannot be combined with topic or nodeIds

Output Schema

NameRequiredDescriptionDefault
clustersYes
evidenceYesFull linked excerpts; empty in overview mode, where excerpts are in overview.text instead
overviewNoPresent only for automatic compact overview pages; evidence and clusters are empty, not a claim of no matches. Read a line's full text and Figma link with the same boardId and snapshotId, its nodeId, and detail: full
relationsNoCluster-to-cluster relations derived from connector arrows
truncatedYes
nextCursorNo
snapshotIdYes
truncationYesExplicit omissions from structured results and the readable text
connectionsYesArrows with at least one end, or a section, frame or group around one, among this page's excerpts; never arrows to a page. The label is the text on the arrow
contextTextYesOrientation and reading instructions. Excerpts are in overview.text when overview is present (evidence and clusters are then empty), otherwise in evidence; text content carries the same readable excerpts
totalMatchedYes
unknownNodeIdsNoRequested nodeIds that are not in this snapshot; the others are read
ignoredArgumentsNoUnknown input keys that were ignored; their values are not echoed. Absent when none

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.12.0
    • changedInput schema / properties / boardId / description
      Previous value: -"The Figma file key returned by ingest_board"New value: +"The Figma file key returned by ingest_board, or the board URL. A URL with a node-id, without nodeIds, topic and outsideSections, reads that node"
    • changedInput schema / properties / boardId / maxLength
      Previous value: -128New value: +2048
    • removedInput schema / properties / boardId / pattern
      Removed value: -"^[A-Za-z0-9]+$"
    • changedInput schema / properties / topic / description
      Previous value: -"Optional topic to focus the context on"New value: +"Words to search for. An excerpt matches when at least one of them is in its text, its section or node name, the label of an arrow attached to it or, for a table row, its column headings, as a whole word ignoring case and accents (words of five or more letters also match compounds that begin with them); excerpts with more of the words come first. Other word forms, synonyms and translations do not match: include them yourself, for example \"payment payments pay Bezahlung\". Cannot be combined with nodeIds or outsideSections."
    • addedOutput schema / properties / clusters / items / properties / frameNames
      Added value: +{
      +  "description": "Named enclosing frames and groups, outermost first; excerpts repeat them only where they differ",
      +  "items": {
      +    "maxLength": 80,
      +    "type": "string"
      +  },
      +  "maxItems": 16,
      +  "type": "array"
      +}
    • addedOutput schema / properties / evidence / items / properties / frameNames
      Added value: +{
      +  "description": "Named enclosing frames and groups, outermost first; included only when nonempty and different from the cluster",
      +  "items": {
      +    "maxLength": 80,
      +    "type": "string"
      +  },
      +  "maxItems": 16,
      +  "type": "array"
      +}
    • addedOutput schema / properties / ignoredArguments
      Added value: +{
      +  "description": "Unknown input keys that were ignored; their values are not echoed. Absent when none",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed16 schema fields changedv0.10.3
    • changedInput schema / properties / cursor / description
      Previous value: -"nextCursor of the previous page, unchanged; send it with the same topic, nodeIds, outsideSections, limit and maxChars"New value: +"nextCursor of the previous page, unchanged; send it with the same topic, nodeIds, outsideSections, detail, limit and maxChars"
    • addedInput schema / properties / detail
      Added value: +{
      +  "default": "auto",
      +  "description": "auto uses a compact, source-marked overview when a requested container or several nodeIds need multiple full pages; full returns linked evidence objects. Overview lines may be shortened; use full to read all text",
      +  "enum": [
      +    "auto",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum evidence excerpts per page (default 20)"New value: +"Maximum evidence excerpts per full page (default 20, at most 100); ignored in an automatic overview, even when explicit. Use detail: full for an excerpt limit"
    • changedInput schema / properties / maxChars / description
      Previous value: -"Character budget for each representation: the readable text content and the JSON of structuredContent (default 12000)"New value: +"Character budget for each representation: the readable text content and the JSON of structuredContent (default 12000, minimum 2000)"
    • changedInput schema / properties / maxChars / minimum
      Previous value: -512New value: +2000
    • changedOutput schema / properties / clusters / items / properties / summary / description
      Previous value: -"Model summary of the cluster; empty for deterministic clusters, whose excerpts carry the text"New value: +"Model summary of the cluster; empty for deterministic clusters, whose excerpts carry the text, and where maxChars leaves no room for it"
    • changedOutput schema / properties / contextText / description
      Previous value: -"Orientation: board header, page position, board overview or subsections. The excerpts are in evidence; the text content carries the readable version"New value: +"Orientation and reading instructions. Excerpts are in overview.text when overview is present (evidence and clusters are then empty), otherwise in evidence; text content carries the same readable excerpts"
    • addedOutput schema / properties / evidence / description
      Added value: +"Full linked excerpts; empty in overview mode, where excerpts are in overview.text instead"
    • addedOutput schema / properties / evidence / items / properties / chunkIndex / description
      Added value: +"Absent means 0"
    • addedOutput schema / properties / evidence / items / properties / modelDerived / description
      Added value: +"Absent means false, independent of the cluster's modelDerived"
    • addedOutput schema / properties / evidence / items / properties / snapshotId / description
      Added value: +"Omitted when inherited from the response snapshotId; only snapshotId is inherited"
    • addedOutput schema / properties / evidence / items / properties / truncated / description
      Added value: +"Absent means false, independent of the cluster"
    • changedOutput schema / properties / evidence / items / required
      Previous value: -[
      -  "evidenceId",
      -  "snapshotId",
      -  "nodeId",
      -  "text",
      -  "sourceType",
      -  "modelDerived",
      -  "chunkIndex",
      -  "url",
      -  "truncated"
      -]New value: +[
      +  "evidenceId",
      +  "nodeId",
      +  "text",
      +  "sourceType",
      +  "url"
      +]
    • addedOutput schema / properties / overview
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present only for automatic compact overview pages; evidence and clusters are empty, not a claim of no matches. Read a line's full text and Figma link with the same boardId and snapshotId, its nodeId, and detail: full",
      +  "properties": {
      +    "shortenedEvidence": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "shownEvidence": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "text": {
      +      "description": "Source-marked excerpt lines grouped by innermost section; the excerpt texts occur only here in structuredContent",
      +      "type": "string"
      +    },
      +    "textLimit": {
      +      "maximum": 120,
      +      "minimum": 50,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "text",
      +    "shownEvidence",
      +    "shortenedEvidence",
      +    "textLimit"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / truncation / properties / omittedSummaries
      Added value: +{
      +  "description": "Clusters on this page whose model summary is left empty to fit maxChars",
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / unknownNodeIds
      Added value: +{
      +  "description": "Requested nodeIds that are not in this snapshot; the others are read",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed4 schema fields changedv0.10.2
    • changedInput schema / properties / cursor / description
      Previous value: -"Continue a page using the same query, snapshot, limit and maxChars"New value: +"nextCursor of the previous page, unchanged; send it with the same topic, nodeIds, outsideSections, limit and maxChars"
    • addedOutput schema / properties / connections / description
      Added value: +"Arrows with at least one end, or a section, frame or group around one, among this page's excerpts; never arrows to a page. The label is the text on the arrow"
    • addedOutput schema / properties / connections / items / properties / fromText
      Added value: +{
      +  "description": "Short text or name of the start node when it is not among this page's excerpts, redacted like excerpts",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • addedOutput schema / properties / connections / items / properties / toText
      Added value: +{
      +  "description": "Short text or name of the end node when it is not among this page's excerpts, redacted like excerpts",
      +  "maxLength": 80,
      +  "type": "string"
      +}
  4. Changed2 schema fields changedv0.8.0
    • changedInput schema / properties / nodeIds / description
      Previous value: -"Read exact source nodes, all rows of a table or the row of a table cell, or every excerpt inside a page, section, frame or group by its ID (nested sections included, in reading order); cannot be combined with topic"New value: +"Read exact source nodes, all rows of a table or the row of a table cell, or every excerpt inside a page, section, frame or group by its ID (nested sections included, in reading order); several IDs in one call share every page in request order; cannot be combined with topic"
    • addedInput schema / properties / outsideSections
      Added value: +{
      +  "description": "Read every excerpt that lies in no section, cluster by cluster in reading order, tables row by row; on a board without sections, all excerpts. Cannot be combined with topic or nodeIds",
      +  "type": "boolean"
      +}
  5. Changed9 schema fields changedv0.7.0
    • changedInput schema / properties / maxChars / description
      Previous value: -"Character budget for the whole structured result (JSON of structuredContent, including contextText; default 12000)"New value: +"Character budget for each representation: the readable text content and the JSON of structuredContent (default 12000)"
    • changedInput schema / properties / nodeIds / description
      Previous value: -"Read exact source nodes or table cells; cannot be combined with topic"New value: +"Read exact source nodes, all rows of a table or the row of a table cell, or every excerpt inside a page, section, frame or group by its ID (nested sections included, in reading order); cannot be combined with topic"
    • addedOutput schema / properties / clusters / items / properties / pageName
      Added value: +{
      +  "description": "Page of this cluster's excerpts on this page of results; excerpts repeat it only where they differ",
      +  "maxLength": 160,
      +  "type": "string"
      +}
    • addedOutput schema / properties / clusters / items / properties / sectionNames
      Added value: +{
      +  "description": "Enclosing sections, outermost first, of this cluster's excerpts; excerpts repeat them only where they differ",
      +  "items": {
      +    "maxLength": 80,
      +    "type": "string"
      +  },
      +  "maxItems": 16,
      +  "type": "array"
      +}
    • addedOutput schema / properties / clusters / items / properties / summary / description
      Added value: +"Model summary of the cluster; empty for deterministic clusters, whose excerpts carry the text"
    • addedOutput schema / properties / contextText / description
      Added value: +"Orientation: board header, page position, board overview or subsections. The excerpts are in evidence; the text content carries the readable version"
    • addedOutput schema / properties / evidence / items / properties / pageName / description
      Added value: +"Only for an excerpt outside the listed clusters or whose location differs from its cluster's"
    • addedOutput schema / properties / evidence / items / properties / sectionNames / description
      Added value: +"Same rule as pageName; an empty list means outside sections"
    • changedOutput schema / properties / evidence / items / properties / sourceType / enum
      Previous value: -[
      -  "board_text",
      -  "table_cell",
      -  "board_metadata",
      -  "model_interpretation",
      -  "cluster_summary"
      -]New value: +[
      +  "board_text",
      +  "table_cell",
      +  "table_row",
      +  "board_metadata",
      +  "model_interpretation",
      +  "cluster_summary"
      +]
  6. Changed1 schema field changedv0.6.0
    • changedInput schema / properties / maxChars / description
      Previous value: -"Character budget for the readable context (default 12000)"New value: +"Character budget for the whole structured result (JSON of structuredContent, including contextText; default 12000)"
  7. Changed27 schema fields changedv0.4.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / boardId / description
      Added value: +"The Figma file key returned by ingest_board"
    • addedInput schema / properties / boardId / maxLength
      Added value: +128
    • addedInput schema / properties / boardId / minLength
      Added value: +6
    • addedInput schema / properties / boardId / pattern
      Added value: +"^[A-Za-z0-9]+$"
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "Continue a page using the same query, snapshot, limit and maxChars",
      +  "maxLength": 2048,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 20,
      +  "description": "Maximum evidence excerpts per page (default 20)",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / maxChars
      Added value: +{
      +  "default": 12000,
      +  "description": "Character budget for the readable context (default 12000)",
      +  "maximum": 24000,
      +  "minimum": 512,
      +  "type": "integer"
      +}
    • addedInput schema / properties / nodeIds
      Added value: +{
      +  "description": "Read exact source nodes or table cells; cannot be combined with topic",
      +  "items": {
      +    "maxLength": 200,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / snapshotId
      Added value: +{
      +  "description": "Read a specific retained snapshot instead of the latest board",
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "pattern": "^[A-Za-z0-9_-]+$",
      +  "type": "string"
      +}
    • addedInput schema / properties / topic / maxLength
      Added value: +200
    • addedInput schema / properties / topic / minLength
      Added value: +1
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / properties / clusters / items / properties / modelDerived
      Added value: +{
      +  "description": "True for model summaries and summaries whose non-model origin cannot be established",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / clusters / items / properties / sourceNodeIds / description
      Added value: +"Source nodes displayed on this page, not citations validating the cluster summary"
    • addedOutput schema / properties / clusters / items / properties / summarySource
      Added value: +{
      +  "description": "Origin of the derived cluster summary; the summary is not verbatim source evidence",
      +  "enum": [
      +    "vision_llm",
      +    "text_llm",
      +    "deterministic",
      +    "cache",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / clusters / items / required
      Previous value: -[
      -  "label",
      -  "summary",
      -  "sourceNodeIds"
      -]New value: +[
      +  "label",
      +  "summary",
      +  "summarySource",
      +  "modelDerived",
      +  "sourceNodeIds"
      +]
    • addedOutput schema / properties / connections
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "connectorId": {
      +        "type": "string"
      +      },
      +      "direction": {
      +        "enum": [
      +          "forward",
      +          "reverse",
      +          "bidirectional",
      +          "undirected"
      +        ],
      +        "type": "string"
      +      },
      +      "fromNodeId": {
      +        "type": "string"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "toNodeId": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "connectorId",
      +      "fromNodeId",
      +      "toNodeId",
      +      "direction",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / evidence
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "chunkIndex": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "clusterId": {
      +        "type": "string"
      +      },
      +      "clusterLabel": {
      +        "type": "string"
      +      },
      +      "column": {
      +        "type": "number"
      +      },
      +      "evidenceId": {
      +        "type": "string"
      +      },
      +      "modelDerived": {
      +        "type": "boolean"
      +      },
      +      "nodeId": {
      +        "type": "string"
      +      },
      +      "nodeName": {
      +        "maxLength": 160,
      +        "type": "string"
      +      },
      +      "pageId": {
      +        "type": "string"
      +      },
      +      "pageName": {
      +        "maxLength": 160,
      +        "type": "string"
      +      },
      +      "renderNodeId": {
      +        "type": "string"
      +      },
      +      "row": {
      +        "type": "number"
      +      },
      +      "sectionIds": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "sectionNames": {
      +        "items": {
      +          "maxLength": 80,
      +          "type": "string"
      +        },
      +        "maxItems": 16,
      +        "type": "array"
      +      },
      +      "snapshotId": {
      +        "type": "string"
      +      },
      +      "sourceType": {
      +        "enum": [
      +          "board_text",
      +          "table_cell",
      +          "board_metadata",
      +          "model_interpretation",
      +          "cluster_summary"
      +        ],
      +        "type": "string"
      +      },
      +      "text": {
      +        "type": "string"
      +      },
      +      "truncated": {
      +        "type": "boolean"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "evidenceId",
      +      "snapshotId",
      +      "nodeId",
      +      "text",
      +      "sourceType",
      +      "modelDerived",
      +      "chunkIndex",
      +      "url",
      +      "truncated"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / nextCursor
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / relations
      Added value: +{
      +  "description": "Cluster-to-cluster relations derived from connector arrows",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "edgeCount": {
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "from": {
      +        "description": "Label of the source cluster",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "Connector label(s), when the arrows are annotated",
      +        "type": "string"
      +      },
      +      "to": {
      +        "description": "Label of the target cluster",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "from",
      +      "to",
      +      "edgeCount"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / snapshotId
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / totalMatched
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / truncation
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Explicit omissions from structured results and the readable text",
      +  "properties": {
      +    "omittedConnections": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "omittedRelations": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "omittedTextConnections": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "omittedTextRelations": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "remainingEvidence": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "remainingEvidence",
      +    "omittedConnections",
      +    "omittedRelations",
      +    "omittedTextConnections",
      +    "omittedTextRelations"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "contextText",
      -  "clusters"
      -]New value: +[
      +  "contextText",
      +  "clusters",
      +  "snapshotId",
      +  "evidence",
      +  "connections",
      +  "totalMatched",
      +  "truncated",
      +  "truncation"
      +]
  8. First observedv0.1.0

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world behavior, and the description adds substantial context beyond them: no network or LLM calls, overview shortening to 50–120 characters, excerpts placed in structuredContent overview.text with empty evidence and clusters, limit being ignored in overview, and table IDs reading every row.

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

Conciseness3/5

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

The content is valuable but delivered as a dense run-on paragraph with repeated overview explanations and nested clauses, making it hard to scan. The purpose is front-loaded, but the middle-to-end could be restructured into bullets for faster parsing.

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 complex 9-parameter read tool with full schema coverage, annotations, and an output schema, the description covers the key workflows: overview, full read, topic search, cursor pagination, outsideSections, and citations. Return values and safety are handled by structured fields, so nothing essential 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%, so the baseline is 3. The description adds cross-parameter workflow semantics: omitting topic/nodeIds/limit/maxChars yields an overview, multiple nodeIds share pages in request order, whole-board summaries use top-level section IDs with maxChars 24000, and cursor must be reused with the same parameters. Much individual parameter documentation is already in the schema, so it is not a full 5.

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 opening sentence names a specific verb and resource ('Read source-cited context from an ingested board snapshot') and distinguishes the tool from ingest_board by directing refresh calls there. The closing 'Synthesize the answer yourself' also implicitly separates it from answer_from_board, even though that sibling is not named explicitly.

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?

It prescribes a detailed sequence: start without topic/nodeIds/limit/maxChars to get an overview, then pass container IDs, use all top-level section IDs with maxChars 24000 for a whole-board summary, follow nextCursor, then read outsideSections. It also covers topic search and cursor continuation. It stops short of explicitly stating when to choose answer_from_board instead.

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