Skip to main content
Glama
Agent Font Access

Agent Font Access

by nweii

Create text with an installed font

figma_local_fonts_create

Creates a Figma text layer using an exact locally installed font, loading the font before the layer appears so agents can add local-font text without uploading font files.

Instructions

Create one text layer directly with an exact local font, loaded before any layer appears. Supply the intended file connection, parent on the current page, name, text, font, size, and position. Returns the created node and revision for subsequent edits. If a response times out, inspect the parent before retrying to avoid a duplicate.

Input Schema

NameRequiredDescriptionDefault
xYesPosition relative to the parent; auto layout controls position in AUTO mode.
yYes
nameYes
colorNoSolid text color; defaults to black.
widthNo
heightNo
opacityNo
fontNameYesExact installed font from local font search or inspection. Loaded before creating any layer.
fontSizeYes
parentIdYesVisible, unlocked page, frame, group, component, or section on the current page. Instances are not supported.
charactersYesText to create with one font and style.
lineHeightNo
connectionIdYesExact connectionId from status for the intended file.
letterSpacingNo
textAutoResizeNoWIDTH_AND_HEIGHT
paragraphSpacingNo
layoutPositioningNoUse ABSOLUTE inside an auto-layout frame to honor x and y.AUTO
textAlignHorizontalNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0-beta.4

TDQS

A3.9/5.0
Behavior4/5

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

Goes meaningfully beyond the annotations: it discloses that the font is loaded before any layer appears (partial-failure behavior), that the call returns the created node and revision, and that a timeout can produce a duplicate node. This is exactly the non-idempotent risk the idempotentHint=false annotation hints at but does not explain. It says nothing about permissions or failure modes other than timeout.

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?

Four short sentences, front-loaded with the action and the atomicity guarantee, then inputs, return value, and the retry caveat. No filler; the only slightly wasteful phrasing is 'loaded before any layer appears' appearing in both the description and the fontName schema.

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 mutation with no output schema, the description covers the required path, states what is returned, and warns about the practical failure mode. What's missing is guidance on the optional typography and layout parameters, which leaves richer styling calls partly unspecified.

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?

Schema description coverage is only 39% across 18 parameters. The description maps the eight required inputs well (connection, parent, name, text, font, size, x/y), but the ten optional styling params (letterSpacing, paragraphSpacing, textAutoResize, textAlignHorizontal, width/height, opacity, lineHeight) get no mention anywhere the agent will read, so the description does not compensate for the coverage gap.

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 and resource ('Create one text layer') and adds two distinguishing qualifiers: an exact local font and atomic font loading before any layer appears. It separates itself from the siblings implicitly (creation vs. 'edit'), though it never names figma_local_fonts_edit or figma_local_fonts_search directly.

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 spells out the input contract ('Supply the intended file connection, parent on the current page, name, text, font, size, and position') and gives a concrete retry rule: on timeout, inspect the parent before retrying to avoid duplicates. It stops short of explicitly saying when to use this versus figma_local_fonts_edit, which is only implied by 'for subsequent edits'.

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