Figma MCP Server
Permite que asistentes de IA interactúen con Figma a través de WebSocket para leer datos y analizar diseños.
Documentación
Figma MCP Server (Python)
Servidor de Figma Model Context Protocol (MCP), implementado en Python usando FastMCP. Este servidor permite a los asistentes de IA interactuar con Figma a través de una conexión WebSocket para leer datos y analizar diseños.
🎯 Características
- 📖 Lectura de datos: Obtención de información sobre documentos, nodos, componentes y estilos
- 🔍 Búsqueda y análisis: Escaneo de nodos por tipos, búsqueda de contenido de texto
- 📤 Exportación: Exportación de nodos como imágenes en varios formatos
- 📋 Anotaciones: Visualización de anotaciones en documentos
- 🧩 Componentes: Trabajo con componentes y sus instancias
- 🔗 Prototipado: Obtención de información sobre reacciones y conexiones
🚫 Limitaciones
Por seguridad, este servidor NO admite:
- Creación de nuevos elementos
- Modificación de estilos, colores o texto (herramientas
set_*) - Operaciones de modificación de nodos (mover, cambiar tamaño, eliminar, clonar)
📋 Herramientas disponibles (15 unidades)
🔗 Conexión
join_channel- Unirse a un canal para comunicarse con Figma
📖 Obtención de información
get_document_info- Obtener información sobre el documento actual de Figmaget_selection- Obtener información sobre la selección actualread_my_design- Obtener información detallada sobre la selección, incluyendo todos los detalles de los nodosget_node_info- Obtener información sobre un nodo específico por IDget_nodes_info- Obtener información sobre varios nodosget_node_children- Obtener los IDs de todos los nodos hijos con anidamiento recursivo completoget_styles- Obtener todos los estilos del documentoget_local_components- Obtener todos los componentes locales
🧩 Componentes
get_instance_overrides- Obtener las anulaciones de la instancia del componente
🔍 Búsqueda y escaneo
scan_text_nodes- Escanear nodos de texto dentro de un nodo dadoscan_nodes_by_types- Escanear nodos de tipos específicos (TEXT, RECTANGLE, FRAME)
📤 Exportación
export_node_as_image- Exportar un nodo como imagen (PNG, JPG, SVG, PDF)
📋 Anotaciones
get_annotations- Obtener anotaciones para un nodo o todo el documento
🔗 Prototipado
get_reactions- Obtener reacciones (conexiones interactivas) para nodos
🏗️ Arquitectura
AI Client (Cursor) ←→ MCP Server ←→ WebSocket Server ←→ Figma Plugin
- MCP Server - Proporciona herramientas para IA
- WebSocket Server - Coordina conexiones y canales
- Figma Plugin - Ejecuta comandos en Figma
🚀 Inicio rápido
1. Instalación de dependencias
cd python-version
python -m venv venv
source venv/bin/activate # Linux/Mac
# или venv\Scripts\activate # Windows
pip install -r requirements.txt
2. Inicio del servidor WebSocket
python websocket_proxy.py --port 3055 --debug
3. Ejecución en Figma
- Abra Figma Desktop
- Vaya a Plugins → Development → Import plugin from manifest...
- Seleccione
src/cursor_mcp_plugin/manifest.json - Ejecute el plugin "Cursor MCP Plugin"
- Conéctese al servidor en el puerto 3055
- Recuerde el ID del canal (por ejemplo:
abc123xyz)
4. Configuración de MCP en Cursor
Agregue la siguiente configuración en los ajustes de MCP de Cursor (.cursor/mcp.json):
{
"mcpServers": {
"figma-mcp": {
"command": "python",
"args": ["-m", "src.figma_mcp.server", "--server", "localhost:3055"],
"cwd": "/path/to/your/figma_mcp"
}
}
}
Método alternativo (con entorno virtual):
{
"mcpServers": {
"figma-mcp": {
"command": "/path/to/your/figma_mcp/venv/bin/python",
"args": ["/path/to/your/figma_mcp/src/figma_mcp/server.py", "--server", "localhost:3055"]
}
}
}
Nota: Reemplace
/path/to/your/figma_mcpcon la ruta real al proyecto.
5. Inicio del servidor MCP
python -m src.figma_mcp.server --server localhost:3055
6. Conexión al canal
Use la herramienta join_channel con el ID del canal obtenido:
{
"tool": "join_channel",
"arguments": {
"channel": "abc123xyz"
}
}
🛠️ Ejemplos de uso
Obtención de información sobre el documento
{
"tool": "get_document_info",
"arguments": {}
}
Obtención de información sobre un nodo
{
"tool": "get_node_info",
"arguments": {
"node_id": "4472:98013"
}
}
Obtención de todos los nodos hijos
{
"tool": "get_node_children",
"arguments": {
"node_id": "4472:98012"
}
}
Búsqueda de nodos de texto
{
"tool": "scan_text_nodes",
"arguments": {
"node_id": "4472:98012",
"use_chunking": true,
"chunk_size": 50
}
}
Exportación como imagen
{
"tool": "export_node_as_image",
"arguments": {
"node_id": "4472:98013",
"format": "PNG",
"scale": 2.0
}
}
🔧 Configuración
WebSocket Server
- Puerto: 3055 (por defecto)
- Host: localhost
- Modo depuración:
--debug
MCP Server
- URL del servidor: localhost:3055 (por defecto)
- Protocolo: MCP 2024-11-05
- Transporte: stdio
Configuración de MCP en Cursor
Cree el archivo .cursor/mcp.json en la raíz de su proyecto o en su directorio personal:
{
"$schema": "https://schema.cursor.com/mcp.json",
"mcpServers": {
"figma-mcp": {
"command": "python",
"args": ["-m", "src.figma_mcp.server", "--server", "localhost:3055"],
"cwd": "/absolute/path/to/figma_mcp",
"env": {
"PYTHONPATH": "/absolute/path/to/figma_mcp"
}
}
}
}
Parámetros principales:
command: Comando para ejecutar Pythonargs: Argumentos para ejecutar el servidor MCPcwd: Directorio de trabajo (ruta absoluta al proyecto)env: Variables de entorno (opcional)
📁 Estructura del proyecto
python-version/
├── src/figma_mcp/
│ ├── __init__.py
│ ├── server.py # Главный MCP сервер
│ ├── websocket_client.py # WebSocket клиент
│ ├── types.py # Типы Pydantic
│ └── utils.py # Утилиты
├── tests/ # Тесты (41 тест)
├── websocket_proxy.py # WebSocket сервер
├── requirements.txt # Зависимости
└── README.md # Документация
🧪 Pruebas
Ejecución de todas las pruebas:
python -m pytest tests/ -v
Prueba de conexión:
python test_mcp.py
🔒 Seguridad
- Filtrado de datos confidenciales de las respuestas de Figma
- Validación de todos los parámetros con Pydantic
- Manejo de errores y tiempos de espera
- Registro en stderr para depuración
📦 Dependencias
- fastmcp: 2.4.0 - Marco de trabajo del servidor MCP
- websockets: 15.0.1 - Cliente/servidor WebSocket
- pydantic: 2.11.5 - Validación de datos
- pytest: 8.3.5 - Pruebas
🐛 Depuración
- Problemas de conexión: Verifique el estado del servidor WebSocket
- Tiempos de espera: Aumente el timeout en el cliente WebSocket
- Errores de canal: Asegúrese de usar el ID de canal correcto
- Registros: Consulte la salida en stderr para obtener información detallada
📝 Licencia
Licencia MIT
🤝 Contribuciones
- Haga un fork del repositorio
- Cree una rama para la función
- Agregue pruebas
- Envíe una solicitud de extracción (pull request)