Skip to main content
Glama

Read Sheet Structure

sheet.schema
Read-onlyIdempotent

Read a sheet's STRUCTURE (not its rows): every attribute with its id, code, name and canonical dataType, plus the live option items of Select/Status/Multi-Select fields (an archived choice carries archived: true), each field's default value when it has one, the sheet's views, and its peeks with their kind (form: collects new rows, changed with form.; record: a record layout, how a row opens, changed with peek.). Call this before any structural edit — sheet.update_attribute needs the attribute id, and editing options requires the EXISTING option ids returned here (reusing an id edits that option in place; a new option is added by omitting the id). Use sheet.read instead when you want the data in the rows.

Input Schema

NameRequiredDescriptionDefault
sheetIdYes

Output Schema

NameRequiredDescriptionDefault
peeksYesPeeks (detail layouts) and forms
sheetYesThe sheet
viewsYesViews on the sheet
truncatedYesTrue when the sheet's schema was too large to return in full
attributesYesFields with their live option ids; reuse those ids verbatim when editing choices

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / attributes / items / properties / options / properties / fileRules
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "File List only: which files the field takes and how many",
      +  "properties": {
      +    "allowedExtensions": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "allowedFiles": {
      +      "type": "string"
      +    },
      +    "maxFiles": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "allowedFiles"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / peeks / items / properties / isForm / description
      Added value: +"kind === \"form\""
    • addedOutput schema / properties / peeks / items / properties / kind
      Added value: +{
      +  "description": "form: collects new rows; record: how a row opens",
      +  "enum": [
      +    "form",
      +    "record"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / peeks / items / required
      Previous value: -[
      -  "id",
      -  "name",
      -  "isForm"
      -]New value: +[
      +  "id",
      +  "name",
      +  "kind",
      +  "isForm"
      +]
  3. Changed16 schema fields changed
    • removedOutput schema / properties / attributes / items / properties / code / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / attributes / items / properties / code / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / color / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / color / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / id / anyOf
      Removed value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "type": "string"
      -      },
      -      {
      -        "type": "number"
      -      }
      -    ]
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / id / type
      Added value: +[
      +  "string",
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / stage / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / stage / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / title / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / title / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / peeks / items / properties / id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "number"
      -  }
      -]
    • addedOutput schema / properties / peeks / items / properties / id / type
      Added value: +[
      +  "string",
      +  "number"
      +]
    • removedOutput schema / properties / sheet / properties / spaceId / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / sheet / properties / spaceId / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / sheet / properties / type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / sheet / properties / type / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. Changed2 schema fields changed
    • addedOutput schema / properties / attributes / items / properties / default
      Added value: +{
      +  "description": "The value a new row starts with"
      +}
    • addedOutput schema / properties / attributes / items / properties / options / properties / items / items / properties / archived
      Added value: +{
      +  "type": "boolean"
      +}
  5. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive/closed-world, and the description adds real behavioral detail beyond them: archived options carry archived: true, defaults appear only when present, and peeks are typed by kind with the implication of which update verb applies (form.* vs peek.*). Much of the rest restates return content that the output schema already covers, which caps it below a full 5.

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?

Front-loaded with the disambiguating heading clause and then the pre-edit rule, so the most decision-relevant information comes first. The middle enumeration is dense with parentheticals and could be tightened, but every clause carries content rather than filler.

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?

With an output schema present and rich annotations, the description does not need to explain return values, yet it supplies the selection rule and the downstream-id semantics that make the tool usable in a workflow. Nothing essential is missing; only the sheetId parameter is left to inference.

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?

Only one parameter (sheetId) with 0% schema description coverage, and the description never explicitly characterizes it — the reader infers it is the target sheet's id from the surrounding prose. It is a low-ambiguity integer, so this is a minor gap rather than a blocker, but the description does not compensate for the schema gap as a 4 would require.

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?

Opens with a specific verb+resource+scope: "Read a sheet's STRUCTURE (not its rows)", immediately disambiguating it from sheet.read and other sheet.* siblings. It then enumerates exactly what structure means (attributes, ids, dataType, options, defaults, views, peeks with kind), so an agent can tell what it will get without opening the 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?

Gives an explicit precondition — "Call this before any structural edit" — with the concrete reason (sheet.update_attribute needs the attribute id; option edits need existing option ids). It also names the alternative and the condition selecting it: "Use sheet.read instead when you want the data in the rows."

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