sketchup-mcp2
SketchupMCP — Интеграция Sketchup с протоколом Model Context Protocol
Изначально форк mhyrr/sketchup-mcp. Ответвление произошло на версии v0.0.1 с новым протоколом передачи данных (фрейминг с 4-байтовым префиксом длины), модульной архитектурой обработчиков, расширенными инструментами интроспекции / соединений / операций с ребрами, и полным покрытием модульными тестами как на Ruby, так и на Python. Опубликовано на PyPI как
sketchup-mcp2(оригинальный пакетsketchup-mcpявляется апстримом).
SketchupMCP подключает Sketchup к Claude AI через протокол Model Context Protocol (MCP), позволяя Claude напрямую взаимодействовать со Sketchup и управлять им. Эта интеграция позволяет выполнять 3D-моделирование, создание сцен и манипуляции в Sketchup с помощью подсказок.
Огромная благодарность Blender MCP за вдохновение и структуру.
Возможности
Двусторонняя связь: Подключение Claude AI к Sketchup через TCP-сокет
Манипуляция компонентами: Создание, изменение, удаление и трансформация компонентов в Sketchup
Управление материалами: Применение и изменение материалов и цветов
Инспекция сцены: Получение подробной информации о текущей сцене Sketchup
Работа с выделением: Получение и манипуляция выделенными компонентами
Выполнение Ruby-кода: Выполнение произвольного кода Ruby непосредственно в SketchUp для расширенных операций
Related MCP server: SketchupMCP
Компоненты
Система состоит из двух основных компонентов:
Расширение SketchUp (
su_mcp/su_mcp/): модульный плагин на Ruby, который запускает TCP-сервер внутри SketchUp (core/,handlers/,helpers/).MCP-сервер (
src/sketchup_mcp/): модульный пакет на Python, построенный на FastMCP —tools.pyпредоставляет инструменты MCP,connection.pyотвечает за постоянное TCP-соединение с 4-байтовым префиксом длины,config.pyсчитывает переменные окруженияSKETCHUP_MCP_*,errors.pyвыводит структурированные ошибки Ruby.
Установка
Python-пакеты
Мы используем uv, поэтому вам нужно выполнить brew install uv
Расширение Sketchup
Скачайте или соберите последний файл
.rbzВ Sketchup перейдите в Window > Extension Manager
Нажмите "Install Extension" и выберите скачанный файл
.rbzПерезапустите Sketchup
Использование
Запуск соединения
В Sketchup перейдите в Extensions > SketchupMCP > Start Server
Сервер запустится на порту по умолчанию (9876)
Убедитесь, что MCP-сервер запущен в вашем терминале
Использование с Claude
Настройте Claude для использования MCP-сервера, добавив следующее в конфигурацию Claude:
"mcpServers": {
"sketchup": {
"command": "uvx",
"args": [
"sketchup-mcp2"
]
}
}Это загрузит последнюю версию с PyPI
После подключения Claude сможет взаимодействовать со Sketchup, используя следующие возможности:
Инструменты
Геометрия и трансформации:
create_component— Создание куба/цилиндра/конуса/сферы с заданными размерами (мм)delete_component— Удаление компонента из сценыtransform_component— Перемещение/вращение/масштабирование компонента (перемещение в мм)set_material— Применение именованных или шестнадцатеричных (#rrggbb) цветов к компонентуexport_scene— Экспорт в skp/obj/dae/stl/png/jpg
Булевы операции и операции с ребрами:
boolean_operation— Объединение/вычитание/пересечение двух телchamfer_edge— Снятие фаски со всех ребер группы/компонента (расстояние в мм)fillet_edge— Скругление всех ребер (радиус в мм, сегменты настраиваются)
Столярные соединения:
create_mortise_tenon,create_dovetail,create_finger_joint— Столярные соединения (размеры в мм)
Интроспекция:
get_model_info— Путь, название, единицы измерения, ограничивающая рамка (bbox) активной моделиlist_components— Дерево групп/компонентов с ограничивающими рамками (рекурсивно, max_depth)get_component_info— Подробности об одной сущности по idfind_components— Поиск по имени/типу/слоюlist_layers,create_layer— Управление слоями/тегамиget_selection— ID и метаданные текущих выбранных сущностейundo— Отмена последней операции
Запасной вариант:
eval_ruby— Выполнение произвольного кода Ruby в SketchUp для всего, что не покрыто выше
Примеры команд
Вот несколько примеров того, что вы можете попросить Claude сделать:
"Создай простую модель дома с крышей и окнами"
"Выбери все компоненты и получи информацию о них"
"Сделай выбранный компонент красным"
"Перемести выбранный компонент на 10 единиц вверх"
"Экспортируй текущую сцену как 3D-модель"
"Создай сложный шкаф в стиле искусств и ремесел, используя код Ruby"
Устранение неполадок
Проблемы с подключением: Убедитесь, что запущены и сервер расширения Sketchup, и MCP-сервер
Ошибки команд: Проверьте консоль Ruby (Ruby Console) в Sketchup на наличие сообщений об ошибках
Ошибки тайм-аута: Попробуйте упростить запросы или разбить их на более мелкие шаги
Технические детали
Протокол связи
Система использует простой протокол на основе JSON поверх TCP-сокетов:
Команды отправляются как JSON-объекты с полем
typeи необязательнымиparamsОтветы — это JSON-объекты с полем
statusиresultилиmessage
Вклад в проект
Вклад приветствуется! Пожалуйста, не стесняйтесь отправлять Pull Request.
Лицензия
MIT
Конфигурация MCP
Добавьте в ваш .mcp.json (Claude Code) или эквивалентную конфигурацию клиента:
{
"mcpServers": {
"sketchup": {
"command": "uvx",
"args": ["sketchup-mcp2"],
"env": {
"SKETCHUP_MCP_HOST": "127.0.0.1",
"SKETCHUP_MCP_PORT": "9876",
"SKETCHUP_MCP_TIMEOUT": "60",
"SKETCHUP_MCP_LOG_LEVEL": "INFO"
}
}
}
}Ручной запуск (без MCP-клиента):
uvx sketchup-mcp2Сложные сценарии
Для работы с полными моделями SketchUp (стены, крыши, каркасы, соединения) через
eval_ruby см. подробные фрагменты кода Ruby в
docs/sketchup-ruby-cookbook.md:
«Проверка открытой модели» — запрос пути, слоев, ограничивающей рамки.
«Создание геометрии — надежный помощник make_box» — безопасное выдавливание
face.normal.z.«Каркасная стена (стойки + обвязки)» — полная секция стены.
«Стена с проемом» — вырезание отверстий в компланарных гранях.
«Двускатная / вальмовая крыша» — ручное построение треугольников.
«follow_me — профиль вдоль пути» — мауэрлат по периметру.
«Распространенные ошибки» — включая нюанс с обратной семантикой
Group#subtract.
Устранение неполадок
SketchUp not running or extension not started: ...
Python MCP-сервер попытался подключиться к порту 9876, но не нашел слушающего процесса. Либо:
SketchUp не запущен, или
Плагин MCP установлен, но не запущен — откройте Plugins → MCP Server → Start.
Сервер остается активным после этой ошибки; следующий вызов инструмента повторит попытку подключения.
Available Tools
22 toolsboolean_operationA
Perform a boolean operation (union / difference / intersection) on two solids.
difference = target minus tool. Operating on an instance of a shared definition consumes only that instance — the result is a new group, sibling instances are untouched. Unreliable on non-manifold geometry.
Returns: JSON {id, name, type, bbox_mm{min,max}|null}. Read bbox_mm to verify the result; it is null for empty geometry (e.g. a difference that consumed the whole body).
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | Entity ID from a previous response (integer or its string form) | |
| operation | No | union, difference (target minus tool), or intersection | union |
| target_id | Yes | Entity ID from a previous response (integer or its string form) | |
| delete_originals | No | erase the two source bodies after a successful operation |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: the effect of operations on shared definitions, unreliability on non-manifold geometry, and the return format including how to interpret null bbox_mm for empty results. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the core purpose first, followed by clarifications and return details. Every sentence adds value, and there is no redundancy or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, one enum, no annotations), the description covers essential behavioral aspects and return format. It lacks detailed error conditions or prerequisites but is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully described in the input schema (100% coverage). The description adds extra context beyond the schema, such as the special behavior on instances and the meaning of the difference operation, enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Perform a boolean operation (union / difference / intersection) on two solids', specifying the verb, resource, and operation types. It uniquely identifies this tool among siblings as no other tool offers boolean operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool, including the difference operation semantics and behavior on shared definitions. However, it does not explicitly state when not to use it or suggest alternatives, although no alternatives exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chamfer_edgeA
Chamfer (bevel) edges of a group/component by distance mm.
By default ALL edges are chamfered. Unreliable on non-manifold geometry.
Returns: JSON {id, name, type, bbox_mm|null, edges_chamfered, stats{attempted, skipped_no_match, subtract_failed, succeeded}} — check stats.subtract_failed == 0 (failed cuts) and stats.skipped_no_match == 0 (edges consumed by earlier cuts).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) | |
| distance | No | Chamfer distance in mm |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the modification behavior (chamfering edges), notes unreliability on non-manifold geometry, and details the return value, including stats to check for failures. However, it does not explicitly mention destructiveness or undo behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the main action stated first. The return value description is slightly verbose but structured with a clear format. Overall, it is efficient and avoids unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool's simplicity (2 parameters, output schema), the description covers key behaviors, default, reliability note, and return value. It does not compare with the sibling tool fillet_edge, but the context is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema: it reiterates that 'distance' is in mm and that 'id' is an entity ID from a previous response. No additional parameter details or constraints are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (chamfer/bevel), the resource (edges of a group/component), and the key parameter (distance in mm). It distinguishes the tool from siblings like fillet_edge (rounding) and boolean_operation by specifying the bevel operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains default behavior ('By default ALL edges are chamfered') and warns about unreliability on non-manifold geometry, providing context for when to use the tool. However, it does not explicitly state when not to use it or compare it to alternatives like fillet_edge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_componentA
Create a primitive (cube / cylinder / cone / sphere) in SketchUp.
All linear values are millimeters (mm). Minimum size per dimension: 0.1 mm for cube (thin stock like veneer is fine), 1.0 mm for sphere / cylinder / cone (tessellated types degenerate earlier). position is the bounding-box MIN corner (not the center); the same anchor is used by transform_component.position. Per-type dimensions: cube uses [x, y, z]; cylinder and cone use [0]=diameter, [2]=height ([1] is ignored); sphere uses [0]=diameter only. New geometry is wrapped in a SketchUp Group.
Returns: JSON {id, name, type, bbox_mm{min,max}|null}. Read bbox_mm to verify the result before the next step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the new group so find_components can locate it later | |
| type | No | Primitive type to create | cube |
| position | No | Bounding-box MIN corner [x, y, z] in mm (not the center) | |
| dimensions | No | Sizes [x, y, z] in mm; cylinder/cone use [0]=diameter, [2]=height; sphere uses [0]=diameter |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description fully covers behavioral traits: units (mm), minimum dimensions per type, position as MIN corner, per-type dimension conventions, return value details, and suggestion to verify with bbox_mm. Thorough disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Multiple sentences but each adds essential detail without redundancy. Well-structured: purpose, units, size constraints, anchor point, per-type dimension mapping, Group wrapping, return value and verification advice. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage and presence of output schema, the description provides all necessary context: explains param nuances (ignored axis for cylinder/cone), behavioral constraints, and return format. No gaps for a primitive creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (baseline 3), but description adds significant value: minimum sizes (0.1mm cube, 1.0mm sphere/cylinder/cone), clarifies that dimensions are interpreted differently per type (e.g., cylinder [0]=diameter, [2]=height), and reinforces that position is MIN corner.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it creates a primitive (cube/cylinder/cone/sphere) in SketchUp and that geometry is wrapped in a Group. Distinguishes from transform_component by noting shared anchor convention, and from sibling creation tools by specifying primitive types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear instructions on when to use (to create primitives) but does not explicitly state when not to use or compare to alternative creation tools like create_dovetail or create_finger_joint. However, it references transform_component for positioning, offering some guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dovetailA
Create a dovetail joint between two boards.
All dimensions in millimeters; angle is in degrees, valid range (0, 60]. Offsets shift the joint from the board face's center. Defaults are sized for ~100 mm boards. The two boards must already touch/overlap along the joint axis.
Returns: JSON {tail: {id, name, type, bbox_mm|null}, pin: {...}, boolean_cuts: {attempted, failed}} — non-zero failed means some cuts did not apply (likely non-manifold geometry); verify via bbox_mm.
| Name | Required | Description | Default |
|---|---|---|---|
| angle | No | Dovetail flare angle in degrees, 0 < angle <= 60 | |
| depth | No | Joint depth in mm | |
| width | No | Joint width in mm | |
| height | No | Joint height in mm | |
| pin_id | Yes | Entity ID from a previous response (integer or its string form) | |
| tail_id | Yes | Entity ID from a previous response (integer or its string form) | |
| offset_x | No | Joint offset from the board face's center along X, mm | |
| offset_y | No | Joint offset from the board face's center along Y, mm | |
| offset_z | No | Joint offset from the board face's center along Z, mm | |
| num_tails | No | Number of tails |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It explains the return JSON structure, warns about non-manifold geometry causing failed cuts, and advises verifying via bbox_mm, but lacks side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences plus a bullet, front-loading the core purpose with no wasted words, perfectly sized for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, return structure, and unit context. For 10 parameters with full schema coverage and output schema, this is sufficient, though it could mention that the operation creates geometry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds context beyond schema by specifying that dimensions are in mm, angle in degrees with valid range, offsets shift from board face center, and defaults suit ~100mm boards.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a dovetail joint between two boards, with specific details on units, angle range, offsets, and defaults, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a prerequisite (boards must touch/overlap along joint axis) but lacks guidance on when to use this tool versus siblings like create_finger_joint or create_mortise_tenon.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_finger_jointA
Create a finger joint (box joint) between two boards.
All dimensions in millimeters; offsets shift the joint from the board face's center. Defaults are sized for ~100 mm boards. The two boards must already touch/overlap along the joint axis.
Returns: JSON {board1: {id, name, type, bbox_mm|null}, board2: {...}, boolean_cuts: {attempted, failed}} — non-zero failed means some cuts did not apply (likely non-manifold geometry); verify via bbox_mm.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Joint depth in mm | |
| width | No | Joint width in mm | |
| height | No | Joint height in mm | |
| offset_x | No | Joint offset from the board face's center along X, mm | |
| offset_y | No | Joint offset from the board face's center along Y, mm | |
| offset_z | No | Joint offset from the board face's center along Z, mm | |
| board1_id | Yes | Entity ID from a previous response (integer or its string form) | |
| board2_id | Yes | Entity ID from a previous response (integer or its string form) | |
| num_fingers | No | Number of fingers |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the return JSON structure, explains failure modes (non-manifold geometry via boolean_cuts.failed), and advises verification via bbox_mm. It also notes offsets shift from board face center and default sizes. Could further clarify if operation is reversible, but overall good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a clear purpose statement, a compact paragraph of key details, and a structured return description. Every sentence contributes meaning, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 params, output schema, no annotations), the description covers prerequisites, parameter interpretation, and failure modes concisely. It could include an example or more guidance on selecting board IDs, but the output schema reduces the need for return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so baseline is 3. The description adds value by stating all dimensions are in millimeters, explaining offsets shift from board face center, and noting defaults are sized for ~100 mm boards. This contextualizes the parameters beyond their individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a finger joint (box joint) between two boards, using specific verbs and resource. It names the joint type, which distinguishes it from sibling tools like create_dovetail and create_mortise_tenon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: boards must already touch/overlap along the joint axis. However, it does not explicitly guide when to use this tool versus alternatives, such as dovetail or mortise-tenon, though the naming makes it implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_layerA
Create a new layer (tag) with the given name.
Returns: JSON {id, name, visible}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new layer |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool creates a layer and returns {id, name, visible}, which covers mutability and output. However, it does not disclose any side effects, permissions, rate limits, or constraints beyond the schema (minLength). For a simple creation tool, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences: one for purpose and one for return value. No unnecessary words, front-loaded with the action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's single parameter and the presence of an output schema (which the description explicitly echoes), the description is complete. It covers purpose, input, and output. No critical information is missing for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'name', which already has a description. The tool description adds no additional meaning beyond the schema for this parameter (just 'with the given name'). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'new layer (tag)' with a required name parameter. It distinguishes from sibling list_layers which reads layers, and other tools that modify components. The return format is also specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating a layer, but does not explicitly state when to use this tool versus alternatives like list_layers or other creation tools. No when-not or exclusion criteria are provided, but the simplicity of the operation mitigates the need for extensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mortise_tenonA
Create a mortise-and-tenon joint between two boards.
All dimensions in millimeters; offsets shift the joint from the board face's center. Defaults are sized for ~100 mm boards. The two boards must already touch/overlap along the joint axis.
Returns: JSON {mortise: {id, name, type, bbox_mm|null}, tenon: {...}, boolean_cuts: {attempted, failed}} — non-zero failed means some cuts did not apply (likely non-manifold geometry); verify via bbox_mm.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Joint depth in mm | |
| width | No | Joint width in mm | |
| height | No | Joint height in mm | |
| offset_x | No | Joint offset from the board face's center along X, mm | |
| offset_y | No | Joint offset from the board face's center along Y, mm | |
| offset_z | No | Joint offset from the board face's center along Z, mm | |
| tenon_id | Yes | Entity ID from a previous response (integer or its string form) | |
| mortise_id | Yes | Entity ID from a previous response (integer or its string form) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explains dimensions are in millimeters, offsets from board face center, and details the return format including how to interpret failed cuts: 'non-zero failed means some cuts did not apply (likely non-manifold geometry); verify via bbox_mm.' This is a good disclosure of behavior and failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two paragraphs with no filler. The first sentence states purpose, followed by critical details. Every sentence adds value, and the structure is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and no annotations, the description covers prerequisites, unit system, default sizing, return format, and error handling. It is complete enough for an AI agent to understand what the tool does, when to use it, and how to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds some context (units, default sizing) but does not significantly enhance understanding of individual parameters beyond the schema. The explanation of mortise_id and tenon_id is already present in the schema's description field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a mortise-and-tenon joint between two boards.' It uses a specific verb (create) and resource (mortise-and-tenon joint), which distinguishes it from sibling tools like create_dovetail or create_finger_joint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisites: 'The two boards must already touch/overlap along the joint axis.' Also notes that defaults are sized for ~100 mm boards, giving a usage hint. Does not explicitly state when not to use or list alternatives, but sibling tools provide that context implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_componentB
Delete a group or component by entity ID.
Returns: JSON {ok: true}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the return value but fails to warn about permanent data loss or side effects. For a delete operation, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no redundant information, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple with one parameter and an output schema, the description lacks details on error handling, idempotency, and permission requirements, which are important for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the 'id' parameter (100% coverage). The description only repeats 'by entity ID', adding no additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('delete') and the resource ('group or component') and specifies the method ('by entity ID'). It distinguishes itself from sibling tools, as it is the only deletion operation among them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or conditions for safe use. Given the destructive nature, such guidance is important.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eval_rubyA
Evaluate arbitrary Ruby code in SketchUp.
Enabled by default; the user can close the gate in the SketchUp
extension's Settings. When closed, the SketchUp side returns JSON-RPC
code -32010 with a user-facing message explaining how to re-enable it.
This wrapper surfaces that message as a plain string so the LLM can
repeat it to the user verbatim — without the [code] prefix that
format_error would otherwise add.
Returns the .to_s of the LAST evaluated expression; stdout (puts) is NOT
captured. End scripts with an explicit expression — e.g. a final
result.to_json — to get structured data back. Errors return
"[code] message" with the Ruby exception class and message.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Ruby code to evaluate inside SketchUp |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels. It discloses that only the last expression's .to_s is returned, stdout is not captured, errors are returned as '[code] message' with the Ruby exception class, and describes the gate-closed scenario including the JSON-RPC code and how the message is surfaced. This gives an agent a clear picture of what to expect before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence adds essential detail: purpose, gating behavior, return value nuances, and error format. It is front-loaded with the core purpose in the first sentence and then expands on critical behavioral details. No fluff is present, but it could be tightened by reducing the explanation of the gate message wrapper, which is somewhat tangential to the core call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all critical aspects an agent needs to call it correctly: return format, stdout limitation, error handling, and the special gate-closed case. It also alerts the agent to the verbatim-message mechanism. For a single-parameter tool with an output schema (though not shown), this is complete enough for accurate invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the parameter with 100% coverage, so the baseline is 3. The description adds valuable usage guidance by advising to end scripts with an explicit expression like 'result.to_json' to obtain structured data, which directly affects how the parameter should be used. This elevates it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Evaluate arbitrary Ruby code in SketchUp,' a specific verb and resource that unambiguously distinguishes it from all sibling tools which perform specific operations (create_layer, undo, get_version, etc.). There is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly contrast this tool with its siblings or state when to prefer it over other tools. It explains the gating behavior and error handling, but this is about behavioral context, not usage routing. The implied usage is as a general-purpose escape hatch for operations not covered by the specialized tools, but that is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sceneA
Export the current scene to a temp file on the SketchUp host.
Formats: skp (native), obj / dae / stl (geometry), png / jpg (viewport render, default 1920×1080). The file is written on the machine running SketchUp — on a split-host setup the path is not directly readable here.
Returns: JSON {path, format} plus a "warning" field when exporting skp from a never-saved model (SketchUp binds the live document to the export path — relay the warning to the user).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | skp (native), obj / dae / stl (geometry), png / jpg (viewport render) | skp |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses important behavioral traits: the file is written on the SketchUp host, split-host path unreadability, and a warning field for certain exports. It does not explicitly state that the tool is non-destructive to the model, but the verb 'export' implies reading the scene without modification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear front-loaded purpose statement, followed by compact listing of formats and return information. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description covers the essential behavior, return format, and an edge case (warning for never-saved models). Minor gaps include file naming conventions and how to access files on split-host setups, but these are acceptable given the output schema likely provides additional structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'format' with enums and a default. The description adds meaning beyond the schema by noting that skp is native, obj/dae/stl are geometry, png/jpg are viewport renders with default resolution 1920x1080. This provides valuable context for the AI agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports the current scene to a temp file, lists all supported formats (skp, obj, dae, stl, png, jpg), and distinguishes it from sibling tools like get_viewport_screenshot which captures a viewport image without exporting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about the export destination (SketchUp host), split-host implications, and warning conditions for skp exports from unsaved models. However, it does not explicitly state when to use this tool versus alternatives like get_viewport_screenshot for image-only needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillet_edgeA
Round (fillet) edges of a group/component by radius mm with
segments arc segments.
By default ALL edges are filleted. Unreliable on non-manifold geometry.
Returns: JSON {id, name, type, bbox_mm|null, edges_filleted, stats{attempted, skipped_no_match, subtract_failed, succeeded}} — check stats.subtract_failed == 0 (failed cuts) and stats.skipped_no_match == 0 (edges consumed by earlier cuts).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) | |
| radius | No | Fillet radius in mm | |
| segments | No | Arc segments per rounded edge |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the unreliability on non-manifold geometry, explains the return JSON structure, and advises checking specific stats fields. It could mention that the operation modifies geometry destructively but is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences plus a bullet of return info. It front-loads the main action. Could be slightly more streamlined, but no significant waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and 3 parameters, the description covers purpose, default behavior, non-manifold warning, and return interpretation. It is fairly complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining default behavior and return stats, but the parameter descriptions in the schema are already clear. The description does not provide additional semantics beyond the schema for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Round (fillet) edges of a group/component') and distinguishes from sibling tool 'chamfer_edge' by specifying 'Round' vs bevel. It also mentions the parameters 'radius' and 'segments' directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on default behavior ('By default ALL edges are filleted') and warns about non-manifold geometry. However, it does not explicitly contrast with chamfer_edge or specify when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_componentsA
Find components matching name substring, layer, and/or type.
Name matching is case-insensitive substring; layer must match exactly. Searches recursively (bounded by max_depth). With no filters it returns all components up to max_depth (paginated) — same traversal as list_components.
Returns: JSON {components[], total, offset, truncated} — if truncated, request the next page with offset += limit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive substring to match against component names | |
| type | No | Restrict results to groups or component instances | |
| layer | No | Exact layer (tag) name to filter by | |
| limit | No | Page size — maximum components per response | |
| offset | No | How many components to skip (pagination) | |
| max_depth | No | Maximum nesting depth to search | |
| response_format | No | detailed includes bbox_mm per component; concise omits it | detailed |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully explains behavior: case-insensitive substring matching, exact layer matching, recursive search bounded by max_depth, pagination with truncation, and return format. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
6 sentences front-loading purpose, then detailing matching, filter-less behavior, and return format. No extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all key aspects: filtering criteria, recursion, pagination, return structure. Output schema exists but description still gives helpful summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with good descriptions. The tool description adds behavioral context (case-insensitive, exact, recursive) not in schema, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds components by name substring, layer, and type. It explains matching rules (case-insensitive, exact layer) and distinguishes from sibling list_components by noting the same traversal when no filters are applied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that without filters it behaves like list_components, implying an alternative for unfiltered listing. However, it could explicitly state when to use find_components vs list_components.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_infoA
Detailed info for a single group or component instance by entity ID.
Returns: JSON {id, name, type, layer, depth, bbox_mm|null}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the return format but does not disclose error behavior, permissions, or that it is read-only. For a simple getter, this is minimally acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences fix, no unnecessary information. Concisely states purpose and return format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input and presence of output schema, the description is largely complete. It could mention error handling or that the ID must come from previous responses, but overall is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add new meaning beyond the schema's parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed info for a single group or component by entity ID, distinguishing it from sibling tools like find_components, list_components, and get_selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the user has an entity ID, but lacks explicit guidance on when to use versus alternatives, or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_infoA
Get current SketchUp model info: file path, title, units, bounding box, entity count, layer list.
Returns: JSON {path, title, units: "mm", bounding_box_mm|null, entity_count, layers[]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It implies a read-only operation but does not explicitly state that it does not modify the model or any side-effect guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. The first sentence states purpose, the second lists return format concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple info retrieval tool with no parameters and an output schema, the description is largely sufficient. However, it misses potential preconditions (e.g., model must be open) and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 params), baseline is 4. The description adds value by detailing the return structure beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get current SketchUp model info' and lists all returned fields (path, title, units, etc.). It is specific and distinct from sibling tools like get_component_info which focus on individual components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The context is implied as a general model information retrieval, but there is no mention of when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionA
Get the entities currently selected in the SketchUp UI.
Returns: JSON {entities: [...]} — groups/components are {id, name, type, layer, depth, bbox_mm|null}; other selected entities (edges, faces, ...) are {id, type} only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 details the output format and differentiates entity types, but does not mention side effects, permissions, or behavior in empty selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus an example schema structure. No wasted words, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, straightforward purpose), the description fully explains what it returns and the format. Output schema exists, so no need for further return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and the description provides no parameter information, which is appropriate since there are none. Schema coverage is 100%, so baseline score of 4 is suitable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and the resource ('entities currently selected in the SketchUp UI'). It differentiates itself from sibling tools like boolean_operation or create_component by being a read-only getter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 or when not to use it. For a simple getter, the necessity may be obvious, but explicit context would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionA
Return the server version and Python↔Ruby compatibility verdict.
Useful as a runtime sanity probe — always returns a payload, even when the connection or other tools surface errors. The result is a JSON string with fields: python_version, ruby_version, min_compatible_ruby, max_compatible_ruby, ruby_min_compatible_python, ruby_max_compatible_python, compatible (bool), error (string | null).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool always returns a payload, even during connection or other errors, and describes the result structure (JSON string with specific fields). This provides meaningful behavioral context beyond basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a field listing, with no wasted words. The main purpose is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description is remarkably complete: it explains when to use, what it returns, and its reliability. It adds details about the compatibility fields beyond the bare schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4 per guidelines. The description adds no parameter information because none exist. It correctly focuses on return value and usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns server version and compatibility verdict, which is a specific verb+resource. It distinguishes from sibling tools by describing its unique role as a runtime sanity probe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends using it as a runtime sanity probe and notes it always returns a payload even when other tools error. While it doesn't list alternatives or exclusions, the context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_viewport_screenshotA
Capture the current SketchUp viewport; returns the PNG image plus a JSON text block {width, height, preset_used, style_used}.
Useful for letting Claude visually verify the scene between steps.
Parameters
max_size: largest side of the returned PNG (64..4096). Aspect ratio is taken from the current viewport; the smaller side is scaled proportionally.
view_preset: switch the camera to a standard view before snapping.
currentleaves the camera alone.zoom_extents: call view.zoom_extents before snapping.
style: temporarily flip a small set of rendering_options keys.
defaultleaves them alone.restore_view: when true (default), camera and rendering_options are snapshotted before mutation and restored after the snapshot, so the user's viewport is unchanged.
If the connection drops mid-response the call is retried automatically; the viewport may briefly flicker in that rare case.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | Temporary rendering style for the shot; 'default' leaves rendering options alone | default |
| max_size | No | Largest side of the returned PNG in pixels; the other side follows the viewport aspect ratio | |
| view_preset | No | Camera preset to switch to before snapping; 'current' leaves the camera alone | current |
| restore_view | No | Restore the camera and rendering options after the shot, leaving the user's viewport unchanged | |
| zoom_extents | No | Zoom to fit the whole model before snapping |
TDQS
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 describes the snapshot process, parameter effects, and retry/flicker behavior. It does not explicitly state non-destructiveness but implies it via the restore_view parameter and its description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear paragraphs and a parameter list. It is concise enough but could be slightly tighter by removing some redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description includes the return format (PNG + JSON). It covers all parameters, retry behavior, and the purpose, making it fully informative for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant context beyond the schema for each parameter, such as aspect ratio scaling for max_size and the specific rendering options toggled by style.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures a screenshot of the SketchUp viewport and returns a PNG image along with a JSON block containing dimensions and style info. It is distinct from sibling tools like export_scene or get_selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it is 'useful for letting Claude visually verify the scene between steps', providing clear context for when to use it. However, it does not explicitly mention when not to use it or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsA
List groups and component instances in the model (paginated).
Each component is {id, name, type, layer, depth, bbox_mm} (detailed) or {id, name, type, layer, depth} (concise); bounds are world-coordinate mm. Set recursive=true to descend into nested components (bounded by max_depth, default 3).
Returns: JSON {components[], total, offset, truncated} — if truncated, request the next page with offset += limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size — maximum components per response | |
| offset | No | How many components to skip (pagination) | |
| max_depth | No | Maximum nesting depth to descend when recursive | |
| recursive | No | Descend into nested groups/components | |
| response_format | No | detailed includes bbox_mm per component; concise omits it | detailed |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden of behavioral disclosure. It explains the return format (detailed vs. concise), pagination behavior (truncated flag, offset increment), and recursion depth limits. This is comprehensive for a read-only list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three short paragraphs) and well-structured: purpose, object format, parameters, return value with pagination instructions. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, pagination, two response formats), the description covers all necessary aspects: what is returned, how recursion works, and how to paginate. The presence of an output schema is acknowledged but the description still fully explains the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already described. The description adds significant value by explaining the meaning of response_format (detailed includes bbox_mm, concise omits it) and the interaction between recursive and max_depth. This goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource: 'List groups and component instances in the model (paginated)'. It immediately distinguishes itself from siblings like find_components (search) and get_component_info (single component), as it is a paginated listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on using pagination and recursion (e.g., 'Set recursive=true to descend into nested components... bounded by max_depth, default 3' and instructions for pagination via offset increment). However, it does not explicitly state when to use this tool over siblings like find_components, which would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_layersA
List all model layers (tags).
Returns: JSON {layers: [{name, visible, color, id}]}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions return format and that it lists all layers, implying a read-only operation but does not explicitly state no side effects. Adequate for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, single sentence plus return format example. Structurally clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of output schema in description, it is fairly complete. Lacks details on layer definitions or edge cases, but sufficient for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Baseline of 3 applies; description adds no parameter information, which is acceptable given no params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all model layers (tags). The verb 'list' and resource 'layers' are specific. The parenthetical 'tags' might cause minor ambiguity but overall the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., create_layer). However, as a simple read operation with no parameters, usage context is implicitly understood.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_materialA
Assign a material (color) to a group or component.
material accepts a named color — red, green, blue, yellow, cyan, turquoise, magenta, purple, white, black, brown, wood, orange, gray, grey — or a 6-digit hex string like "#a05030" (#rrggbb). Anything else fails with error -32602. Named colors are case-insensitive. Painting affects only this instance (it is made unique first). That applies to groups/components; painting a raw face/edge id (obtainable via get_selection) colors the shared definition — all instances show it.
Returns: JSON {id, name, type, bbox_mm{min,max}|null}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) | |
| material | Yes | Named color or 6-digit hex string like #a05030 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: instance vs definition coloring, valid material formats, and error code for invalid material. It could also mention side effects like undo but is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: purpose first, then material details, then behavioral nuance, then return type. No superfluous sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and only two simple parameters, the description fully explains input, behavior, and return format. No gaps for a coloring tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value: examples of valid colors, case-insensitivity, error code, and behavior context for the 'id' parameter (instance vs definition).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Assign a material (color) to a group or component.' It specifies the action, resource, and distinguishes from sibling tools by focusing on coloring, which no other tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for changing color but provides no explicit guidance on when to use vs alternatives or when not to use. No mention of prerequisites or when this tool is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transform_componentA
Move, rotate and/or scale a group or component (mm / degrees).
position: ABSOLUTE target for the entity's bounding-box MIN corner, in mm — the same anchor create_component uses. Applied LAST (after rotation/scale), so the final bbox-min lands exactly at [x, y, z] even in combined calls. It is NOT a relative offset: repeating the same position is idempotent.
rotation: RELATIVE rotation in degrees around the bbox center, applied sequentially about world X, then Y, then Z.
scale: RELATIVE scale factors about the bbox center.
These validations (3-element lists, non-zero scale) apply only to this typed tool — raw Ruby driven through eval_ruby bypasses them.
Returns: JSON {id, name, type, bbox_mm{min,max}|null}. Read bbox_mm to verify the result; it is null for empty geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID from a previous response (integer or its string form) | |
| scale | No | relative factors about bbox center, each |s| > 1e-9 | |
| position | No | ABSOLUTE target for the bbox-min corner, mm | |
| rotation | No | relative degrees around bbox center, applied X then Y then Z |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses position as absolute and applied last, rotation as relative sequential about world axes, scale as relative with non-zero validation, and return JSON structure. All key behavioral traits are explained beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise bullet-pointed description with no fluff. Each sentence provides essential information about parameters, validations, and output. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters with full schema coverage and an output schema, the description covers all needed context: operation order, validation scope, return format, and verification hint (read bbox_mm). No gaps perceived.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds critical semantics: position is NOT relative but absolute and idempotent, rotation order is X then Y then Z, scale factors are relative with non-zero constraint. These enrich the parameter understanding significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Move, rotate and/or scale' and resource 'a group or component', distinguishing it from creation/deletion/evaluation siblings like create_component, delete_component, and eval_ruby. The title is null but name suffices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts with eval_ruby by noting validations only apply to this typed tool, guiding the agent to use this for safe transformations. However, it does not elaborate on when to prioritize this over other transformation-like operations among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoA
Undo the last atomic operation in SketchUp. One MCP tool-call = one undo step.
Returns: JSON {ok: true}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it undoes the last atomic operation and returns {ok: true}. This sufficiently describes behavior for a straightforward undo tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences: one explaining the action and one specifying the return value. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and a simple return, the description is complete. It omits potential edge cases (e.g., multiple undos), but overall it provides sufficient context for a basic undo tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (0 parameters, 100% schema coverage). The description adds no extra parameter info, which is fine as the schema already covers everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Undo the last atomic operation in SketchUp', using a specific verb and resource. It is distinct from sibling tools which create, modify, or query; no other tool performs undo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that one MCP tool-call equals one undo step, clarifying usage. No explicit when-not-to-use or alternatives are given, but the simple 0-parameter interface and unique function make guidance adequate.
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.
17 tool updates
v0.3.0- Changed
boolean_operation10 fields changed- added
Input schema / properties / delete_originals / descriptionAdded value: +"erase the two source bodies after a successful operation" - added
Input schema / properties / operation / descriptionAdded value: +"union, difference (target minus tool), or intersection" - added
Input schema / properties / target_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / target_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / target_id / minLengthRemoved value: -1 - removed
Input schema / properties / target_id / typeRemoved value: -"string" - added
Input schema / properties / tool_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / tool_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / tool_id / minLengthRemoved value: -1 - removed
Input schema / properties / tool_id / typeRemoved value: -"string"
- Changed
chamfer_edge5 fields changed- added
Input schema / properties / distance / descriptionAdded value: +"Chamfer distance in mm" - added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string"
- Changed
create_component7 fields changed- changed
Input schema / properties / dimensions / defaultPrevious value: -[ - 1, - 1, - 1 -]New value: +[ + 100, + 100, + 100 +] - added
Input schema / properties / dimensions / descriptionAdded value: +"Sizes [x, y, z] in mm; cylinder/cone use [0]=diameter, [2]=height; sphere uses [0]=diameter" - removed
Input schema / properties / dimensions / items / exclusiveMinimumRemoved value: -0 - added
Input schema / properties / dimensions / items / minimumAdded value: +0.1 - added
Input schema / properties / nameAdded value: +{ + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional name for the new group so find_components can locate it later", + "title": "Name" +} - added
Input schema / properties / position / descriptionAdded value: +"Bounding-box MIN corner [x, y, z] in mm (not the center)" - added
Input schema / properties / type / descriptionAdded value: +"Primitive type to create"
- Changed
create_dovetail17 fields changed- added
Input schema / properties / angle / descriptionAdded value: +"Dovetail flare angle in degrees, 0 < angle <= 60" - added
Input schema / properties / angle / maximumAdded value: +60 - added
Input schema / properties / depth / descriptionAdded value: +"Joint depth in mm" - added
Input schema / properties / height / descriptionAdded value: +"Joint height in mm" - added
Input schema / properties / num_tails / descriptionAdded value: +"Number of tails" - added
Input schema / properties / offset_x / descriptionAdded value: +"Joint offset from the board face's center along X, mm" - added
Input schema / properties / offset_y / descriptionAdded value: +"Joint offset from the board face's center along Y, mm" - added
Input schema / properties / offset_z / descriptionAdded value: +"Joint offset from the board face's center along Z, mm" - added
Input schema / properties / pin_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / pin_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / pin_id / minLengthRemoved value: -1 - removed
Input schema / properties / pin_id / typeRemoved value: -"string" - added
Input schema / properties / tail_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / tail_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / tail_id / minLengthRemoved value: -1 - removed
Input schema / properties / tail_id / typeRemoved value: -"string" - added
Input schema / properties / width / descriptionAdded value: +"Joint width in mm"
- Changed
create_finger_joint15 fields changed- added
Input schema / properties / board1_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / board1_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / board1_id / minLengthRemoved value: -1 - removed
Input schema / properties / board1_id / typeRemoved value: -"string" - added
Input schema / properties / board2_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / board2_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / board2_id / minLengthRemoved value: -1 - removed
Input schema / properties / board2_id / typeRemoved value: -"string" - added
Input schema / properties / depth / descriptionAdded value: +"Joint depth in mm" - added
Input schema / properties / height / descriptionAdded value: +"Joint height in mm" - added
Input schema / properties / num_fingers / descriptionAdded value: +"Number of fingers" - added
Input schema / properties / offset_x / descriptionAdded value: +"Joint offset from the board face's center along X, mm" - added
Input schema / properties / offset_y / descriptionAdded value: +"Joint offset from the board face's center along Y, mm" - added
Input schema / properties / offset_z / descriptionAdded value: +"Joint offset from the board face's center along Z, mm" - added
Input schema / properties / width / descriptionAdded value: +"Joint width in mm"
- Changed
create_layer1 field changed- added
Input schema / properties / name / descriptionAdded value: +"Name for the new layer"
- Changed
create_mortise_tenon14 fields changed- added
Input schema / properties / depth / descriptionAdded value: +"Joint depth in mm" - added
Input schema / properties / height / descriptionAdded value: +"Joint height in mm" - added
Input schema / properties / mortise_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / mortise_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / mortise_id / minLengthRemoved value: -1 - removed
Input schema / properties / mortise_id / typeRemoved value: -"string" - added
Input schema / properties / offset_x / descriptionAdded value: +"Joint offset from the board face's center along X, mm" - added
Input schema / properties / offset_y / descriptionAdded value: +"Joint offset from the board face's center along Y, mm" - added
Input schema / properties / offset_z / descriptionAdded value: +"Joint offset from the board face's center along Z, mm" - added
Input schema / properties / tenon_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / tenon_id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / tenon_id / minLengthRemoved value: -1 - removed
Input schema / properties / tenon_id / typeRemoved value: -"string" - added
Input schema / properties / width / descriptionAdded value: +"Joint width in mm"
- Changed
delete_component4 fields changed- added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string"
- Changed
eval_ruby1 field changed- added
Input schema / properties / code / descriptionAdded value: +"Ruby code to evaluate inside SketchUp"
- Changed
export_scene1 field changed- added
Input schema / properties / format / descriptionAdded value: +"skp (native), obj / dae / stl (geometry), png / jpg (viewport render)"
- Changed
fillet_edge6 fields changed- added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string" - added
Input schema / properties / radius / descriptionAdded value: +"Fillet radius in mm" - added
Input schema / properties / segments / descriptionAdded value: +"Arc segments per rounded edge"
- Changed
find_components9 fields changed- changed
Input schema / properties / layer / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / layer / descriptionAdded value: +"Exact layer (tag) name to filter by" - added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Page size — maximum components per response", + "maximum": 500, + "minimum": 1, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / max_depth / descriptionAdded value: +"Maximum nesting depth to search" - changed
Input schema / properties / name / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / name / descriptionAdded value: +"Case-insensitive substring to match against component names" - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "How many components to skip (pagination)", + "minimum": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / response_formatAdded value: +{ + "default": "detailed", + "description": "detailed includes bbox_mm per component; concise omits it", + "enum": [ + "concise", + "detailed" + ], + "title": "Response Format", + "type": "string" +} - added
Input schema / properties / type / descriptionAdded value: +"Restrict results to groups or component instances"
- Changed
get_component_info4 fields changed- added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string"
- Changed
get_viewport_screenshot5 fields changed- added
Input schema / properties / max_size / descriptionAdded value: +"Largest side of the returned PNG in pixels; the other side follows the viewport aspect ratio" - added
Input schema / properties / restore_view / descriptionAdded value: +"Restore the camera and rendering options after the shot, leaving the user's viewport unchanged" - added
Input schema / properties / style / descriptionAdded value: +"Temporary rendering style for the shot; 'default' leaves rendering options alone" - added
Input schema / properties / view_preset / descriptionAdded value: +"Camera preset to switch to before snapping; 'current' leaves the camera alone" - added
Input schema / properties / zoom_extents / descriptionAdded value: +"Zoom to fit the whole model before snapping"
- Changed
list_components5 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 50, + "description": "Page size — maximum components per response", + "maximum": 500, + "minimum": 1, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / max_depth / descriptionAdded value: +"Maximum nesting depth to descend when recursive" - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "How many components to skip (pagination)", + "minimum": 0, + "title": "Offset", + "type": "integer" +} - added
Input schema / properties / recursive / descriptionAdded value: +"Descend into nested groups/components" - added
Input schema / properties / response_formatAdded value: +{ + "default": "detailed", + "description": "detailed includes bbox_mm per component; concise omits it", + "enum": [ + "concise", + "detailed" + ], + "title": "Response Format", + "type": "string" +}
- Changed
set_material5 fields changed- added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string" - added
Input schema / properties / material / descriptionAdded value: +"Named color or 6-digit hex string like #a05030"
- Changed
transform_component7 fields changed- added
Input schema / properties / id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "minLength": 1, + "type": "string" + } +] - added
Input schema / properties / id / descriptionAdded value: +"Entity ID from a previous response (integer or its string form)" - removed
Input schema / properties / id / minLengthRemoved value: -1 - removed
Input schema / properties / id / typeRemoved value: -"string" - added
Input schema / properties / position / descriptionAdded value: +"ABSOLUTE target for the bbox-min corner, mm" - added
Input schema / properties / rotation / descriptionAdded value: +"relative degrees around bbox center, applied X then Y then Z" - added
Input schema / properties / scale / descriptionAdded value: +"relative factors about bbox center, each |s| > 1e-9"
2 tool updates
v0.1.0- Added
get_version - Added
get_viewport_screenshot
20 tool updates
v0.0.1- First observed
boolean_operation - First observed
chamfer_edge - First observed
create_component - First observed
create_dovetail - First observed
create_finger_joint - First observed
create_layer - First observed
create_mortise_tenon - First observed
delete_component - First observed
eval_ruby - First observed
export_scene - First observed
fillet_edge - First observed
find_components - First observed
get_component_info - First observed
get_model_info - First observed
get_selection - First observed
list_components - First observed
list_layers - First observed
set_material - First observed
transform_component - First observed
undo
TDQS
Scored across 22 tools
Most tools are clearly distinct (create_component vs transform_component vs delete_component; list_components vs get_component_info vs find_components). The three joint tools (create_mortise_tenon, create_dovetail, create_finger_joint) are similar in purpose but each targets a different joint type, so they are distinguishable. Some overlap exists between list_components and find_components with no filters, but descriptions clarify the difference.
The naming pattern is mostly consistent verb_noun: create_*, list_*, get_*, delete_*, transform_*, set_*, export_*, eval_*, boolean_operation, chamfer_edge, fillet_edge. Minor deviations: boolean_operation, chamfer_edge, and fillet_edge use noun_verb or bare noun forms instead of verb_noun, but the pattern is still readable and predictable.
22 tools is on the higher end but appropriate for a SketchUp MCP server covering modeling primitives, transformations, joints, booleans, edge operations, materials, layers, selection, scene export, and introspection. It is slightly heavy but each tool serves a distinct purpose in the 3D modeling workflow.
The tool surface covers core modeling operations: create, transform, delete, boolean ops, edge modifications, materials, layers, selection, and model info. Minor gaps include no explicit update/rename tool for components (though eval_ruby can cover it) and no direct tool for creating edges/faces from scratch beyond primitives, but the eval_ruby escape hatch fills many gaps.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Connect your AI assistant to Blender for 3D modeling, Geometry Nodes, materials, lighting, animation, rendering and export. Inspect real scenes and viewport images, refine the result and restore checkpoints. OAuth connects your chat to Blender Bridge Desktop on an online Windows 10/11 x64 computer running Blender 4.2+. The chat can run on another device. Requires an active Blender Bridge account; 7-day trial available. AI model access is separate.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- AlicenseBqualityFmaintenanceConnects Sketchup to Claude AI through the Model Context Protocol, allowing Claude to directly interact with and control Sketchup for prompt-assisted 3D modeling and scene manipulation.10503MIT
- AlicenseBqualityCmaintenanceIntegration that connects Sketchup to Claude AI through the Model Context Protocol, allowing Claude to directly interact with and control Sketchup for prompt-assisted 3D modeling, scene creation, and manipulation.1026MIT
- AlicenseBqualityDmaintenanceEnables direct interaction and control of SketchUp through Claude AI using the Model Context Protocol and a TCP socket connection. It allows for prompt-assisted 3D modeling, component manipulation, and the execution of arbitrary Ruby code within the SketchUp environment.101MIT
- AlicenseAqualityCmaintenanceConnects Claude AI to SketchUp, allowing you to create and modify 3D models via natural language commands.2132 PyPI7MIT