Skip to main content
Use your AI agent to link your Figma file to your Ditto project in minutes. Instead of connecting every text layer by hand, your agent matches, links, and organizes your product copy for you. You can also link layers one at a time in the Ditto plugin or the web app (Linking in the help center). From your editor, an agent links a whole file in one pass, in the tools developers already use.
If you ran a scan, your product strings are already in your Ditto component library. The agent matches Figma text layers against them and links the matches, so the layer, the component, and the key in your string files share one developer ID.

Step 1: Connect the Ditto MCP and the Figma MCP

Your agent talks to both Ditto and Figma to accomplish tasks. Ditto is used to search, create, and link text, and Figma is used to read the text layers in your file.

Step 2: Create the Ditto project from your Figma file

A Ditto project is where your team works on the copy for a feature, product area, or Figma file. Creating it from the file connects the two. This step happens in Figma, once, in the Ditto plugin:
  1. In Figma, open the Ditto plugin (Actions › Plugins & widgets › Ditto) and log in.
  2. Paste your Figma file’s URL into the plugin.
  3. Select Start a new project, click Continue, and add the frames you want in Ditto.
For more detail on this step, see How to create a Ditto project from Figma in the help center. This step must be done via the Ditto Figma plugin as the API and MCP cannot connect a file.

Step 3: Instruct your agent

Paste this prompt into your agent with your Ditto project URL and your Figma file URL. The agent tells you what it is about to do at each step and waits for your confirmation before it changes anything.

Save the prompt as a skill

Store the prompt as a skill so anyone on the team runs it by name instead of pasting it. Create a SKILL.md with this frontmatter and the prompt above as the body, at the path for your agent, and commit it. Leave the two placeholder lines in place; the agent fills them from the URLs you pass when you run it.
Path: .claude/skills/ditto-figma-link/SKILL.md. Run it with /ditto-figma-link, followed by the project URL and the file URL.

What the agent does

At each step of the prompt, and the tools it calls:
  1. Identify the project and file. list_projects resolves the project from its URL, and the Figma MCP returns the file’s text nodes. The agent works from each node’s rendered text, not its layer name.
  2. Link Figma text nodes to project text items. For each node, search_ditto_text with projectIds set to the project and matchType: "anyWord", then a strict trimmed, case-sensitive comparison of the candidates. A match is linked with link_figma_nodes_to_text_item, up to 50 node IDs per call (figma.branchId for a Figma branch). No match: create_text_items, then link. Identical text on several nodes links to one text item.
  3. Link project text items to library components. search_ditto_text with entityTypes: ["libraryComponent"], exact matches only. link_text_items_to_component attaches each match, and the text item takes on the component’s text, properties, variants, and developer ID. No new components, no fuzzy links.
  4. Report back. Counts of nodes linked to existing items, items created, and items attached to components, plus anything ambiguous (near-duplicate text, empty nodes) for you to decide.
link_figma_nodes_to_text_item returns one result per node:

Step 4: What you have now

  • Your Figma text layers are linked to text items. A text item holds the copy and its status, tags, notes, and comments. Linking does not change the Figma file; from now on, edits to the text item in Ditto and edits to the layer in Figma sync to each other, and frame previews in the web app refresh on sync.
  • Repeated copy points at one text item. A string that appears on several screens is one text item, so an edit to any instance applies to all of them.
  • Reused text is attached to your components. Each matched text item carries the component’s text, properties, variants, and developer ID, so the Figma layer, the component, and the key in your string files resolve to one ID. Edit the component and every instance updates.
For one layer, give the agent the layer’s link instead of the file’s. In Figma, select the text layer, choose Copy link, and tell the agent which string it should show:
The agent reads the node through the Figma MCP, finds the project connected to the file with list_projects, searches for “Create account” with search_ditto_text, and links the node with link_figma_nodes_to_text_item.

After linking

  • Namespaced developer IDs. Project-only text items keep auto-generated IDs such as welcome-to-dittopay-7. Ask the agent to rename them into a scheme (onboarding.welcome.title) with update_text_items and newDeveloperId. Leave component-linked items alone; that ID is the component’s, shared across every project that uses it.
  • Undo a wrong link. unlink_text_items_from_component detaches a text item (every instance carrying that developer ID, or only those in one projectId) and gives it a fresh developer ID.
  • Keep in sync. npx -y @dittowords/cli@latest pull brings design-side edits into code; re-running scan on the same repository lets Ditto match code-side changes against the earlier scan; the TextItem_Base_Text_Changed webhook fires when linked text changes. Filter pull by status or the integrated flag so in-progress design copy never reaches production (CLI configuration).