Find your error
Match what you see to the section that fixes it.Network proxy and connection errors
If you see errors likefetch failed, ECONNRESET, or Connection was reset, your network likely requires outbound traffic to go through a proxy server. This is common on corporate networks, university campuses, and other managed environments.
Add the --proxy flag
Ask your IT department for your proxy URL, then add --proxy to your MCP server configuration:
MCP client configuration
FIGMA_PROXY environment variable instead.
Standard proxy environment variables
The server also automatically respects the standardHTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables. If your system already has these set and your MCP client propagates them to child processes, proxy support should work without any additional configuration.
Bypassing a misbehaving proxy
If you have a proxy set in your environment (from a VPN client, old dev tooling, or inherited shell config) that is rejecting requests toapi.figma.com specifically, you have two options:
- Add
api.figma.comto theNO_PROXYenvironment variable:NO_PROXY=api.figma.com. This is the standard convention and also respected by curl, git, npm, and most other tools. - Pass
--proxy=noneto the server (in place of the--proxy=...line in the config above). This ignoresHTTP_PROXY/HTTPS_PROXYentirely and connects directly. Useful when modifying environment variables is awkward — e.g. the proxy is set at the system level or inherited from a parent process.
Cannot find module
If you encounter an error likeCannot find module 'xxxxx', it means that something went wrong with installation of the MCP server.
To fix this, close your client and try running the following command:
403 Forbidden when accessing Figma files
A 403 from the Figma API can have several distinct causes, and each has a different fix. Figma names the cause in the"err" field of the response body. The server includes that body verbatim in its error message (as Response body: ...), so find the err string in the error your MCP client surfaced and match it to a section below.
Example response body
"Invalid scope(s): ..."
Your Personal Access Token was created without the scopes this MCP needs to read file content. Figma tokens are scoped, and tokens generated through the current UI do not always include the scopes we require by default.
Fix: Generate a new PAT at Figma Settings → Security → Personal access tokens (navigation instructions) with at least these scopes selected, then update your MCP configuration:
file_content:readfile_dev_resources:read
"Invalid token"
Figma did not recognize the token being sent. Common causes:
- The token was revoked or deleted from your Figma settings
- The token was mistyped, truncated, or picked up stray whitespace when copied into your MCP config
- The value being sent isn’t actually a Figma token (e.g. a placeholder was left in place)
"Token expired"
OAuth access tokens have a limited lifetime. Once expired, every request returns 403 until you obtain a new one.
Fix: Refresh your OAuth access token through your OAuth flow. If OAuth isn’t essential for your setup, switching to a Personal Access Token avoids the refresh step — a PAT lasts until the expiration you chose when creating it.
"File not exportable"
The file’s share settings disallow copying, sharing, and exporting. The Figma API honors these settings.
Fix: If you own the file, open it in Figma, click Share, and allow viewers to copy, share, and export. If you don’t own it, ask the owner to update the setting or duplicate the file into your own workspace.

Other causes
If the error body doesn’t match one of the above:- File access — The file must be owned by the account associated with your token, or explicitly shared with that account. For team/org files, the token’s account must belong to the right team.
- HTTP proxy or firewall — A proxy or intermediary can return its own 403 before the request reaches Figma. If the response body doesn’t look like Figma’s usual JSON (e.g. HTML, a third-party vendor name, “Access denied” text), an intermediary is likely the cause. See the network proxy section for how to bypass a misbehaving proxy.
429 Too Many Requests
If you encounter a429: Too Many Requests error, it means you have exceeded the Figma API rate limits. There is no rate limiting built into Framelink MCP for Figma itself; these limits come directly from Figma.
The server’s error message passes along what Figma reports: how many seconds to wait before retrying, whether your seat type (Viewer or Collaborator) has a lower limit, whether the plan is Starter or Student, and an upgrade link when Figma provides one.
There are a few common causes and solutions for this issue.
Upgrade to a Paid Plan
Your rate limits depend on your Figma plan:- Free Plan: Limited to approximately 6 requests per month.
- Any Paid Plan (including Dev Seats): Starts at 10 requests per minute for the endpoints used by Framelink.
Check File Ownership
Rate limits are determined by the file owner’s plan in addition to your account’s plan.- If you are accessing a file in a Starter plan team/project, you will be subject to Starter limits (very low).
- Solution: Duplicate the file into your own paid workspace/team. Your paid plan limits will then apply to the copy.
Wait for API Limits to Update
If you recently upgraded to a paid plan, there might be a delay before the API limits are updated. Some users report this can take some time to propagate.Claude Desktop: wrong Node version
If you use a version manager like NVM to manage your Node.js version, you may run into an issue where Claude Desktop ends up using the wrong version of Node.js. To fix this, you can create a special version ofnpx for Claude Desktop to use that uses the right version of Node.js.
/usr/local/bin/npx-for-claude
chmod +x /usr/local/bin/npx-for-claude to make it executable. Update your configuration in Claude Desktop to use this new npx command instead of the default one.
Claude Desktop configuration