clo3d-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@clo3d-mcpsimulate the fabric drape on the current avatar"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
clo3d-mcp
English · Русский
An MCP server that lets Claude (or any MCP host) drive CLO3D for AI-assisted garment design — import projects, dress avatars, assign fabrics, run cloth simulation, render, and export, all from a chat.
Claude ◄─ stdio ─► clo_mcp (Python MCP server) ◄─ TCP/JSON ─► listener inside CLO ◄─► CLO APIclo_mcp/— the MCP server. Runs on the host, talks stdio to Claude, forwards each tool call as one JSON command over a TCP socket (127.0.0.1:5005). No CLO dependency, fully unit-testable.The listener inside CLO comes in two flavors — pick one:
Native C++ plugin ( | Python script ( | |
CLO UI while listening | stays fully interactive | frozen until |
Lifetime | whole CLO session, Start/Stop button | until the script is stopped |
Feedback | status window with live request log | Log Console prints |
Needs | CLO 7.3.240+, one-time DLL build | nothing (script as-is) |
The custom plugin (clo_plugin/)
CLO 7's embedded Python exposes no Qt and no idle/timer hook, so a Python
listener can only block the UI thread while serving. The plugin solves this
natively: a QTcpServer created on CLO's main thread gets its socket
signals delivered by CLO's own Qt event loop — commands run on the main thread
(the only place the CLO API is safe) without a blocking loop. The UI only
stalls for the duration of a genuinely long call (simulate/render), same as
clicking the action by hand. Same wire protocol as the Python listener — the
MCP server doesn't know or care which one is on the other end.
Two hard-won implementation notes (details in clo_plugin/README.md):
CLO loads plugin DLLs transiently —
LoadLibrarybefore every export call,FreeLibraryright after. Static state would die instantly, so the plugin pins its module (GetModuleHandleExW(..._PIN)) when the listener starts; the server then survives across calls and clicks.CLO swallows plugin exceptions and
qWarning, so the plugin appends a diagnostic trail toC:/Users/Public/Documents/CLO/clo_mcp_plugin.log.
Clicking the plugin's menu item opens a small status window:
green ● Running on 127.0.0.1:5005 / grey ○ Stopped, a Start/Stop button,
and a live log — every request with outcome and timing, e.g.
[14:23:05] simulate — ok (1840 ms).
Build & install the plugin (scripts)
Prereqs: Visual Studio 2022 (MSVC C++), CMake ≥ 3.20, Qt 5.15.x msvc2019_64
(CLO 7.3.240 ships Qt 5.15.2 — exact match), and the CLO SDK
(CLO_SDK_v7.3.240_WIN.zip from developer.clo3d.com → API/SDK Download).
cd clo_plugin
.\build.ps1 -SdkDir C:\path\to\CLO_SDK_v7.3.240 # add -QtDir C:\Qt\5.15.2\msvc2019_64 if Qt is elsewhere
.\install.ps1 # copies the DLL into CLO's API_Plug_in folderbuild.ps1configures CMake (VS 2022, x64, Release) and builds the DLL.-StubOnlybuildsclo_mcp_test.exeinstead — a stub backend speaking the full protocol, no SDK needed, to verify the host ↔ server plumbing.install.ps1copies the DLL toC:\Users\Public\Documents\CLO\Assets\Preferences\API_Plug_in\. CLO reloads the DLL on every menu click, so no restart is needed — unless the listener is currently running (the DLL is pinned); then close CLO and re-run, or use.\install.ps1 -WaitForCloseto auto-copy the moment CLO exits.uninstall.ps1removes the DLL (close CLO first).
If script execution is blocked: powershell -ExecutionPolicy Bypass -File .\build.ps1 …
cd clo_plugin
cmake -S . -B build-msvc -G "Visual Studio 17 2022" -A x64 `
-DCLO_SDK_DIR=C:/path/to/CLO_SDK_v7.3.240 `
-DCMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2019_64
cmake --build build-msvc --config Release # Release only - CLO won't load Debug
# then copy build-msvc/Release/clo_mcp_plugin.dll
# -> C:\Users\Public\Documents\CLO\Assets\Preferences\API_Plug_in\Use
In CLO: Settings → Plug-in → "MCP Listener (start / stop)" — the status window opens and the listener auto-starts on
127.0.0.1:5005.That's it — CLO stays interactive while Claude works.
Related MCP server: BlenderMCP
Python listener (fallback, blocking on CLO 7)
In CLO: Main Menu → Edit → Python Script → Run Python Script →
clo_addon/clo_mcp_listener.py.On CLO 7 it prints
blocking main-thread mode— the CLO UI is busy while serving; ask Claude to callclo_shutdownto hand the UI back.
Hook up the MCP server (host side)
git clone https://github.com/Lilbonner/clo3d-mcp.git
cd clo3d-mcp && pip install -e .Claude Code: claude mcp add clo3d -- python -m clo_mcp.server
Claude Desktop (claude_desktop_config.json):
{ "mcpServers": { "clo3d": { "command": "python", "args": ["-m", "clo_mcp.server"] } } }Then ask: "call clo_ping" → CLO listener is up. means the whole chain works.
From there, plain language: "import C:/work/dress.zprj and simulate 80 frames".
Tools
Tool | What it does |
| check the listener is reachable |
| open |
| number of pattern pieces in the scene |
| run the cloth solver |
| fabric workflow |
| colorway workflow |
| render, returns saved PNG path(s) |
| save the scene as |
| stop the listener (frees the UI in Python blocking mode) |
Tip: to dress an avatar, import the .avt first, then a .zpac garment saved
with arrangement points (e.g. CLO's library Male_T-shirt.zpac), then
simulate — auto_hang is not exposed in the SDK v4.3.4 C++ API.
Configuration
Set the same values on both sides (host env and CLO side):
CLO_MCP_HOST (default 127.0.0.1), CLO_MCP_PORT (5005),
CLO_MCP_TIMEOUT (600 s — simulate/render can be long).
Status
Validated end to end on CLO 7.3.240 with the native plugin: ping → import →
pattern_count → simulate → export (real .zprj on disk) → render (real PNG),
including adding an avatar and dressing it. See AUDIT.md for the validation
log and clo_plugin/README.md for plugin internals.
Русский
MCP-сервер, который позволяет Claude (или любому MCP-хосту) управлять CLO3D: импорт проектов, одевание аватаров, ткани, симуляция, рендер и экспорт — прямо из чата.
Claude ◄─ stdio ─► clo_mcp (MCP-сервер, Python) ◄─ TCP/JSON ─► листенер внутри CLO ◄─► CLO APIclo_mcp/— MCP-сервер. Работает на хосте, говорит с Claude по stdio, каждую команду шлёт одной JSON-строкой в TCP-сокет (127.0.0.1:5005).Листенер внутри CLO есть в двух вариантах — выбери один:
Нативный C++ плагин ( | Python-скрипт ( | |
UI CLO во время работы | полностью отзывчивый | заморожен до |
Время жизни | вся сессия CLO, кнопка Start/Stop | пока работает скрипт |
Обратная связь | окно статуса с живым логом запросов | печать в Log Console |
Что нужно | CLO 7.3.240+, разовая сборка DLL | ничего |
Кастомный плагин (clo_plugin/)
Встроенный Python в CLO 7 не имеет ни Qt, ни таймера/idle-хука, поэтому
Python-листенер может слушать сокет только блокируя UI. Плагин решает это
нативно: QTcpServer, созданный на главном потоке CLO, получает сигналы
сокета через собственный Qt event loop CLO — команды выполняются на главном
потоке (единственное безопасное место для CLO API) без блокирующего цикла.
UI замирает только на время действительно долгой операции (симуляция/рендер) —
ровно как при ручном клике. Протокол тот же, что у Python-листенера: MCP-сервер
не знает и не должен знать, кто на другом конце.
Два выстраданных нюанса реализации (подробности в clo_plugin/README.md):
CLO грузит DLL плагина на каждый вызов:
LoadLibraryперед каждым экспортом иFreeLibraryсразу после. Статическое состояние умирало бы мгновенно, поэтому при старте листенера плагин пинит свой модуль (GetModuleHandleExW(..._PIN)) — сервер переживает выгрузки и клики.CLO молча глотает исключения плагина и
qWarning— поэтому плагин ведёт диагностический лог вC:/Users/Public/Documents/CLO/clo_mcp_plugin.log.
Клик по пункту меню плагина открывает окно статуса: зелёный
● Running on 127.0.0.1:5005 / серый ○ Stopped, кнопка Start/Stop и живой
лог — каждый запрос с результатом и таймингом, например
[14:23:05] simulate — ok (1840 ms).
Сборка и установка плагина (скрипты)
Нужно: Visual Studio 2022 (MSVC C++), CMake ≥ 3.20, Qt 5.15.x msvc2019_64
(CLO 7.3.240 несёт Qt 5.15.2 — точное совпадение) и CLO SDK
(CLO_SDK_v7.3.240_WIN.zip с developer.clo3d.com → API/SDK Download).
cd clo_plugin
.\build.ps1 -SdkDir C:\путь\к\CLO_SDK_v7.3.240 # добавь -QtDir C:\Qt\5.15.2\msvc2019_64, если Qt в другом месте
.\install.ps1 # копирует DLL в папку API_Plug_in CLObuild.ps1конфигурирует CMake (VS 2022, x64, Release) и собирает DLL. С ключом-StubOnlyсоберётclo_mcp_test.exe— заглушку с полным протоколом без SDK, чтобы проверить связку хост ↔ сервер заранее.install.ps1кладёт DLL вC:\Users\Public\Documents\CLO\Assets\Preferences\API_Plug_in\. CLO перечитывает DLL при каждом клике по меню, так что перезапуск не нужен — кроме случая, когда листенер сейчас запущен (DLL запинена): тогда закрой CLO и повтори, либо.\install.ps1 -WaitForClose— скопирует сам, как только CLO закроется.uninstall.ps1удаляет DLL (CLO нужно закрыть).
Если выполнение скриптов запрещено политикой:
powershell -ExecutionPolicy Bypass -File .\build.ps1 …
cd clo_plugin
cmake -S . -B build-msvc -G "Visual Studio 17 2022" -A x64 `
-DCLO_SDK_DIR=C:/путь/к/CLO_SDK_v7.3.240 `
-DCMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2019_64
cmake --build build-msvc --config Release # только Release - Debug CLO не загрузит
# затем скопируй build-msvc/Release/clo_mcp_plugin.dll
# -> C:\Users\Public\Documents\CLO\Assets\Preferences\API_Plug_in\Использование
В CLO: Settings → Plug-in → «MCP Listener (start / stop)» — откроется окно статуса, листенер сам стартует на
127.0.0.1:5005.Всё — CLO остаётся отзывчивым, пока Claude работает.
Python-листенер (запасной, блокирующий на CLO 7)
В CLO: Main Menu → Edit → Python Script → Run Python Script →
clo_addon/clo_mcp_listener.py.На CLO 7 он напишет
blocking main-thread mode— UI CLO занят, пока идёт работа; чтобы вернуть управление, попроси Claude вызватьclo_shutdown.
Подключение MCP-сервера (на хосте)
git clone https://github.com/Lilbonner/clo3d-mcp.git
cd clo3d-mcp && pip install -e .Claude Code: claude mcp add clo3d -- python -m clo_mcp.server
Claude Desktop (claude_desktop_config.json):
{ "mcpServers": { "clo3d": { "command": "python", "args": ["-m", "clo_mcp.server"] } } }Проверка: скажи Claude «вызови clo_ping» → CLO listener is up. значит вся
цепочка работает. Дальше обычным языком: «импортируй C:/work/dress.zprj и
просимулируй 80 кадров».
Инструменты
Инструмент | Что делает |
| проверить, что листенер доступен |
| открыть |
| число лекал в сцене |
| прогнать симуляцию ткани |
| работа с тканями |
| работа с colorway |
| рендер, возвращает пути PNG |
| сохранить сцену в |
| остановить листенер (в блокирующем режиме вернёт UI) |
Совет: чтобы одеть аватара — сначала импортируй .avt, затем .zpac-гармент
с точками расстановки (например, библиотечный Male_T-shirt.zpac из ассетов
CLO), затем simulate. (auto_hang в C++ API SDK v4.3.4 не экспонирован.)
Настройка
Одинаковые значения с обеих сторон (env хоста и CLO):
CLO_MCP_HOST (по умолчанию 127.0.0.1), CLO_MCP_PORT (5005),
CLO_MCP_TIMEOUT (600 сек — симуляция и рендер бывают долгими).
Траблшутинг
Симптом | Причина / решение |
| CLO не открыт, листенер не запущен (окно статуса: |
Пункта меню плагина нет | DLL не в |
Клик по меню «ничего не делает» | Смотри |
UI CLO не реагирует | Python-режим: ожидаемо, вызови |
Команда зависает | Долгая симуляция/рендер — увеличь |
Статус
Проверено end-to-end на CLO 7.3.240 с нативным плагином: ping → импорт →
pattern_count → simulate → экспорт (реальный .zprj на диске) → рендер
(реальный PNG), включая добавление аватара и его одевание. Лог валидации — в
AUDIT.md, внутренности плагина — в clo_plugin/README.md.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lilbonner/clo3d-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server