Skip to main content
Glama
SomnathRoyTR

tr-figma-mcpserver

by SomnathRoyTR

tr-figma-mcpserver

Hosted MCP (Model Context Protocol) server for downloading Figma images using access tokens.

Quick Start

1. Install the Package

npm install -g @somnathroy/tr-figma-mcpserver

Or use with npx (no installation):

npx @somnathroy/tr-figma-mcpserver

2. Get Your Figma Access Token

  1. Go to Figma Settings

  2. Scroll to "Personal access tokens"

  3. Click "Create new token"

  4. Give it a name (e.g., "MCP Server")

  5. Copy the token (format: figd_...)

3. Configure Your MCP Client

Create .mcp.json in your project root or add to your MCP client config:

Using installed package:

{
  "mcpServers": {
    "tr-figma-mcpserver": {
      "command": "tr-figma-mcpserver",
      "env": {
        "MCP_STDIO": "true",
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Using npx (no installation):

{
  "mcpServers": {
    "tr-figma-mcpserver": {
      "command": "npx",
      "args": ["-y", "@somnathroy/tr-figma-mcpserver"],
      "env": {
        "MCP_STDIO": "true",
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Configuration Locations:

  • VS Code / Cursor: .mcp.json in project root or .vscode/mcp.json

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

4. Verify Setup

Check that the MCP server appears in your MCP client:

  • In VS Code: Check the MCP panel/output

  • In Cursor: Settings → MCP Servers

  • In Claude Desktop: Check logs

5. Use the Tool

Once configured and loaded, use the download_figma_images tool:

Basic usage:

{
  "figmaUrl": "https://www.figma.com/design/WJNNpEsralNcSMptsFbFH9/LT-Matters-page?node-id=29302-167474"
}

With options:

{
  "figmaUrl": "https://www.figma.com/design/WJNNpEsralNcSMptsFbFH9/LT-Matters-page?node-id=29302-167474",
  "format": "png",
  "scale": 2
}

That's it! No need to pass the token in every request since it's configured in your MCP client settings.


Related MCP server: OpenFigma MCP

Features

  • ✅ Download images from Figma files using access tokens

  • ✅ Supports both /file/ and /design/ URL formats

  • ✅ Automatic node-id parameter conversion (hyphen to colon format)

  • ✅ Multiple export formats: PNG, JPG, SVG, PDF

  • ✅ Configurable scale factor for raster images (0.01 to 4)

  • ✅ Base64-encoded responses for easy integration

  • ✅ Hosted on Azure Web App - no installation required

  • ✅ Configure token once, use everywhere

Supported URL Formats

The server supports both Figma URL formats:

  1. File URLs: https://www.figma.com/file/{fileId}/{fileName}

  2. Design URLs: https://www.figma.com/design/{fileId}/{fileName}?node-id=123-456

Node ID Conversion

The server automatically converts node IDs from URL format to API format:

  • URL format: node-id=29302-167474 (hyphen separator)

  • API format: 29302:167474 (colon separator)

Example:

  • Input: https://www.figma.com/design/WJNNpEsralNcSMptsFbFH9/LT-Matters-page?node-id=29302-167474

  • Parsed: File ID WJNNpEsralNcSMptsFbFH9, Node ID 29302:167474


API Reference

Tool: download_figma_images

Downloads images from Figma designs and returns them as Base64-encoded resources.

Parameters

Parameter

Type

Required

Default

Description

figmaAccessToken

string

No*

-

Figma personal access token (*required if not set in environment)

figmaUrl

string

Yes

-

Figma file URL (supports /file/ and /design/ paths)

nodeIds

string[]

No

From URL

Specific node IDs to export (uses node-id from URL if not provided)

format

enum

No

'png'

Export format: png, jpg, svg, pdf

scale

number

No

1

Scale factor for raster images (0.01 to 4)

Response

{
  "content": [
    {
      "type": "text",
      "text": "Downloaded 1 image from Figma file: LT Matters page"
    },
    {
      "type": "resource",
      "resource": {
        "uri": "data:image/png;base64,iVBORw0KGgo...",
        "mimeType": "image/png",
        "text": "Node 29302:167474 (245.67 KB)"
      }
    }
  ]
}

Error Handling

The server returns helpful error messages for common issues:

Error

Description

Solution

401 Unauthorized

Invalid or expired Figma access token

Get a new token from https://www.figma.com/settings

403 Forbidden

No access to the Figma file

Check file permissions or use a different token

404 Not Found

File or node doesn't exist

Verify the Figma URL is correct

429 Rate Limited

Too many requests to Figma API

Wait a moment and try again

Invalid URL

URL doesn't match expected format

Use format: figma.com/design/{fileId}/...

No token

Neither parameter nor env var provided

Set FIGMA_ACCESS_TOKEN or provide in request


Health Check

Verify the service is running:

curl https://tr-figma-mcpserver-gsakbybcgegzdkc4.centralus-01.azurewebsites.net/health

Expected response:

{
  "status": "healthy",
  "service": "tr-figma-mcpserver",
  "version": "1.0.0",
  "timestamp": "2026-04-01T12:00:00.000Z"
}

Security

Token Handling

  • Server does NOT store tokens: Tokens are passed per-request or via environment variables

  • No logging: Tokens are never logged or persisted

  • User responsibility: Users secure their own Figma tokens

  • HTTPS required: All communication encrypted in transit (Azure provides SSL/TLS)

Best Practices

  1. ✅ Never commit tokens to git repositories

  2. ✅ Store tokens in environment variables or secure configuration

  3. ✅ Rotate tokens regularly

  4. ✅ Use separate tokens for different services

  5. ✅ Revoke tokens immediately if compromised

  6. ✅ Only share tokens with trusted MCP clients


Troubleshooting

"No token provided"

Problem: Neither figmaAccessToken parameter nor FIGMA_ACCESS_TOKEN environment variable is set.

Solution:

  • Add token to your MCP client config's env section, OR

  • Provide figmaAccessToken in each request

"Unauthorized: Invalid or expired token"

Problem: Your Figma token is incorrect or has expired.

Solution:

"Invalid Figma URL format"

Problem: URL doesn't match expected Figma format.

Solution:

  • Ensure URL starts with https://www.figma.com/

  • URL must contain /file/ or /design/ path

  • Example: https://www.figma.com/design/{fileId}/{name}?node-id=123-456

"No node IDs specified"

Problem: Neither nodeIds parameter nor node-id in URL provided.

Solution:

  • Add nodeIds parameter: ["123:456", "789:012"], OR

  • Include node-id in URL: ?node-id=123-456

"Failed to download image"

Problem: Network issue or Figma API error.

Solution:

  • Check your internet connection

  • Verify the node exists in the Figma file

  • Try a smaller scale factor for large images

  • Wait a moment if rate limited


Development & Local Setup

Want to run the server locally or contribute to development?

Prerequisites

  • Node.js 22+ installed

  • npm or yarn package manager

  • Git

Local Installation

  1. Clone the repository:

git clone https://github.com/your-org/tr-figma-mcpserver.git
cd tr-figma-mcpserver
  1. Install dependencies:

npm install
  1. Build TypeScript:

npm run build
  1. Run locally:

npm run dev

Local MCP Configuration

To use your local instance instead of the hosted one:

{
  "mcpServers": {
    "tr-figma-mcpserver": {
      "command": "node",
      "args": ["C:/path/to/tr-figma-mcpserver/dist/index.js"],
      "env": {
        "MCP_STDIO": "true",
        "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE"
      }
    }
  }
}

Testing Locally

Test the health endpoint:

curl http://localhost:3000/health

Expected response:

{
  "status": "healthy",
  "service": "tr-figma-mcpserver",
  "version": "1.0.0",
  "timestamp": "..."
}

Project Structure

tr-figma-mcpserver/
├── src/
│   ├── index.ts              # Express server + SSE/stdio transports
│   ├── server.ts             # MCP server factory
│   ├── tools/
│   │   └── download-image.ts # Tool implementation
│   ├── services/
│   │   ├── figma-api.ts      # Figma API client
│   │   └── image-processor.ts# Image download & encoding
│   └── types/
│       └── figma.ts          # TypeScript type definitions
├── dist/                     # Compiled JavaScript (generated)
├── package.json              # Dependencies and scripts
├── tsconfig.json             # TypeScript configuration
└── README.md                 # This file

Deployment

The server is deployed to Azure Web App with automatic GitHub Actions CI/CD.

Deployment URL

Live: https://tr-figma-mcpserver-gsakbybcgegzdkc4.centralus-01.azurewebsites.net

Endpoints

  • Health Check: /health

  • MCP SSE: /mcp

  • Info: /

GitHub Actions

Every push to main or master branch triggers automatic deployment:

  1. Install dependencies

  2. Build TypeScript

  3. Run type checking

  4. Deploy to Azure Web App

  5. Verify deployment with health check

Monitor deployments at: GitHub Actions


Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request


License

MIT License - see LICENSE file for details


Support


Acknowledgments


Made with ❤️ by Thomson Reuters

Live Service: https://tr-figma-mcpserver-gsakbybcgegzdkc4.centralus-01.azurewebsites.net

Available Tools

1 tool
download_figma_imagesA

Download images from Figma designs using access token and file URL. Supports both /file/ and /design/ URL formats with node-id parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoScale factor for raster images (0.01 to 4)
formatNoImage export formatpng
nodeIdsNoSpecific node IDs to export. If omitted and URL has node-id, uses that node
figmaUrlYesFigma file URL (supports /file/ and /design/ paths)
figmaAccessTokenYesFigma personal access token (optional if FIGMA_ACCESS_TOKEN env var is set). Get from https://www.figma.com/settings

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only mentions URL-format support and node-id parameters, without explaining whether images are returned as binary data, saved to disk, how multiple nodes are handled, or what happens on auth errors. This is minimal transparency for an external API side-effecting operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that leads with the action and resource, then adds only the necessary URL-format detail. There is no redundant filler or restatement of schema properties.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All parameters are documented and the tool is fairly simple, but with no annotations and no output schema, the description should clarify what 'download' returns and how node selection resolves. The schema covers the node-id fallback, so the remaining gap is mainly delivery and error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage of all five parameters, so the baseline is 3 even with no additional parameter details in the description. The description's URL-format and node-id notes add no meaning beyond what the schema already states for figmaUrl and nodeIds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Download images from Figma designs'), identifies the required credentials (access token) and target (file URL), and clarifies supported URL forms. Even without sibling tools to distinguish, the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for exporting images from Figma but provides no explicit when-to-use guidance, prerequisites, or exclusions. Since there are no sibling tools, the lack of alternatives is less damaging, but an agent is not told when choosing this tool is preferable to manual export or another download approach.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observeddownload_figma_images

TDQS

A3.6/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no ambiguity or overlap with other tools. The tool's purpose is clearly defined in its description.

Naming Consistency5/5

The single tool name follows a consistent verb_noun pattern (download_figma_images). With only one tool, the naming convention is trivially uniform.

Tool Count3/5

One tool feels thin for a server named 'tr-figma-mcpserver', which implies a broader Figma integration. The count is borderline because the tool may be intentionally scoped to image downloads, but the server name suggests more capability is expected.

Completeness2/5

The tool only covers downloading images from Figma designs. Missing operations such as fetching file metadata, listing nodes, or exporting assets create significant gaps that would cause agent failures for any non-trivial Figma workflow.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that simplifies Figma design data, generates code in multiple frameworks, and provides accessibility audits and drift detection, all using a free Figma Personal Access Token without a paid Dev Mode seat.
    101 npm
    3
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A self-hosted MCP server that enables AI agents to retrieve Figma design data for generating code, templates, or custom prompts.
    1,330 npm
    -
  • F
    license
    B
    quality
    C
    maintenance
    MCP server that fetches Figma data (file trees, nodes, images, components, styles, variables) and serves as a foundation for Flutter code generation.
    13
    -