All skills
figma avatar

/generate-project-plan

@76c729b official
by figmafigma/mcp-server-guide2k stars
194

Generate a FigJam project plan board from a PRD plus codebase context. Interactive flow: research → propose sections → per-section deep research → per-section content + block-shape proposal → create FigJam → skeleton → fill → diagrams → wrap. Each content block (section, nested section, intro callout, table, multi-column text, sticky column, diagram section, metadata strip) has its own subskill reference file. Use when the user asks for 'project plan in FigJam', 'interactive project plan', '/generate-project-plan', or provides a PRD and wants per-section confirmation on content + rendering.

Use this Skill: https://skilld.dev/gh/figma/mcp-server-guide/generate-project-plan

This session only. Nothing lands on disk.

referencesblocksmetadata-strip.md

≈906 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Block: Metadata strip

The H1 project title + 4 body texts (Owner / Status / Last updated / Source) at the top of the column wrapper. NOT a standalone section, NOT positioned at the page origin — they are the first children of the unlabeled white column wrapper SECTION.

Structure

Not a section — just five TEXT nodes positioned at the page top starting at (0, 0).

Element Font size Position (local to column wrapper)
Project title (H1) 40 Inter Medium (64, 64) — column wrapper padding
Owner 16 At (64, h1.y + h1.height + 16) — start of body row
Status 16 Right of Owner with 32px gap
Last updated 16 Right of Status with 32px gap
Source PRD link 16, underlined Right of Last updated with 32px gap

H1 is 40px (NOT 64). 64 doesn't fit inside the 800-wide column wrapper for typical project titles. 40 matches H2 size visually but the placement at the top of the wrapper makes it read as the title.

Total metadata-block height (top of wrapper to bottom of body row): 64 + 48 + 16 + 19 = 147 (with 64 padding above, then 64 padding below the body row → first section starts at y = 211).

Positioning logic (children of the column wrapper)

const font = { family: 'Inter', style: 'Medium' };
await figma.loadFontAsync(font);

const PAD = 64; // column wrapper padding

// H1 project title — first child of the column wrapper at (PAD, PAD)
const title = figma.createText();
title.fontName = font;
title.fontSize = 40;                                      // STRICT — 40, not 64
title.characters = projectTitle;
title.fills = [{ type: 'SOLID', color: CHARCOAL }];
title.textAutoResize = 'WIDTH_AND_HEIGHT';
columnWrapper.appendChild(title);
title.x = PAD;
title.y = PAD;

// Body row — Owner / Status / Last updated / PRD link, 32px gap
const rowY = title.y + title.height + 16;
const labels = [
  { text: "Owner: " + ownerName },
  { text: "Status: Draft" },
  { text: "Last updated: " + new Date().toISOString().slice(0, 10) },
  { text: "Source: " + prdPath, underline: true },
];

let rowX = 0;
const createdIds = { title: title.id };
const rowIds = {};
for (const [i, item] of labels.entries()) {
  const t = figma.createText();
  t.fontName = font;
  t.fontSize = 16;
  t.characters = item.text;
  t.fills = [{ type: 'SOLID', color: CHARCOAL }];
  if (item.underline) {
    t.setRangeTextDecoration(0, t.characters.length, 'UNDERLINE');
  }
  t.textAutoResize = 'WIDTH_AND_HEIGHT';
  columnWrapper.appendChild(t);
  t.x = rowX;
  t.y = rowY;
  rowX += t.width + 32;
  rowIds["row" + i] = t.id;
}

// First content section starts at: rowY + body.height + 64 (gutter)

return { createdNodeIds: { title: title.id, ...rowIds } };

Notes:

  • The nodes are children of the column wrapper SECTION, not the page.
  • They sit at the top of the wrapper (above the 6 content sections), with the same 64px padding as the rest of the wrapper.
  • No separate background fill — they inherit the wrapper's white fill.

Status values

  • "Draft" — initial
  • "In review"
  • "Approved"
  • "In progress"
  • "Shipped"

Always start with "Draft".

Missing fields

  • No owner → "Owner: TBD"
  • No PRD path → omit the PRD link entirely; shrink the row.
  • Last updated — always set at generation time.

Pre-flight checklist

  • Font loaded before any text creation.
  • All five (or four if PRD missing) text nodes created.
  • H1 at (0, 0); body row at y = title.height + 16.
  • PRD link has underline via setRangeTextDecoration.
  • Return all node IDs in createdNodeIds.

Source: SKILL.md on GitHub

1 warning15d3 checks · Risk SAFE
  • Gen Agent Trust Hub15d

    The skill generates FigJam project plan boards from user-provided PRDs and codebase files. It uses an interactive process where the user reviews and confirms the content at multiple stages. It follows strict visual guidelines and uses standard Figma MCP tools. Data access is bounded to a maximum of 20 files within the local repository. No malicious patterns detected.

  • Socket15d

    No alerts

  • Snyk15d

    Risk: MEDIUM · 1 issue

Signed by skilld at 76c729b. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 5 months ago
disable-model-invocation
false
  • figjam
  • project-planning
  • prd
  • figma
  • diagramming
  • content-generation
  • interactive-workflow

README badge

README badge for figma/mcp-server-guide/generate-project-plan

Converts a product requirements document into an interactive FigJam board with sections—research, section selection, content proposal per section, then automated board creation with skeleton and fill passes. Uses FigJam's section and sticky primitives, coordinates with separate block-shape subskills for tables, diagrams, multi-column layouts, and metadata strips.

Generated from the current SKILL.md.

Do I need to load other skills before using this one?
Yes. Load `figma-use` once per session, then reload `figma-use-figjam` before every `use_figma` call. Also load `figma-generate-diagram` before any `generate_diagram` call. All three are in the figma/mcp-server-guide collection.
Can I pick which sections appear on the board?
Yes. The skill proposes candidate sections from the PRD research, and you confirm which ones to include. The section set is not fixed.
Does this work with a PRD alone, or do I need codebase context?
The skill accepts a PRD plus optional codebase grounding. Codebase context is optional and expands the research step; the PRD alone is sufficient to generate a plan.
Can I customize colors and typography?
No. The skill enforces strict visual conventions — two-tone section palettes, fixed font sizes (40 for H2, 32 for nested headers, 24 for column titles), and a precise spacing grid (24px between blocks, 64px between sections, 32px inner padding). These are derived from a canonical reference board and must not be deviated from.
What content blocks are available?
Nine block types: section headers, nested sections, intro callouts, text primitives (paragraphs, lists), tables, multi-column text, sticky-note columns, diagram sections, and a metadata strip. Each has its own subskill reference file.

Generated from the current SKILL.md. These answers refresh after source changes.