Skip to main content
Glama

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 API
  • clo_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 (clo_plugin/) — recommended

Python script (clo_addon/) — fallback

CLO UI while listening

stays fully interactive

frozen until clo_shutdown (CLO 7 has no Qt in Python)

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 transientlyLoadLibrary before every export call, FreeLibrary right 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 to C:/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 folder
  • build.ps1 configures CMake (VS 2022, x64, Release) and builds the DLL. -StubOnly builds clo_mcp_test.exe instead — a stub backend speaking the full protocol, no SDK needed, to verify the host ↔ server plumbing.

  • install.ps1 copies the DLL to C:\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 -WaitForClose to auto-copy the moment CLO exits.

  • uninstall.ps1 removes 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

  1. In CLO: Settings → Plug-in → "MCP Listener (start / stop)" — the status window opens and the listener auto-starts on 127.0.0.1:5005.

  2. That's it — CLO stays interactive while Claude works.

Related MCP server: blender-mcp

Python listener (fallback, blocking on CLO 7)

  1. In CLO: Main Menu → Edit → Python Script → Run Python Scriptclo_addon/clo_mcp_listener.py.

  2. On CLO 7 it prints blocking main-thread mode — the CLO UI is busy while serving; ask Claude to call clo_shutdown to 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

clo_ping

check the listener is reachable

import_project(path)

open .zprj (replaces scene) / .avt (adds avatar) / .zpac (replaces garments, keeps avatar)

pattern_count()

number of pattern pieces in the scene

simulate(frames)

run the cloth solver

add_fabric / assign_fabric / set_fabric_color

fabric workflow

copy_colorway / set_colorway

colorway workflow

render_image()

render, returns saved PNG path(s)

export_zprj(path)

save the scene as .zprj

clo_shutdown

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 simulateauto_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 API
  • clo_mcp/ — MCP-сервер. Работает на хосте, говорит с Claude по stdio, каждую команду шлёт одной JSON-строкой в TCP-сокет (127.0.0.1:5005).

  • Листенер внутри CLO есть в двух вариантах — выбери один:

Нативный C++ плагин (clo_plugin/) — рекомендуется

Python-скрипт (clo_addon/) — запасной

UI CLO во время работы

полностью отзывчивый

заморожен до clo_shutdown (в Python CLO 7 нет Qt)

Время жизни

вся сессия 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 CLO
  • build.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\

Использование

  1. В CLO: Settings → Plug-in → «MCP Listener (start / stop)» — откроется окно статуса, листенер сам стартует на 127.0.0.1:5005.

  2. Всё — CLO остаётся отзывчивым, пока Claude работает.

Python-листенер (запасной, блокирующий на CLO 7)

  1. В CLO: Main Menu → Edit → Python Script → Run Python Scriptclo_addon/clo_mcp_listener.py.

  2. На 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 кадров».

Инструменты

Инструмент

Что делает

clo_ping

проверить, что листенер доступен

import_project(path)

открыть .zprj (заменяет сцену) / .avt (добавляет аватара) / .zpac (заменяет одежду, аватар остаётся)

pattern_count()

число лекал в сцене

simulate(frames)

прогнать симуляцию ткани

add_fabric / assign_fabric / set_fabric_color

работа с тканями

copy_colorway / set_colorway

работа с colorway

render_image()

рендер, возвращает пути PNG

export_zprj(path)

сохранить сцену в .zprj

clo_shutdown

остановить листенер (в блокирующем режиме вернёт 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 сек — симуляция и рендер бывают долгими).

Траблшутинг

Симптом

Причина / решение

Cannot reach CLO listener

CLO не открыт, листенер не запущен (окно статуса: ○ Stopped?) или порт не совпадает.

Пункта меню плагина нет

DLL не в …\Assets\Preferences\API_Plug_in\, либо собрана Debug, либо CLO < 7.3.

Клик по меню «ничего не делает»

Смотри clo_mcp_plugin.log — он показывает каждый вызов CLO в плагин.

UI CLO не реагирует

Python-режим: ожидаемо, вызови clo_shutdown. Плагин: идёт долгая команда (simulate/render).

Команда зависает

Долгая симуляция/рендер — увеличь CLO_MCP_TIMEOUT.

Статус

Проверено end-to-end на CLO 7.3.240 с нативным плагином: ping → импорт → pattern_count → simulate → экспорт (реальный .zprj на диске) → рендер (реальный PNG), включая добавление аватара и его одевание. Лог валидации — в AUDIT.md, внутренности плагина — в clo_plugin/README.md.

Available Tools

14 tools
add_fabricC

Add a .zfab fabric to the project. Returns its fabric index.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the action and return value, but does not reveal side effects (e.g., overwriting existing fabrics), required permissions, error conditions, or behavior on duplicate inputs.

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

Conciseness3/5

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

The description is concise at one sentence, but it is under-specified for the tool's purpose. While short, it fails to include essential details, making it less efficient than a slightly longer but more informative description.

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

Completeness2/5

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

Given the presence of an output schema (though not detailed) and simple parameters, the description is incomplete. It does not explain what the fabric index is, potential errors, or the effect of adding a fabric on the current project state. Missing context for effective use.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not add any meaning to the 'path' parameter beyond its name. The agent is given no information about what the path should represent (e.g., file path, URL, relative vs absolute) or any formatting requirements.

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

Purpose4/5

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

The description clearly states the action ('Add') and the target resource ('a .zfab fabric to the project'), and mentions the return value ('fabric index'). It is distinguishable from siblings like 'assign_fabric' which suggests association rather than creation, but does not explicitly differentiate.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'import_avatar' or 'copy_colorway'. The description lacks context about prerequisites, conditions for use, or situations where it should be avoided.

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

assign_fabricC

Assign an existing fabric to a pattern piece.

ParametersJSON Schema
NameRequiredDescriptionDefault
fabric_indexYes
pattern_indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It implies the fabric must exist but does not disclose what happens if indices are invalid, whether the assignment is reversible, or what the return value indicates. The tool has an output schema, but the description does not mention it.

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

Conciseness4/5

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

The description is a single sentence, which is concise and front-loaded. However, it is too brief to be fully informative, lacking elaboration on parameters or behavior.

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

Completeness2/5

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

Given the lack of annotations, zero schema description coverage, and the presence of an output schema, the description should provide more context about the operation's effects, constraints, and return value. It currently only states the basic purpose, which is insufficient for safe and correct usage.

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

Parameters2/5

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

The schema has 0% description coverage; neither fabric_index nor pattern_index are explained in the description. The parameter names suggest indexing into existing lists, but the description adds no explanation of their roles or expected ranges.

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 explicitly states the tool's action: assign an existing fabric to a pattern piece. It uses a specific verb ('assign') and resource ('fabric', 'pattern piece'), and distinguishes itself from sibling tools like add_fabric (which likely creates a new fabric) and set_fabric_color (which modifies color).

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, such as add_fabric or set_fabric_color. No prerequisites or context for when assignment is appropriate are provided.

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

auto_hangC

Auto-hang a garment on a hanger. bottom=True uses bottom hangers.

ParametersJSON Schema
NameRequiredDescriptionDefault
garmentYes
hangerYes
bottomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

Since no annotations are provided, the description must disclose behavior. It mentions bottom=True uses bottom hangers, but doesn't explain side effects, state changes, or whether the operation is reversible. The output schema exists but its content is not shown.

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?

Extremely concise: two sentences. First sentence covers purpose, second sentence clarifies a parameter. No unnecessary words.

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

Completeness2/5

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

For a tool with 3 parameters (2 required) and an output schema, the description is insufficient. It doesn't explain what garment and hanger represent (IDs, names?), and no examples are given. The output schema is present but not described.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It explains the bottom parameter, but garment and hanger are not described beyond the tool's purpose. No details on expected format or meaning.

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

Purpose4/5

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

The description clearly states the action: 'Auto-hang a garment on a hanger.' It specifies the resource (garment, hanger) and includes the bottom parameter behavior. However, it doesn't distinguish from sibling tools, but siblings seem unrelated.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, when not to use, or any context for selection.

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

clo_pingA

Check that CLO is open and the listener is reachable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It states the tool checks if CLO is open and reachable, which implies a read-only operation. However, it does not detail what the output indicates or potential error states, leaving some room for interpretation.

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 sentence with no wasted words. It is front-loaded with the verb and subject, providing immediate clarity.

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

Completeness5/5

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

Given the tool has no parameters, an output schema, and low complexity, the description is fully adequate. It captures the essential purpose without needing further elaboration.

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

Parameters4/5

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

The input schema has zero parameters (100% coverage). The description correctly has no parameter details as none exist. According to guidelines, a tool with 0 parameters receives a baseline of 4.

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 uses the specific verb 'Check' and clearly identifies the resource ('CLO is open and the listener is reachable'). It distinguishes the tool from sibling tools (e.g., add_fabric, auto_hang) by focusing on connectivity rather than manipulation.

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 the tool is for verifying connectivity but does not explicitly state when to use it over alternatives or provide exclusions. Given the tool's simplicity and uniqueness among siblings, the implied usage is sufficient.

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

clo_shutdownA

Stop the in-CLO listener and hand control back to CLO's UI.

Needed for the blocking main-thread mode CLO uses when no Qt binding is available: the listener occupies CLO until this is called.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool stops a listener and that the listener blocks CLO, implying a safe shutdown operation. It could mention if unsaved data might be affected, but overall transparent for a shutdown tool.

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?

Two sentences, no wasted words. Front-loaded with the core action, then second sentence adds necessary context. Highly concise and well-structured.

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

Completeness4/5

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

For a simple shutdown tool with no parameters, the description is complete: it explains what it does, when it's needed, and the blocking behavior. Output schema exists but description need not cover return values. Could add a safety note but not essential.

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

Parameters4/5

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

No parameters exist, schema coverage is 100%. Description does not need to add parameter details. Baseline 4 for zero-parameter tools.

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 clearly states the action ('Stop the in-CLO listener') and the result ('hand control back to CLO's UI'), using a specific verb and resource. It distinguishes from sibling tools like fabric and rendering tools.

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

Usage Guidelines4/5

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

The description explains the context for use: 'blocking main-thread mode' when 'no Qt binding is available', and that the listener occupies CLO until called. This provides clear context, though it does not explicitly state when not to use or list alternatives.

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

copy_colorwayB

Duplicate a colorway. Returns the new colorway index.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It states that a new colorway index is returned, but does not mention any side effects, permissions required, or what exactly 'duplicate' entails (e.g., whether it copies all properties). This is insufficient for a mutation 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 sentence that conveys the core action and return value with no unnecessary words. It is well-structured and easy to parse.

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?

For a simple tool with one optional parameter and an output schema, the description provides the basic purpose and return value. However, it lacks parameter documentation and usage context, which are needed for complete understanding.

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

Parameters1/5

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

The schema has 0% description coverage for the only parameter 'index'. The description does not explain what the index refers to or how it affects duplication, leaving the agent to guess its semantics.

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 clearly states the action 'Duplicate a colorway' with a specific verb and resource, and it mentions the return value. This distinguishes it from sibling tools like set_colorway (which modifies) and add_fabric (which adds a different entity).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, limitations, or exclusions, leaving the agent to infer usage from the name and context.

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

export_zprjC

Save the current scene as a .zprj project file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/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 disclosure. It only states 'save', implying a write operation, but does not clarify if it is destructive (overwrites existing files), whether it requires specific permissions, or any limits (e.g., file size, path restrictions). The output schema exists but is not described.

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

Conciseness3/5

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

The description is a single sentence with no waste, but it is too brief. Conciseness is good, but the lack of important details makes it under-specified. A 3 is appropriate because it is concise but not sufficiently informative.

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

Completeness2/5

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

Given the tool has one required parameter and no annotations, the description should provide more context about behavior and output. It does not mention return values (despite having an output schema), error conditions, or file handling details. The description is incomplete for a file export operation.

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

Parameters1/5

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

The single required parameter 'path' has no schema description (0% coverage) and the description adds no meaning beyond the schema. It does not explain whether the path should include the filename, whether it must be absolute, or if the extension is added automatically. The parameter semantics are entirely undocumented.

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

Purpose4/5

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

The description clearly states the action (save/export) and the resource (current scene to .zprj file). It distinguishes from sibling tools like 'import_project' and 'render_image' which have different purposes. However, it could be more specific about whether it overwrites files or requires a full path including filename.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as having an active scene, or when not to use it (e.g., if export is unsupported in the current state). Siblings like 'simulate' or 'render_image' are not differentiated in terms of use cases.

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

import_avatarC

Import an avatar file into the scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
optionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states the import action, without mentioning side effects, permission requirements, or any destructive behavior. The word 'import' implies modification but lacks detail.

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

Conciseness3/5

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

The description is a single short sentence, making it concise, but it lacks necessary detail. It achieves conciseness at the expense of completeness, earning a middle score.

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

Completeness2/5

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

For an import tool with 2 parameters and an output schema, the description is inadequate. It does not explain file formats, success indicators, or error conditions. The output schema may help, but the description does not leverage it.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the parameters. The meaning of 'options' (integer with default 0) is entirely unspecified. The description adds no value beyond the schema.

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

Purpose4/5

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

The description clearly states 'Import an avatar file into the scene', specifying the action (import), resource (avatar file), and destination (scene). It distinguishes from sibling tools like import_project by focusing on avatar files.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. No context about prerequisites or scenarios where import_avatar is preferred over other import tools.

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

import_projectA

Open a CLO project or garment file (.zprj/.zpac/.avt) into the scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It implies adding a file to the scene but doesn't clarify if it replaces the scene, merges, or any destructive effects. Adequate but could be more specific.

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?

One concise sentence (13 words) with no filler. Front-loads the verb and resource, making it efficient.

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

Completeness4/5

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

Given one parameter, no annotations, and an output schema (not shown but exists), the description covers the core functionality. Missing scene behavior details but generally sufficient.

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

Parameters4/5

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

Schema has 0% description coverage for the single parameter 'path'. The tool description compensates by specifying the supported file types (.zprj/.zpac/.avt), adding meaning beyond the schema's plain string type.

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?

Description clearly states the action ('Open') and resource ('CLO project or garment file') with specific file extensions (.zprj/.zpac/.avt), distinguishing it from sibling tools like import_avatar and export_zprj.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., import_avatar, export_zprj), no prerequisites, no exclusions, and no mention of when not to use it.

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

pattern_countA

Return the number of pattern pieces in the current scene.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, but description is straightforward: a read-only count. Does not disclose any error conditions or caching behavior, but adequate for a simple query.

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?

Single sentence with no wasted words. Front-loaded with action and result.

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

Completeness4/5

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

With no parameters and an output schema (not shown), the description is sufficient for a simple count tool. Could mention that it counts only pieces in the current scene, but it already does.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100% (none). Baseline 4 as description adds no param info, which is appropriate.

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?

Description clearly states the verb 'Return', resource 'pattern pieces', and scope 'current scene'. It distinguishes from sibling tools which handle adding, assigning, or exporting.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'simulate' or 'render_image'. Lacks context for when counting is appropriate.

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

render_imageB

Render the current scene to image(s). Returns the saved file path(s).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided; description only states it returns file paths. It does not disclose side effects, whether it is destructive, or what happens if the scene is empty. The description carries the full burden of behavioral disclosure.

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

Conciseness4/5

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

Single sentence, very concise and front-loaded. However, it could be slightly more informative without sacrificing brevity.

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?

Given zero parameters and an existing output schema (which relieves the description of explaining return values), the description is adequate but lacks context about scene readiness or execution behavior. It meets the minimum but has gaps.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100% trivially. The description adds no parameter information, but baseline is 4 for 0 parameters.

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 clearly states it renders the current scene to images and returns file paths. The verb 'render' and resource 'current scene' are specific and distinguish it from sibling tools like add_fabric or simulate.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, nor prerequisites like ensuring a scene is loaded. Usage is only implied.

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

set_colorwayC

Make a colorway current, optionally renaming it.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

Without annotations, the description carries full burden but only says 'make current', which is vague. No details on side effects, prerequisites, or what 'current' means (e.g., active state, affecting subsequent operations).

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

Conciseness4/5

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

The description is a single sentence with no unnecessary words. However, it could benefit from slightly more detail without becoming verbose, given the tool's simplicity.

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

Completeness2/5

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

Given 0% schema coverage and many sibling tools, the description lacks crucial context. It does not explain how to determine the correct index, what 'current' implies, or what the output schema returns. The tool's purpose is underspecified.

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

Parameters2/5

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

Schema coverage is 0%, so description must add meaning. It mentions optional renaming via 'name' but does not explain what 'index' refers to or constraints on the name field (e.g., format, uniqueness).

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

Purpose4/5

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

The description clearly states the verb 'make' and resource 'colorway', and adds optional renaming. However, it does not differentiate from sibling tools like 'copy_colorway' or 'set_fabric_color', leaving ambiguity about when to use this specific tool.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, there is no mention that this tool makes a colorway 'current' (active) as opposed to other colorway operations like copying or assigning fabrics.

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

set_fabric_colorB

Set a fabric's PBR base color (0..1 floats) for a colorway/face.

ParametersJSON Schema
NameRequiredDescriptionDefault
fabric_indexYes
rYes
gYes
bYes
aNo
colorwayNo
faceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, and the description does not disclose any behavioral traits such as whether it overrides existing colors, is destructive, or requires specific state. The brief text adds minimal transparency.

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?

Single sentence, no redundancy. Action verb first, resource and constraints clearly stated. Highly efficient.

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?

Given 7 parameters and no annotations, the description is minimal. It covers the core purpose but lacks workflow context, usage triggers, or behavioral details. Output schema exists but not referenced; rule allows omission.

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?

With 0% schema description coverage, the description adds value by specifying the 0..1 float range for r, g, b, a and naming 'colorway/face' parameters. However, it does not explain fabric_index, colorway, face semantics beyond their names.

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 clearly states the action ('Set'), the resource ('a fabric's PBR base color'), and the scope ('for a colorway/face'). It distinguishes from siblings like 'set_colorway' by targeting fabric-level base color.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., set_colorway, copy_colorway). No prerequisites or exclusion scenarios mentioned.

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

simulateA

Run cloth simulation for the given number of frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
framesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It only states the action without disclosing behavioral traits such as duration, asynchronicity, side effects, or required state. This is minimal for a simulation tool.

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?

Single sentence, front-loaded with the verb, no unnecessary words. Efficiently conveys core purpose.

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?

Output schema exists, so return values are covered. However, the description omits context about prerequisites (e.g., fabric assignment) and tool behavior (e.g., is it real-time or batched?). Adequate for a simple parameter but incomplete for a simulation workflow.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must clarify parameters. It explicitly states 'given number of frames', linking the 'frames' parameter to its purpose. While succinct, it adds essential meaning beyond the schema.

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 clearly states the action: 'Run cloth simulation' and specifies the scope 'for the given number of frames'. It distinguishes the tool from siblings, none of which perform simulation.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it does not mention prerequisites like having a cloth object or fabric assigned, and does not compare to related tools like auto_hang or render_image.

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. 14 tool updatesv0.1.0
    • First observedadd_fabric
    • First observedassign_fabric
    • First observedauto_hang
    • First observedclo_ping
    • First observedclo_shutdown
    • First observedcopy_colorway
    • First observedexport_zprj
    • First observedimport_avatar
    • First observedimport_project
    • First observedpattern_count
    • First observedrender_image
    • First observedset_colorway
    • First observedset_fabric_color
    • First observedsimulate

TDQS

B3.3/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct operation with no overlap. For example, add_fabric imports a new fabric while assign_fabric attaches an existing fabric to a pattern piece. Similarly, clo_ping and clo_shutdown serve different roles in connection management.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., add_fabric, export_zprj, set_colorway), but pattern_count uses noun_verb, and clo_ping/clo_shutdown use a clo_ prefix, introducing minor inconsistency.

Tool Count5/5

With 14 tools, the server covers the major aspects of CLO interaction (file I/O, fabric, colorway, simulation, rendering, connection) without being overly granular or sparse.

Completeness3/5

The tool set covers core workflows but has notable gaps: no pattern creation/modification, no deletion of resources, and no scene inspection beyond pattern count. This limits some agent-driven tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers