Part of the
igniteui-angular-figma-to-appskill.This file contains setup instructions for all four MCP servers required by this skill. Configure all four before running the Figma-to-app workflow.
| Server | Purpose | Verify with |
|---|---|---|
| Figma | Read artboard structure, screenshots, design tokens | figma_get_metadata (no nodeId) |
Ignite UI CLI (igniteui-cli) |
Component docs, API reference | list_components |
Ignite UI Theming (igniteui-theming) |
Palette + component-level theming code | theming_detect_platform |
| Playwright | Browser automation, screenshots, DOM measurement | playwright_browser_navigate to about:blank |
The Figma MCP server connects your AI tool to the Figma desktop app or a Figma file URL. It requires a Figma personal access token.
- Open Figma → click your avatar (top-right) → Settings
- Scroll to Personal access tokens → Generate new token
- Give it a name (e.g.
mcp-agent) → copy the token value
Create or edit .vscode/mcp.json:
{
"servers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}Create or edit .cursor/mcp.json:
{
"mcpServers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}claude mcp add figma -- npx -y @figma/mcp@latest --figma-access-token YOUR_TOKEN_HEREOr add the entry to the project's .mcp.json (created at the repo root):
{
"mcpServers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}- Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server
- Command:
npx, Arguments:-y @figma/mcp@latest - Environment:
FIGMA_ACCESS_TOKEN=YOUR_TOKEN_HERE
If you use the Figma desktop app, the preferred setup is through the Figma MCP plugin for your editor. Follow Figma's official installation guide: https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/
This approach connects to the currently open Figma file and the selected node without needing to pass node IDs manually.
Session-binding behaviour: The Figma MCP tools (
figma_get_screenshot,figma_get_design_context,figma_get_variable_defs) always operate on the currently selected node in the Figma desktop app. AnynodeIdparameter passed to these tools is silently ignored — the tool returns data for whatever is selected, not for the specified ID.Consequence: you cannot programmatically navigate between artboards by passing node IDs. To get screenshots or design context for a specific artboard you must ask the user to click that artboard frame in Figma before calling the tool.
The correct pattern in every Phase 1 step:
// 1. Ask the user "In Figma, please click the [Artboard Name] frame to select it, then confirm." // 2. Wait for confirmation // 3. Only then call the tool figma_get_screenshot({}) figma_get_design_context({ clientLanguages: "typescript", clientFrameworks: "angular", ... })
Call figma_get_metadata with no nodeId. It should return either:
- A list of top-level pages if something is selected in the Figma desktop app, or
- A prompt to open a Figma file
Rate limits: Starter plan: 6 calls/month · Organization: 200/day · Enterprise: 600/day. Use
figma_get_metadatafor structural discovery andfigma_get_design_contextonly for target artboards to conserve quota.
| Problem | Fix |
|---|---|
figma_get_metadata returns an error |
Token may be expired or invalid — regenerate it |
| Tools not available after config | Restart the editor/IDE |
File not found |
Verify the Figma file URL is correct and you have access |
| 6 calls/month exceeded | Upgrade to an Organization plan or use the Figma REST API with a personal access token for higher-volume development work |
Projects created with
npx igniteui-cli newalready have this configured.npx igniteui-cli newwrites the Ignite UI CLI MCP entry into.vscode/mcp.jsonautomatically during scaffolding. For existing projects that lack this config, run:npx -y igniteui-cli ai-configThis configures both the
igniteui-cliandigniteui-themingMCP servers and copies the Agent Skills in one step, preserving existing server entries. Only follow the manual steps below (and in section 3) whennpx igniteui-cli ai-configis not available or you need to configure an editor it does not cover.
Create or edit .vscode/mcp.json:
{
"servers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}Create or edit .cursor/mcp.json:
{
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}claude mcp add igniteui-cli -- npx -y igniteui-cli mcpOr add the entry to the project's .mcp.json (created at the repo root):
{
"mcpServers": {
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
}
}
}- Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server
- Command:
npx, Arguments:-y igniteui-cli mcp
Ask your AI assistant: "List all available Ignite UI Angular components."
The list_components tool should return a full component list for the Angular framework.
npx -y igniteui-cli ai-configconfigures this server too (see section 2). Use the manual steps below only whenai-configis unavailable or doesn't cover your editor.
Create or edit .vscode/mcp.json:
{
"servers": {
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
}
}
}Create or edit .cursor/mcp.json:
{
"mcpServers": {
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
}
}
}claude mcp add igniteui-theming -- npx -y igniteui-theming igniteui-theming-mcpOr add the entry to the project's .mcp.json (created at the repo root):
{
"mcpServers": {
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
}
}
}- Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server
- Command:
npx, Arguments:-y igniteui-theming igniteui-theming-mcp
Ask your AI assistant: "Detect which Ignite UI platform my project uses."
The theming_detect_platform tool should analyze your package.json and return the
detected platform (e.g., angular, angular-licensed).
Create or edit .vscode/mcp.json:
{
"servers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}Create or edit .cursor/mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}claude mcp add playwright -- npx -y @playwright/mcp@latestOr add the entry to the project's .mcp.json (created at the repo root):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}- Settings → Tools → AI Assistant → MCP Servers → + Add MCP Server
- Command:
npx, Arguments:-y @playwright/mcp@latest
Navigate to a URL: "Navigate the browser to https://example.com."
The playwright_browser_navigate tool should open the page without error.
| Problem | Fix |
|---|---|
| Screenshots are blank | Make sure the dev server is running (npm start) |
Page resets to about:blank after resize |
Always re-navigate after playwright_browser_resize |
Console shows ERR_CONNECTION_REFUSED |
The Angular dev server is not running |
browser_evaluate fails with __name is not defined |
Pass code using the function parameter (not script): playwright_browser_evaluate({ function: "() => { ... }" }) |
playwright_browser_take_screenshot returns empty |
Re-navigate to the target URL first |
If your project was created with
npx igniteui-cli new: the Ignite UI CLI entry is already in.vscode/mcp.json. Open that file and add only the three entries below (Figma, Ignite UI Theming, Playwright) to the existing"servers"block — do not duplicate theigniteui-clientry.Fresh setup (no existing
.vscode/mcp.json): use the complete blocks below. ReplaceYOUR_TOKEN_HEREwith your actual Figma personal access token.
{
"servers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
},
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}{
"mcpServers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
},
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}{
"mcpServers": {
"figma": {
"command": "npx",
"args": ["-y", "@figma/mcp@latest"],
"env": {
"FIGMA_ACCESS_TOKEN": "YOUR_TOKEN_HERE"
}
},
"igniteui-cli": {
"command": "npx",
"args": ["-y", "igniteui-cli", "mcp"]
},
"igniteui-theming": {
"command": "npx",
"args": ["-y", "igniteui-theming", "igniteui-theming-mcp"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}