furniture-cad-mcp
# furniture-cad-mcp
Open-source MCP-сервер для параметрического моделирования мебели: **FastMCP → FreeCAD → Blender**.
Разработка ведётся в Codex. Ранняя alpha 0.1: один тип изделия — открытый корпусный шкаф.
Цель — получать модель с заданными физическими размерами и правдоподобным материалом,
а не только красивую картинку. Точность CAD и визуальное качество проверяются отдельно.
Результаты пока не являются рабочей документацией для производства.
## Что реализовано
- Семь MCP-инструментов, локальный транспорт stdio.
- Размеры в мм, валидация диапазонов, равномерные полки, накладная задняя стенка.
- Неизменяемые версии проекта, аналитические габариты, проверки пересечений и BOM.
- Worker FreeCAD: отдельные параметрические `Part::Box`, FCStd, STEP, сетка и измерения.
- Worker Blender: сетка из CAD, перевод мм → м, Principled BSDF, PNG и редактируемый blend.
- Три процедурных приближения материалов: дуб, белый меламин, чёрный металл.
- Тесты домена, MCP и опциональные тесты настоящих движков; GitHub Actions.
**Ограничения:** нет дверей, крепежа, отверстий, пазов, кромления, раскроя, чертежей и расчёта нагрузок.
Обновление параметров пересоздаёт FCStd, а не меняет существующий документ.
Процедурный дуб — начальное приближение, реализм пользователем не подтверждён.
Не оцениваем неизвестные размеры по фотографии как точные.
## Быстрый старт (Python 3.10+)
```sh
uv sync --extra dev --frozen
uv run pytest
uv run furniture-cad-mcp
```
Последняя команда запускает stdio-сервер: он ожидает сообщения MCP-клиента.
FreeCAD и Blender не нужны для создания спецификаций и BOM; нужны для экспорта и рендера.
Полная настройка: [docs/SETUP.md](docs/SETUP.md).
Пример конфигурации клиента, поддерживающего `mcpServers` (заменить абсолютные пути):
```json
{
"mcpServers": {
"furniture-cad": {
"command": "/ABS/PATH/furniture-cad-mcp/.venv/bin/furniture-cad-mcp",
"env": {
"FURNITURE_ARTIFACT_ROOT": "/ABS/PATH/furniture-artifacts",
"FURNITURE_FREECAD_PYTHON": "/ABS/PATH/python-with-freecad",
"FURNITURE_BLENDER": "/ABS/PATH/blender"
}
}
}
}
```
Для Codex: открыть папку репозитория как проект, прочитать `AGENTS.md`, подключить
исполняемый файл `.venv/bin/furniture-cad-mcp` как локальный stdio MCP-сервер
через настройки клиента. Эта публикация сама не меняет настройки Codex.
## Пример запроса
> Создай открытый шкаф 800 × 1800 × 400 мм, панели 18 мм, задняя стенка 6 мм,
> три полки, материал oak. Покажи спецификацию и проверь размеры. Затем экспортируй
> CAD и сделай превью из полученного cad_job_id.
Вызов `create_cabinet` принимает `{"spec": {"width_mm": 800, "height_mm": 1800,
"depth_mm": 400, "panel_mm": 18, "back_mm": 6, "shelves": 3, "material": "oak"}}`.
Ожидается 8 деталей, габариты `[800, 400, 1800]` в порядке X,Y,Z, без объёмных
пересечений. Сохрани `design_id`; `export_cad` возвращает `job_id` для `render_preview`.
## Документация
- [PRD](docs/PRD.md) — аудитория, сценарии, критерии приёмки.
- [Архитектура](docs/ARCHITECTURE.md) — единицы, границы процессов и данные.
- [MVP и план](docs/MVP.md) — реализованное и оставшиеся этапы.
- [Инструменты MCP](docs/TOOLS.md) — контракты и ошибки.
- [Проверки](docs/VALIDATION.md) — подтверждённые результаты и пробелы.
- [Участие](CONTRIBUTING.md), [безопасность](SECURITY.md).
## Основа и лицензия
[PrefectHQ/FastMCP](https://github.com/PrefectHQ/fastmcp) используется как зависимость,
не как скопированный исходный код; [документация инструментов](https://gofastmcp.com/servers/tools).
Геометрия — [FreeCAD](https://github.com/FreeCAD/FreeCAD), визуализация —
[Blender Python API](https://docs.blender.org/api/current/).
Наш код: MIT. FreeCAD, Blender и FastMCP сохраняют собственные лицензии.
Внешние текстуры и чужие модели в репозиторий не включены.
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes: configuration read, cabinet creation/update, design inspection, material listing, CAD export, and preview rendering. The only mild overlap is between create_cabinet and update_cabinet, since both produce cabinet revisions/design IDs, though the descriptions make the distinction reasonably clear.
The set uses consistent snake_case naming throughout. Most names follow a verb_noun pattern (create_cabinet, update_cabinet, inspect_design, list_materials, export_cad, render_preview), with backend_status as a minor noun-only deviation.
Seven tools is well-scoped for a furniture CAD MCP server. Each tool covers a meaningful stage of the workflow: status/config, creation, revision, inspection, materials, CAD export, and rendering.
The surface covers the core CAD lifecycle: create/update a cabinet, inspect dimensions and BOM, list materials, export CAD, and render previews. Minor gaps exist around listing or deleting existing designs, but the main workflows are available.