iflow-mcp_kdoronin_figma_mcp 0.1.1
Figma Model Context Protocol (MCP) server using FastMCP framework
Requires Python: >=3.8

# Figma MCP Server (Python)

Figma Model Context Protocol (MCP) server, реализованный на Python с использованием FastMCP. Этот сервер позволяет AI ассистентам взаимодействовать с Figma через WebSocket соединение для чтения данных и анализа дизайнов.

## 🎯 Возможности

- **📖 Чтение данных**: Получение информации о документах, узлах, компонентах и стилях
- **🔍 Поиск и анализ**: Сканирование узлов по типам, поиск текстового контента
- **📤 Экспорт**: Экспорт узлов как изображений в различных форматах
- **📋 Аннотации**: Просмотр аннотаций в документах
- **🧩 Компоненты**: Работа с компонентами и их экземплярами
- **🔗 Прототипирование**: Получение информации о реакциях и связях

## 🚫 Ограничения

Для безопасности этот сервер НЕ поддерживает:
- Создание новых элементов
- Изменение стилей, цветов или текста (инструменты `set_*`)
- Операции изменения узлов (перемещение, изменение размера, удаление, клонирование)

## 📋 Доступные инструменты (15 шт.)

### 🔗 **Подключение**
- `join_channel` - Присоединиться к каналу для связи с Figma

### 📖 **Получение информации**
- `get_document_info` - Получить информацию о текущем документе Figma
- `get_selection` - Получить информацию о текущем выделении
- `read_my_design` - Получить детальную информацию о выделении включая все детали узлов
- `get_node_info` - Получить информацию о конкретном узле по ID
- `get_nodes_info` - Получить информацию о нескольких узлах
- `get_node_children` - Получить ID всех дочерних узлов с полной рекурсивной вложенностью
- `get_styles` - Получить все стили из документа
- `get_local_components` - Получить все локальные компоненты

### 🧩 **Компоненты**  
- `get_instance_overrides` - Получить переопределения экземпляра компонента

### 🔍 **Поиск и сканирование**
- `scan_text_nodes` - Сканировать текстовые узлы внутри заданного узла
- `scan_nodes_by_types` - Сканировать узлы определенных типов (TEXT, RECTANGLE, FRAME)

### 📤 **Экспорт**
- `export_node_as_image` - Экспортировать узел как изображение (PNG, JPG, SVG, PDF)

### 📋 **Аннотации**
- `get_annotations` - Получить аннотации для узла или всего документа

### 🔗 **Прототипирование**
- `get_reactions` - Получить реакции (интерактивные связи) для узлов

## 🏗️ Архитектура

```
AI Client (Cursor) ←→ MCP Server ←→ WebSocket Server ←→ Figma Plugin
```

1. **MCP Server** - Предоставляет инструменты для AI
2. **WebSocket Server** - Координирует соединения и каналы
3. **Figma Plugin** - Выполняет команды в Figma

## 🚀 Быстрый старт

### 1. Установка зависимостей

```bash
cd python-version
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или venv\Scripts\activate  # Windows
pip install -r requirements.txt
```

### 2. Запуск WebSocket сервера

```bash
python websocket_proxy.py --port 3055 --debug
```

### 3. Запуск в Figma

1. Откройте Figma Desktop
2. Перейдите в Plugins → Development → Import plugin from manifest...
3. Выберите `src/cursor_mcp_plugin/manifest.json`
4. Запустите плагин "Cursor MCP Plugin"
5. Подключитесь к серверу на порту 3055
6. Запомните Channel ID (например: `abc123xyz`)

### 4. Настройка MCP в Cursor

Добавьте следующую конфигурацию в настройки MCP Cursor (`.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "figma-mcp": {
      "command": "python",
      "args": ["-m", "src.figma_mcp.server", "--server", "localhost:3055"],
      "cwd": "/path/to/your/figma_mcp"
    }
  }
}
```

**Альтернативный способ (с виртуальным окружением):**
```json
{
  "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"]
    }
  }
}
```

> **Примечание**: Замените `/path/to/your/figma_mcp` на реальный путь к проекту.

### 5. Запуск MCP сервера

```bash
python -m src.figma_mcp.server --server localhost:3055
```

### 6. Подключение к каналу

Используйте инструмент `join_channel` с полученным Channel ID:

```json
{
  "tool": "join_channel",
  "arguments": {
    "channel": "abc123xyz"
  }
}
```

## 🛠️ Примеры использования

### Получение информации о документе
```json
{
  "tool": "get_document_info",
  "arguments": {}
}
```

### Получение информации о узле
```json
{
  "tool": "get_node_info", 
  "arguments": {
    "node_id": "4472:98013"
  }
}
```

### Получение всех дочерних узлов
```json
{
  "tool": "get_node_children",
  "arguments": {
    "node_id": "4472:98012"
  }
}
```

### Поиск текстовых узлов
```json
{
  "tool": "scan_text_nodes",
  "arguments": {
    "node_id": "4472:98012",
    "use_chunking": true,
    "chunk_size": 50
  }
}
```

### Экспорт как изображение
```json
{
  "tool": "export_node_as_image",
  "arguments": {
    "node_id": "4472:98013",
    "format": "PNG",
    "scale": 2.0
  }
}
```

## 🔧 Конфигурация

### WebSocket Server
- **Порт**: 3055 (по умолчанию)
- **Host**: localhost
- **Debug режим**: `--debug`

### MCP Server  
- **Server URL**: localhost:3055 (по умолчанию)
- **Протокол**: MCP 2024-11-05
- **Transport**: stdio

### Cursor MCP Settings

Создайте файл `.cursor/mcp.json` в корне вашего проекта или в домашней директории:

```json
{
  "$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"
      }
    }
  }
}
```

**Основные параметры:**
- `command`: Команда для запуска Python
- `args`: Аргументы для запуска MCP сервера
- `cwd`: Рабочая директория (абсолютный путь к проекту)
- `env`: Переменные окружения (опционально)

## 📁 Структура проекта

```
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             # Документация
```

## 🧪 Тестирование

Запуск всех тестов:
```bash
python -m pytest tests/ -v
```

Тестирование подключения:
```bash
python test_mcp.py
```

## 🔒 Безопасность

- Фильтрация конфиденциальных данных из ответов Figma
- Валидация всех параметров с Pydantic
- Обработка ошибок и таймаутов
- Логирование в stderr для отладки

## 📦 Зависимости

- **fastmcp**: 2.4.0 - MCP сервер фреймворк
- **websockets**: 15.0.1 - WebSocket клиент/сервер
- **pydantic**: 2.11.5 - Валидация данных
- **pytest**: 8.3.5 - Тестирование

## 🐛 Отладка

1. **Проблемы с подключением**: Проверьте статус WebSocket сервера
2. **Таймауты**: Увеличьте timeout в WebSocket клиенте
3. **Ошибки каналов**: Убедитесь, что используете правильный Channel ID
4. **Логи**: Смотрите вывод в stderr для детальной информации

## 📝 Лицензия

MIT License

## 🤝 Вклад

1. Форкните репозиторий
2. Создайте ветку для функции
3. Добавьте тесты
4. Отправьте pull request