Skip to main content
Glama

Create a table (FigJam)

figma_create_table
Idempotent

A FigJam table — the tool for any row-and-column data, never a grid of shapes. Give rows (text, 1–100 rows of 1–20 cells, every row the same length; all of the user's data, no placeholders) or numRows + numColumns for an empty one…

Instructions

A FigJam table — the tool for any row-and-column data, never a grid of shapes. Give rows (text, 1–100 rows of 1–20 cells, every row the same length; all of the user's data, no placeholders) or numRows + numColumns for an empty one: exactly one form. header (default true with rows) colours row 0 with headerColor, a table preset (default black: dark fill, white text): black, dark-gray, gray, light-gray, white, and green, teal, blue, violet, pink, red, orange, yellow each with a light- form (light-green, …), or a hex. fill colours the table; a fill is never removed ("" is refused). columnWidths / rowHeights resize; a column cannot shrink below its minimum, so the real widths come back. fontFamily, weight, fontSize apply to every cell. Cells have no ids: change them with figma_edit_table. Editors: unverified in FigJam, Slides.

Input Schema

NameRequiredDescriptionDefault
xNoLeft edge, in the parent's coordinates. Default: below what the parent holds; on the page, right of its content.
yNoTop edge, in the parent's coordinates.
fillNoTable preset or hex.
nameNoLayer name.
rowsNoThe data, row by row; row 0 is the header.
forceNoOverwrite on purpose. A write to a node someone changed after you last read it is refused (STALE); read it again and resend instead. Pass true only when the person said to overwrite their edit.
headerNoStyle row 0 as a header. Default true with rows, false for an empty table.
weightNoFont weight as a number ("600") or a Figma style name ("Semi Bold" — Inter uses spaces, not "SemiBold").
numRowsNoAn empty table: with numColumns, not with rows.
sessionNoOptional sessionId or file name, to pick a Figma file when more than one is connected.
fontSizeNo
parentIdNoA section or frame to put it in (id or Figma link). Default: the current page.
fontFamilyNo
numColumnsNo
rowHeightsNoOne height per row, px.
headerColorNoHeader preset or hex. Default black.
columnWidthsNoOne width per column, px.
idempotencyKeyNoCaller-owned retry key, ≤128 chars. Re-calling with the same key never executes twice: it returns the existing result, or waits for the op still in flight. Supply your own for anything large — if the MCP client times out (rather than the bridge), only a key you chose can be used to retry safely.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.3.0
    • addedInput schema / properties / force
      Added value: +{
      +  "description": "Overwrite on purpose. A write to a node someone changed after you last read it is refused (STALE); read it again and resend instead. Pass true only when the person said to overwrite their edit.",
      +  "type": "boolean"
      +}
  2. First observedv0.1.1

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (non-destructive, idempotent, closed-world), yet the description still adds real behavioral detail: fills are never removed and "" is refused, columns cannot shrink below a minimum so actual widths are returned, header styling defaults differ between rows and empty forms, and editors are unverified in FigJam/Slides. That is context the agent could not derive from the structured fields alone.

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?

A single dense paragraph that is front-loaded with the identity claim and the mutually exclusive input forms before moving to optional styling. Every clause carries information, though the preset colour enumeration is long enough to slightly crowd the rest.

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 an 18-parameter creation tool with no output schema, the description covers input forms, defaults, styling, and resize behavior well. The one real gap is what the call returns (presumably the created node/id), which the agent must infer because no output schema exists to cover it.

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?

With schema coverage at 83% the baseline is 3, and the description earns above that by listing the full preset colour vocabulary (black, dark-gray, …, light- variants, hex) that the schema only summarizes as 'Table preset or hex', by explaining the rows/numRows exclusivity, and by noting font settings apply to every cell. It leaves x/y/name/parentId/force/idempotencyKey untouched, but those carry their own schema text.

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 (a FigJam table) and immediately differentiates it from the nearest lookalike — 'never a grid of shapes' — which an agent can act on without comparing schemas against create_shapes_with_text. It also names the sibling that handles subsequent cell edits (figma_edit_table).

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 explicit routing rules: use a table rather than a grid of shapes for row-and-column data, and supply either `rows` or `numRows`+`numColumns` — 'exactly one form' — not both. It further routes the agent to figma_edit_table for changes because cells have no ids.

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

Deploy Server

Other Tools