I found a reproducible issue when using Figma MCP with design system components, and I’d like to understand whether this is a known limitation or something that could be improved.
Observed behavior:
1. I can successfully find the component using search_design_system()
2. I can successfully import it using importComponentSetByKeyAsync()
3. I can successfully call createInstance()
4. But figma.currentPage.appendChild(instance) fails
Typical error:
- unloaded font "xxx Regular"
- unloaded font "xxx Bold"
So in practice:
- the component definition is accessible
- the instance can be created
- but the instance cannot actually be placed on the canvas because font validation fails at appendChild()
This creates a confusing “half-working” state where the component appears usable until the final append step.
Important details:
- The target component comes from a design system library
- The required fonts exist in the local Figma / organization environment
- But in the MCP runtime, loadFontAsync({ family: "xxx", style: "Regular" }) fails
- appendChild(instance) then fails because those fonts are unavailable in the MCP execution environment
- If I replace the text fonts inside the instance with fonts that are available in MCP, the instance can be appended successfully
- That suggests the issue is not search/import/createInstance itself, but font availability in the MCP runtime
Questions:
1. Does Figma MCP support organization shared fonts?
2. Is the MCP font environment intentionally different from the local Figma desktop environment?
3. If yes, can this be documented more explicitly?
4. Could font dependency issues be surfaced earlier, before appendChild()?
5. Could MCP provide a better fallback/degradation path, for example:
- preflight font dependency checks
- explicit reporting of unavailable fonts required by a component
- an option to import structure even when fonts are missing
- a way to specify fallback font behavior during import
Why this feels worth improving:
- From a user perspective, search/import/createInstance all succeed, so the component appears usable
- Failure only happens at appendChild(), which makes the issue harder to diagnose
- The error says fonts are unloaded, but does not clearly explain that this is an MCP runtime limitation rather than a library access issue, permission issue, or script issue
If this is a known limitation, clearer documentation would help a lot.
If it’s not, improving the preflight checks and error messaging would make the MCP workflow much more predictable.
