Skip to main content
Glama

KeyShot MCP connects an MCP-compatible AI agent to a licensed KeyShot installation on the same computer. KeyShot file processing stays local; however, an MCP client may send tool results, scene metadata, or embedded previews to its configured model provider. See Security before using confidential work.

KeyShot MCP workflow

English

Highlights

  • Start with a request, not a render-settings checklist. Use one product tool for model import, object materials, camera, environment, scene copy, and output.

  • See before committing. Bounded PNG previews are returned directly to the Agent for composition, material, and lighting feedback.

  • Keep source scenes protected. Editing workflows write controlled copies and reject output paths outside the configured safe directory by default.

  • Continue from the latest save. Saved-scene sync detects real file changes, creates a collision-safe copy, and avoids duplicate work with fingerprints.

  • Use focused controls when needed. Nineteen documented tools cover inspection, presets, cameras, materials, environments, render queues, and all-camera output.

NOTE

Tested on Windows 11 with KeyShot Studio 2025 / KeyShot 14.1. KeyShot and a valid license are required and are not included with this independent project.

Quick start for designers

The easiest setup is to send this prompt to an agent that can edit your MCP configuration:

Install KeyShot MCP 0.13.0 and configure it in my MCP client.

1. Use: npx -y keyshot-mcp@0.13.0
2. Find my local keyshot_headless.exe and set KEYSHOT_HEADLESS_EXE to its full path.
3. Keep outputs in the default KeyShot MCP Outputs folder unless I choose another safe folder.
4. Keep KEYSHOT_ALLOW_EXTERNAL_OUTPUTS disabled.
5. Restart or reload the MCP client and run keyshot_status.
6. Explain any problem and its suggested fix in plain language.
7. Do not upload or publish my KeyShot files, persistent renders, or license information.
8. Before sending a preview image to the configured model provider, remind me when the scene is confidential.

After setup, try:

Check whether KeyShot MCP is ready, then prepare a standard-quality product render
from C:\models\speaker.obj.

Requirements

  • Node.js 20 or newer.

  • A locally installed and licensed KeyShot edition with headless scripting.

  • Windows 11 with KeyShot Studio 2025 / KeyShot 14.1 is tested.

  • Other KeyShot versions may work when they expose the same scripting APIs, but they are not currently verified by this project.

  • KeyShot, its license, materials, and environments are not included.

Why the stable release does not control the open KeyShot window

The stable server works on saved scene files through KeyShot headless scripting; it does not control the currently open, unsaved KeyShot GUI session. This is a boundary of the public KeyShot scripting execution model, not an omitted MCP connection. KeyShot's Script Runner keeps a GUI script active until that script returns. In our Live Companion prototype, keeping a bridge alive also kept the Script Runner open and blocked normal interaction with the KeyShot window.

Calling lux.sync() can flush pending KeyShot operations, but it does not provide a documented background service, GUI event callback, or plugin lifecycle that can safely host a persistent MCP bridge. Calling lux from an arbitrary worker thread would also risk unsafe access to the scene. For that reason, the project does not present the experimental bridge as production-ready realtime control.

For a reliable workflow, save the scene first. The Agent can inspect or edit a safe copy through headless KeyShot, return a preview, and preserve the original file. True realtime GUI control can be reconsidered if KeyShot exposes a supported non-blocking GUI extension or main-thread callback API.

Use keyshot_sync_saved_scene for the closest stable alternative to realtime collaboration. Give it a saved .bip file or one folder containing .bip files. It selects the newest saved scene, computes a content fingerprint, copies it to a collision-safe output name, and returns an embedded preview by default. Pass the returned fingerprint on the next call; if the user has not saved a new change, the tool reports changed: false without creating another copy or render.

I saved my KeyShot scene in C:\projects\speaker. Sync the newest .bip from that
folder, show me a preview, and do not overwrite the original scene.

Install

The current release is 0.13.0.

Version 0.13.0 supports MCP protocol 2026-07-28 over stdio using the official TypeScript SDK v2. Existing clients using the 2025-11-25 handshake can still connect with the same configuration. All 19 tool names and input parameters are preserved. See upgrade notes for compatibility and verification.

ChatGPT MCP Events subscriptions are not included in this release. They require event methods, persistent subscription storage, authenticated connectivity and signed HTTPS callbacks in addition to protocol support. This server continues to run locally and process saved KeyShot scenes.

Run with npx

No global npm installation is required:

{
  "mcpServers": {
    "keyshot": {
      "command": "npx",
      "args": ["-y", "keyshot-mcp@0.13.0"],
      "env": {
        "KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
      }
    }
  }
}

Install globally

npm install -g keyshot-mcp@0.13.0
{
  "mcpServers": {
    "keyshot": {
      "command": "keyshot-mcp",
      "env": {
        "KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
      }
    }
  }
}

Run from source

git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install
pnpm build

Point the MCP client to the absolute path of dist/index.js. Ready-to-edit examples are available in examples.

Restart the MCP client after changing its configuration, then call keyshot_status. The status result checks the MCP version, KeyShot executable, output access, bridge files, preset JSON, and a minimal KeyShot startup.

Common workflows

Preview before final rendering

Use keyshot_preview_render after checking a scene. It returns a PNG directly to the Agent, so composition, materials, and lighting can be described and confirmed before a standard or final render. Temporary previews are deleted automatically; set outputPath only when a persistent PNG copy is needed.

Recommended loop: status check -> scene inspection -> preview -> Agent feedback -> user confirmation -> standard or final render.

One-call product render

keyshot_product_render is the recommended high-level tool for ordinary product work. It can import a model or open a scene, apply object-specific materials, configure a camera and environment, save a scene copy, and render in one KeyShot process.

Import C:\models\speaker.obj, center and ground it, use the Isometric camera preset,
set a 55 mm focal length, save a scene copy, and render a standard PNG.

For a new model, import composition options default to enabled. Existing scenes keep their current composition unless explicit changes are requested.

Render every camera

Render every saved camera in C:\scenes\speaker.bip at preview quality. Continue if
one camera fails and do not overwrite existing images.

Use keyshot_batch_render instead when only selected named cameras are required.

Prepare a model without rendering

Import C:\models\speaker.obj, center it, place it on the ground, adjust the camera
target and environment, then save speaker-prepared.bip.

Adjust camera and environment

Set the Product Hero camera to a 55 mm focal length and distance 6, rotate the
current environment to 45 degrees, save a new scene, then render a preview.

fieldOfView and focalLength cannot be used together. position and lookAt are optional, but must be supplied as a pair. samples and maxTimeSeconds select different KeyShot render modes and cannot be combined.

Quality presets

Preset

Resolution

Samples

Use

preview

960 x 540

16

Fast composition and material checks

standard

1920 x 1080

64

Default for keyshot_product_render

final

3840 x 2160

256

High-resolution final output

Explicit width, height, and samples override the corresponding preset values. Explicit maxTimeSeconds switches to time-based rendering instead of preset samples. Lower-level render tools preserve their existing behavior when no preset is given.

Tools

Tool

Purpose

keyshot_status

Diagnose local configuration, output access, presets, and KeyShot startup.

keyshot_product_render

Prepare, save, and render a model or scene in one process.

keyshot_preview_render

Return a temporary or saved PNG directly to the Agent for visual review.

keyshot_sync_saved_scene

Copy the newest saved scene safely, detect changes, and return a preview.

keyshot_inspect_scene

List scene metadata, objects, cameras, materials, model sets, and references.

keyshot_list_cameras

Return saved camera names before a selected-camera render.

keyshot_render

Render one active or named camera.

keyshot_render_queue

Run independent render jobs sequentially.

keyshot_batch_render

Render selected named cameras from one scene.

keyshot_render_all_cameras

Discover and render every saved camera.

keyshot_import_model

Import a model into an empty or base scene and save it.

keyshot_apply_material

Apply a KeyShot material name or local material file to one object.

keyshot_list_material_presets

List configured material presets.

keyshot_apply_material_preset

Apply a configured material preset to one object.

keyshot_set_camera

Create or update camera transform, distance, FOV, or focal length.

keyshot_list_camera_presets

List standard and custom camera presets.

keyshot_apply_camera_preset

Create or update a camera from a preset.

keyshot_set_environment

Select or adjust an environment, brightness, and rotation.

keyshot_save_scene

Save an existing scene to a controlled output path.

The server also exposes one MCP Prompt for product rendering and one MCP Resource describing the KeyShot headless workflow. The complete generated reference for all 19 tools is available in docs/TOOLS.md. The bundled Agent Skill in skills/keyshot-mcp teaches compatible agents how to install, diagnose, and use the server safely.

Configuration

Variable

Default

Description

KEYSHOT_HEADLESS_EXE

keyshot_headless.exe on Windows

Full executable path or a command available on PATH.

KEYSHOT_OUTPUT_DIR

<home>/Documents/KeyShot MCP Outputs

Root for rendered images and saved scenes.

KEYSHOT_ALLOW_EXTERNAL_OUTPUTS

false

Allow output outside the configured root only when explicitly set to true.

KEYSHOT_TIMEOUT_MS

600000

Timeout for one KeyShot process.

KEYSHOT_LICENSE_ARGS

empty

Optional launch arguments; diagnostics never echo their values.

KEYSHOT_MATERIAL_PRESETS

bundled JSON

Optional user-managed material preset file.

KEYSHOT_CAMERA_PRESETS

bundled JSON

Optional user-managed camera preset file.

All KeyShot operations run sequentially to reduce license and output conflicts. Input scenes and models may come from any local path. By default, generated images and scenes must remain inside KEYSHOT_OUTPUT_DIR; .., sibling-prefix, and symlink/junction escapes are rejected.

Automatically generated product outputs use -2, -3, and later suffixes when a name already exists. Explicit output paths are not silently renamed. Operations that support overwrite require it to be set deliberately before replacing files.

Camera and material presets

The bundled camera library contains Front, Back, Left, Right, Top, Bottom, and Isometric standard views. A custom camera JSON may define a standard view or an absolute position, lookAt, and optional up vector.

Material presets reference a KeyShot library material name or local material file. The MCP server reads preset files but does not edit them automatically. See presets for the supported formats.

Reproducible KeyShot demo

The repository includes a smoke test built from generated cube geometry in examples/demo. It verifies startup, import composition, scene inspection, camera presets, lens controls, environment rotation, scene saving, camera discovery, one-call product rendering, and real PNG output.

npm run smoke:keyshot

Generated .bip files and test renders stay in the configured local output directory. A representative result is included below:

KeyShot smoke test render

Development

pnpm install --frozen-lockfile
pnpm run check
pnpm test
python -m unittest discover -s tests -p "test_*.py"
pnpm run format:check
python -m ruff check scripts tests
pnpm run docs:tools:check
node scripts/check-release.mjs
npm pack --dry-run

CI runs on Windows and Ubuntu with Node.js 20 and 24. Linux CI validates the MCP server, bridge logic, metadata, and package; it does not claim that KeyShot itself was tested on Linux.

Community and support

Never attach customer scenes, proprietary models, license information, credentials, or confidential renders to a public post.

Roadmap

  • Verify additional supported KeyShot releases on real installations.

  • Verify macOS installation and headless behavior.

  • Add depth-of-field and additional lens controls when stable headless APIs exist.

License, security, and trademarks

This project uses the MIT License. See SECURITY.md for security reporting and CONTRIBUTING.md for development guidance. Do not commit licenses, private scenes, customer assets, or unpublished renders.

KeyShot is a trademark of KeyShot ApS and/or KeyShot Inc. This independent open-source community project is not affiliated with, endorsed by, sponsored by, or otherwise associated with KeyShot. Users must install and license KeyShot separately and comply with its applicable terms. This project must not be used to bypass licensing or redistribute proprietary KeyShot software or assets.


Related MCP server: Local MCP for SketchUp

中文

KeyShot MCP 在本机处理 KeyShot 文件;但 MCP 客户端可能会把工具结果、场景元数据或 内嵌预览发送给它所配置的模型服务。处理保密项目之前请先阅读安全说明。

核心特点

  • 从设计需求开始,而不是先填写一堆渲染参数。 一个产品出图工具即可完成模型导入、 指定对象材质、相机、环境、场景副本和渲染输出。

  • 正式出图前先看预览。 预览 PNG 会直接返回给 Agent,用于检查构图、材质和光线。

  • 保护源场景。 编辑流程默认生成受控副本,并拒绝向安全输出目录之外写入文件。

  • 从最近一次保存继续。 保存同步会识别真实文件变化、创建不重名副本,并用内容指纹 避免重复处理。

  • 需要精细控制时仍然可用。 19 个工具覆盖场景检查、预设、相机、材质、环境、 渲染队列和全部相机出图。

NOTE

已实测 Windows 11 + KeyShot Studio 2025 / KeyShot 14.1。使用时需要另行安装并合法 授权 KeyShot;本项目是独立开源项目,不包含 KeyShot 软件或许可证。

设计师快速开始

最简单的安装方式,是把下面这段话发给能够修改 MCP 配置的 Agent:

请安装 KeyShot MCP 0.13.0,并配置到我的 MCP 客户端。

1. 使用:npx -y keyshot-mcp@0.13.0
2. 查找本机 keyshot_headless.exe,并把完整路径设置为 KEYSHOT_HEADLESS_EXE。
3. 默认把结果保存在“文档/KeyShot MCP Outputs”,除非我明确选择其他安全目录。
4. 保持 KEYSHOT_ALLOW_EXTERNAL_OUTPUTS 关闭。
5. 重启或重新加载 MCP 客户端,然后运行 keyshot_status。
6. 用普通设计师能理解的语言说明问题和修复建议。
7. 不要上传或发布我的 KeyShot 文件、保留的渲染图或许可证信息。
8. 如果场景属于保密项目,在把预览发送给模型服务之前先提醒我。

安装后可以这样说:

检查 KeyShot MCP 是否准备就绪,然后用 C:\models\speaker.obj 生成一张标准质量的产品渲染图。

使用要求

  • Node.js 20 或更高版本。

  • 本机已安装、合法授权并支持 headless 脚本的 KeyShot。

  • 已实测 Windows 11 + KeyShot Studio 2025 / KeyShot 14.1。

  • 暴露相同脚本 API 的其他 KeyShot 版本可能可用,但本项目暂未完成实机验证。

  • 本项目不包含 KeyShot、许可证、官方材质或环境资源。

为什么稳定版不能控制当前打开的 KeyShot 窗口

稳定版通过 KeyShot headless 脚本处理已经保存的场景文件,不能直接控制 KeyShot 窗口中尚未保存的当前会话。这是 KeyShot 现有公开脚本执行方式的边界,并不是 MCP 连接功能遗漏。

我们已经制作并实机测试过 Live Companion 原型。为了等待 Agent 指令,Bridge 脚本 必须长期保持运行;但 KeyShot Script Runner 会一直等待脚本结束,导致脚本窗口持续 占用并阻挡 KeyShot GUI 的正常交互。lux.sync() 只能同步待处理操作,公开文档没有 提供可安全承载常驻 MCP Bridge 的后台服务、GUI 事件回调或插件生命周期。让普通后台 线程直接调用 lux 也可能造成不安全的场景访问。因此,本项目没有把这个实验方案包装成 可用于正式工作的“实时控制”。

可靠的工作方式是先保存场景,再让 Agent 使用 headless KeyShot 检查或修改安全副本、 返回预览并保留原文件。如果 KeyShot 后续公开非阻塞 GUI 扩展接口或主线程回调 API, 本项目可以重新评估真正的实时 GUI 控制。

keyshot_sync_saved_scene 是目前最接近实时协作、同时保持稳定的方案。向它提供一个已 保存的 .bip 文件,或只包含当前项目场景的文件夹。工具会选择最近保存的场景、计算 内容指纹、复制到不会重名的安全输出路径,并默认返回内嵌预览。下一次调用时传入上次的 指纹;如果用户没有保存新的修改,工具会返回 changed: false,不会重复复制或渲染。

我已经把 KeyShot 场景保存在 C:\projects\speaker。请同步这个文件夹中最新的 .bip,
给我看预览,而且不要覆盖原场景。

安装

当前正式版本为 0.13.0。

0.13.0 使用官方 TypeScript SDK v2,通过 stdio 支持 MCP 2026-07-28 协议。 使用 2025-11-25 握手的现有客户端仍可沿用原配置连接,19 个工具的名称和输入参数 保持兼容。兼容范围和验证方法见升级说明。

本版尚未提供 ChatGPT MCP Events 订阅。该能力除新协议外,还需要事件接口、持久化 订阅、经过认证的连接和签名 HTTPS 回调。服务继续在本机处理已保存的 KeyShot 场景。

使用 npx 免安装运行

{
  "mcpServers": {
    "keyshot": {
      "command": "npx",
      "args": ["-y", "keyshot-mcp@0.13.0"],
      "env": {
        "KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
      }
    }
  }
}

全局安装

npm install -g keyshot-mcp@0.13.0
{
  "mcpServers": {
    "keyshot": {
      "command": "keyshot-mcp",
      "env": {
        "KEYSHOT_HEADLESS_EXE": "C:/Program Files/KeyShot Studio/bin/keyshot_headless.exe"
      }
    }
  }
}

从源码运行

git clone https://github.com/truman-t3/keyshot-mcp.git
cd keyshot-mcp
pnpm install
pnpm build

在 MCP 客户端中填写 dist/index.js 的绝对路径。可编辑配置示例位于 examples。修改配置后重启 MCP 客户端,再调用 keyshot_status。

状态检查会验证 MCP 版本、KeyShot 可执行文件、输出目录、bridge、预设 JSON, 并运行最小 KeyShot 启动测试。

常用工作流

正式渲染前先看预览

检查场景后调用 keyshot_preview_render。它会把 PNG 直接返回给 Agent,便于 先检查构图、材质和光线,再由用户确认是否继续标准或最终渲染。临时预览会自动 删除;只有需要保留图片时才填写 outputPath。

推荐流程:状态检查 -> 场景检查 -> 预览 -> Agent 描述问题 -> 用户确认 -> 标准或最终渲染。

一句话完成产品出图

普通产品工作优先使用 keyshot_product_render。它能在一个 KeyShot 进程中导入模型 或打开场景、应用指定材质、调整相机和环境、保存场景副本并渲染图片。

导入 C:\models\speaker.obj,自动居中贴地,使用 Isometric 相机预设和 55 mm 焦距,
保存场景副本并输出标准质量 PNG。

新模型的导入构图选项默认开启;已有场景在没有明确要求时保留现有构图。

渲染全部相机

用预览质量渲染 C:\scenes\speaker.bip 中的全部相机。某个相机失败时继续,
并且不要覆盖已有图片。

只渲染部分指定相机时,使用 keyshot_batch_render。

只整理模型,不渲染

导入 C:\models\speaker.obj,自动居中、贴地、调整相机观察点和环境,
然后保存为 speaker-prepared.bip。

调整相机和环境

把 Product Hero 相机设置为 55 mm 焦距、距离 6,把当前环境旋转到 45 度,
保存新场景并渲染预览图。

fieldOfView 与 focalLength 不能同时使用。position 和 lookAt 可以省略, 但修改位置时必须成对提供。samples 与 maxTimeSeconds 对应不同渲染模式, 不能同时使用。

质量预设

预设

分辨率

采样

用途

preview

960 x 540

16

快速检查构图和材质

standard

1920 x 1080

64

keyshot_product_render 的默认值

final

3840 x 2160

256

高清最终输出

显式填写的 width、height 和 samples 会分别覆盖预设值;填写 maxTimeSeconds 会改用限时渲染。底层渲染工具在没有指定预设时保持原有行为。

工具

工具

用途

keyshot_status

检查本机配置、输出目录、预设和 KeyShot 启动状态。

keyshot_product_render

在一个进程中整理、保存并渲染模型或场景。

keyshot_preview_render

将临时或保留的 PNG 直接返回给 Agent 进行视觉检查。

keyshot_sync_saved_scene

安全同步最近保存的场景、检测变化并返回预览。

keyshot_inspect_scene

查看场景、对象、相机、材质、模型集和外部引用。

keyshot_list_cameras

返回场景中的相机名称。

keyshot_render

渲染当前或指定相机。

keyshot_render_queue

顺序执行多个独立渲染任务。

keyshot_batch_render

渲染选定的多个相机。

keyshot_render_all_cameras

自动发现并渲染全部相机。

keyshot_import_model

导入模型并保存为场景。

keyshot_apply_material

给指定对象应用材质名称或本地材质文件。

keyshot_list_material_presets

列出材质预设。

keyshot_apply_material_preset

给指定对象应用材质预设。

keyshot_set_camera

创建或修改相机位置、距离、视野角或焦距。

keyshot_list_camera_presets

列出标准与自定义相机预设。

keyshot_apply_camera_preset

根据预设创建或修改相机。

keyshot_set_environment

选择或调整环境、亮度和旋转。

keyshot_save_scene

将场景保存到受控输出路径。

服务还提供一个产品渲染 MCP Prompt,以及一个说明 headless 工作流程的 MCP Resource。 完整的 19 个工具参考由代码自动生成在 docs/TOOLS.md。 skills/keyshot-mcp 中的 Agent Skill 会指导兼容的 Agent 安装、 诊断并安全使用这些工具。

配置

环境变量

默认值

说明

KEYSHOT_HEADLESS_EXE

Windows 上为 keyshot_headless.exe

完整路径,或系统 PATH 中可执行的命令。

KEYSHOT_OUTPUT_DIR

<用户目录>/Documents/KeyShot MCP Outputs

渲染图和场景副本的根目录。

KEYSHOT_ALLOW_EXTERNAL_OUTPUTS

false

只有明确设为 true 时才允许写到输出根目录之外。

KEYSHOT_TIMEOUT_MS

600000

单次 KeyShot 进程超时时间。

KEYSHOT_LICENSE_ARGS

空

可选启动参数;诊断结果不会回显具体内容。

KEYSHOT_MATERIAL_PRESETS

内置 JSON

可选的用户材质预设文件。

KEYSHOT_CAMERA_PRESETS

内置 JSON

可选的用户相机预设文件。

所有 KeyShot 操作串行执行,减少许可证和文件冲突。输入模型和场景可以位于任意本地 路径;生成的场景和图片默认只能写入 KEYSHOT_OUTPUT_DIR。系统会拒绝 ..、同名前缀 目录以及符号链接或目录联接逃逸。

自动生成的产品输出遇到重名时会使用 -2、-3 等编号。用户明确填写的路径不会 被静默改名;支持 overwrite 的操作只有在明确开启后才覆盖文件。

相机与材质预设

内置相机库包含 Front、Back、Left、Right、Top、Bottom 和 Isometric 七个标准视角。 自定义相机 JSON 可使用标准视角,也可提供绝对 position、lookAt 和可选 up。

材质预设引用 KeyShot 材质库名称或本地材质文件。MCP 只读取预设文件,不自动修改。 格式示例见 presets。

可复现的 KeyShot Demo

仓库使用 examples/demo 中生成的立方体几何体进行 smoke test, 验证启动、导入构图、场景检查、相机预设、镜头控制、环境旋转、场景保存、相机发现、 一键产品出图和真实 PNG 输出。

npm run smoke:keyshot

生成的 .bip 和测试渲染图只保存在本地输出目录。仓库提供一张代表性结果:

KeyShot smoke test 渲染图

开发与测试

pnpm install --frozen-lockfile
pnpm run check
pnpm test
python -m unittest discover -s tests -p "test_*.py"
pnpm run format:check
python -m ruff check scripts tests
pnpm run docs:tools:check
node scripts/check-release.mjs
npm pack --dry-run

CI 在 Windows 和 Ubuntu 上使用 Node.js 20、24。Linux CI 验证 MCP 服务、bridge、 元数据和 npm 包,不表示 KeyShot 软件已经在 Linux 上通过实机测试。

社区与支持

不要在公开内容中附加客户场景、专有模型、许可证信息、账号凭据或保密渲染图。

路线图

  • 在更多受支持的 KeyShot 正式版本上完成实机验证。

  • 验证 macOS 安装和 headless 行为。

  • 在稳定 headless API 可用后增加景深和更多镜头控制。

许可证、安全与商标

项目采用 MIT License。安全报告方式见 SECURITY.md, 开发说明见 CONTRIBUTING.md。请勿提交许可证、私有场景、客户素材 或未公开渲染图。

KeyShot 是 KeyShot ApS 和/或 KeyShot Inc. 的商标。本项目是独立开源社区项目, 与 KeyShot 官方无隶属、认可、赞助或其他合作关系。用户必须自行安装并合法授权 KeyShot,同时遵守适用条款。不得使用本项目绕过许可证或重新分发 KeyShot 专有软件 及资源。

Available Tools

19 tools
keyshot_apply_camera_presetApply a camera presetA
Destructive

Create or update a saved camera from a configured standard-view or absolute camera preset, then save the edited scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
cameraNameNoOptional saved camera name. Defaults to the preset name.
presetNameYesCase-insensitive camera preset name returned by keyshot_list_camera_presets.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false. The description adds that it creates/updates a camera and saves the edited scene, confirming the mutation, but does not elaborate on what gets overwritten, auth needs, or rate limits.

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

Conciseness5/5

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

A single, front-loaded sentence with no redundant or filler content. Every clause earns its place.

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

Completeness4/5

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

Given a destructive write tool with an output schema and annotations that cover safety hints, the description states the core action and the save step. It is largely complete, though it omits how it relates to sibling camera tools.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are documented in the schema. The description mentions the preset concept but adds no meaning beyond the schema's parameter descriptions (e.g., cameraName default). Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: create or update a saved camera from a preset, then save the edited scene. Clear what the tool does, but does not differentiate it from siblings such as keyshot_set_camera or keyshot_save_scene.

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

Usage Guidelines3/5

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

Usage is implied by the operation, but the description provides no explicit when-to-use guidance, no alternatives (e.g., keyshot_set_camera), and no exclusions. An agent must infer the appropriate context.

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

keyshot_apply_materialApply a KeyShot materialB
Destructive

Apply a KeyShot library material or local material file to a specific object, then save the edited scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
objectNameNoScene object name to modify. Provide either objectName or the more specific objectPath.
objectPathNoFull scene-tree path of the object to modify. Use this instead of objectName when names are duplicated.
materialNameNoMaterial name from the local KeyShot library. Provide either materialName or materialPath.
materialPathNoAbsolute path to a local KeyShot material file. Provide either materialPath or materialName.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare a destructive, non-readonly write. The description adds that the tool automatically saves the edited scene, which is useful workflow context beyond the annotations. It still omits details such as overwrite behavior, authentication needs, or rate limits.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the action and outcome. There is no filler or redundant restatement.

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

Completeness4/5

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

With a rich input schema, annotations, and an output schema, the description is complete enough to convey the core mutation workflow. The only notable gap is usage routing to the sibling preset-based tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are fully documented in the input schema. The description adds no syntax, format, or constraint detail beyond what the schema already provides, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb ('apply') and resource ('KeyShot library material or local material file') on a specific object, plus a save step. It is clear, but it does not explicitly distinguish itself from the sibling keyshot_apply_material_preset, so it falls short of full sibling differentiation.

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

Usage Guidelines2/5

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

The description only says what the tool does; it gives no when-to-use guidance, no exclusions, and does not name keyshot_apply_material_preset or other alternatives. The agent must infer the routing conditions from the schema.

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

keyshot_apply_material_presetApply a material presetA
Destructive

Resolve a configured material preset, apply it to one scene object, and save a new scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
objectNameNoScene object name to modify. Provide either objectName or objectPath.
objectPathNoFull scene-tree path to modify. Prefer this when object names are duplicated.
presetNameYesCase-insensitive material preset name returned by keyshot_list_material_presets.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=false, so safety is covered structurally. The description adds useful workflow context ('resolve a preset', 'apply to one scene object', 'save a new scene'), signaling a new file rather than in-place edit, but it does not explain what is overwritten or what permissions/paths are required.

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

Conciseness4/5

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

A single front-loaded sentence that moves from resolution through application to the save outcome with no filler. It is efficient, though slightly terse given the tool's mutation semantics.

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

Completeness4/5

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

With a full input schema, an output schema, and annotations covering the safety profile, the description only needs to convey the workflow, which it does. The main residual gap is the absence of any mention of the sibling apply_material alternative.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters, including the objectName/objectPath alternative and the output-directory constraint. The description adds no syntax or format meaning beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

The description gives a specific verb sequence (resolve, apply, save) and names its resource (a material preset) and target (one scene object). It implicitly distinguishes itself from the sibling keyshot_apply_material by specifying presets, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: the mention of resolving a 'configured material preset' points the agent toward the preset workflow, but there is no explicit when-to-use, when-not-to-use, or comparison against keyshot_apply_material. Prerequisites such as having a preset listed are left to the schema.

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

keyshot_batch_renderRender selected camerasB
Destructive

Render an explicit list of saved cameras from one scene into an output directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoRender width in pixels. Overrides the selected quality preset when provided.
formatNoOutput image format. Defaults to PNG when omitted.
heightNoRender height in pixels. Overrides the selected quality preset when provided.
camerasYesSaved camera names to render in order. Use keyshot_list_cameras first when names are unknown.
samplesNoMaximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided.
outputDirYesDirectory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default.
overwriteNoWhether existing image files may be replaced. Defaults to false.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
qualityPresetNoRender quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).
maxTimeSecondsNoMaximum render time in seconds. Selects time-based rendering and cannot be combined with samples.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, non-idempotent, non-read-only, so the description should explain *how* it's destructive (overwriting existing files). It only implies writing into a directory and never mentions overwrite behavior, side effects, or that it is a heavy/long operation, adding little beyond the annotations.

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

Conciseness4/5

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

A single efficient sentence front-loads the verb and output. It is appropriately short, though slightly thin given the tool's complexity.

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

Completeness3/5

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

With an output schema present, return values needn't be explained, and the schema covers parameters fully. However, for a destructive batch render tool with many configurable options, the description omits overwrite/destructive behavior and alternative-tool routing, leaving notable gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all 10 parameters (cameras, outputDir, qualityPreset, samples, maxTimeSeconds, etc.) are fully documented in the schema. The description adds no parameter semantics beyond what the schema provides, so baseline 3 applies.

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

Purpose4/5

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

States a clear verb (render) and resource (explicit list of saved cameras) plus the destination (output directory). It distinguishes itself somewhat from siblings like keyshot_render_all_cameras (all vs. explicit list), though it does not name that distinction explicitly.

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

Usage Guidelines3/5

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

The word 'explicit list' implies you must already know camera names, and the schema notes to call keyshot_list_cameras first. But the description itself gives no when-to-use vs. keyshot_render_all_cameras or keyshot_render guidance.

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

keyshot_import_modelImport a model into KeyShotA
Destructive

Import a supported local model into an empty or base scene, apply requested composition options, and save a new scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelPathYesAbsolute path to a model file supported by KeyShot, such as OBJ, FBX, STL, or glTF.
snapToGroundNoAsk KeyShot to place imported geometry on the ground plane when supported.
baseScenePathNoOptional existing KeyShot scene to use as the import base. Omit to start from an empty scene.
centerGeometryNoAsk KeyShot to center imported geometry during import when supported.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.
adjustEnvironmentNoAsk KeyShot to adjust the environment to the imported geometry when supported.
adjustCameraLookAtNoAsk KeyShot to retarget the active camera to the imported geometry when supported.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the safety profile (destructiveHint=true, idempotentHint=false), so the description only needs to enrich it. It does add that a new scene is written, but it does not state what gets destroyed (does it overwrite an existing outputScenePath file?), that the operation is not idempotent, or any failure behavior. Some added value, but the destructive consequence is left implicit.

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

Conciseness5/5

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

A single front-loaded sentence that sequences the three actions (import, compose, save) with no filler or repetition. Every clause carries information.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the 100%-covered schema carries the parameter burden. What is missing is the mutation-risk context an agent needs for a destructive, non-idempotent tool: overwrite semantics for outputScenePath, whether an existing scene is replaced, and any environmental prerequisites.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented with meaning and constraints (model formats, KEYSHOT_OUTPUT_DIR rule, 'when supported' caveats). The description only gestures at 'requested composition options', which adds no semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a concrete verb+resource ('Import a supported local model') and scopes it to a specific target ('empty or base scene') followed by a save step, so an agent can distinguish it from the render/material/camera siblings. It does not explicitly name which sibling to use instead for plain scene saving, so it falls just short of a 5.

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

Usage Guidelines3/5

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

The phrase 'into an empty or base scene' plus the baseScenePath semantics implies when this tool applies (starting a new scene), but there is no explicit when-not guidance, no mention of prerequisites (e.g. KeyShot must be running, scene must not be locked), and no pointer to keyshot_save_scene for simple save cases. Usage is inferable rather than stated.

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

keyshot_inspect_sceneInspect a KeyShot sceneB
Read-onlyIdempotent

Open a scene read-only and return metadata, objects, cameras, material assignments, model sets, and external references.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description's 'read-only' merely restates that, but it does add useful behavioral detail about what gets returned (including external references), which is more than the annotations provide.

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

Conciseness5/5

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

One sentence, front-loaded with the action and scope, with the return contents enumerated compactly. Nothing is wasted or buried.

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

Completeness4/5

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

With a rich annotation set, a fully documented single parameter, and an output schema present, the description need not explain return values or safety. The only shortfall is the absence of routing guidance relative to sibling inspection tools.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter's description is thorough, including that input files may lie outside the configured output directory. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description pairs a specific verb ('Open ... read-only') with the resource ('a KeyShot scene') and enumerates the returned payload (metadata, objects, cameras, material assignments, model sets, external references). This is clearly distinct from siblings like keyshot_list_cameras or keyshot_status, though it never explicitly names those alternatives.

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

Usage Guidelines2/5

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

Usage is only implied by 'read-only' — an agent can infer this is for non-mutating inspection. There is no statement of when to prefer this over keyshot_list_cameras, keyshot_status, or keyshot_sync_saved_scene, and no prerequisites or exclusions are given.

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

keyshot_list_camera_presetsList camera presetsA
Read-onlyIdempotent

Read the configured camera preset JSON and return valid standard or absolute camera presets without opening KeyShot.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world. The description adds real value beyond them by stating it reads a pre-configured preset JSON file and requires no KeyShot session — a meaningful operational precondition. It stops short of describing failure modes (malformed/missing JSON) or how 'valid' is determined.

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

Conciseness5/5

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

A single front-loaded sentence with no filler: the action, the source, the output, and the offline constraint are all packed in without redundancy.

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

Completeness4/5

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

With an output schema present and rich annotations, the description need not explain return values, and it covers the read-only, offline nature of the call. The remaining ambiguity is the source/configuration of the preset JSON, which leaves a minor gap for an agent deciding whether results will be current.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The description correctly implies no inputs are needed, though it does not explain where the 'configured camera preset JSON' comes from or whether it is user-supplied configuration.

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

Purpose4/5

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

The description states a specific verb and resource — reads the configured camera preset JSON and returns valid standard or absolute camera presets — which is distinct from siblings like keyshot_list_cameras and keyshot_apply_camera_preset. It is clear, though it never explicitly names which sibling to prefer when an agent wants live camera data rather than stored presets.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is a discovery step before keyshot_apply_camera_preset, and the 'without opening KeyShot' clause hints at the offline precondition. There is no explicit when-to-use or when-not-to-use guidance versus keyshot_list_cameras or keyshot_inspect_scene.

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

keyshot_list_camerasList scene camerasA
Read-onlyIdempotent

Return saved camera names without saving changes. Use this before selected-camera rendering when names are unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description's 'without saving changes' merely restates that, and it adds no other behavioral detail (no note that the scene file is opened, no output/ordering info).

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

Conciseness4/5

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

Two short, front-loaded sentences with no padding. The clause 'without saving changes' is slightly redundant against the annotations, costing it the top score.

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

Completeness4/5

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

For a single-parameter read-only list tool with a full output schema and complete annotations, the description supplies what it does and when to use it. Minor gap: it does not mention that the scene is opened as a side effect of passing scenePath.

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

Parameters4/5

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

Only one parameter with 100% schema description coverage, so the baseline is 4. The description adds nothing about scenePath, but the schema already explains it as an absolute path to an existing scene file.

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

Purpose4/5

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

States a specific verb and resource ('Return saved camera names') and implicitly distinguishes scene cameras from the sibling keyshot_list_camera_presets by saying 'saved camera names'. Clear to an agent, though it never explicitly names the preset-list sibling as the alternative.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use condition: 'Use this before selected-camera rendering when names are unknown.' That is actionable context, but there is no when-not guidance and no mention of the camera-preset alternative.

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

keyshot_list_material_presetsList material presetsA
Read-onlyIdempotent

Read the configured local material preset JSON and return valid preset names and material sources without opening KeyShot.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing the source of truth (local preset JSON config) and that no KeyShot instance is required, which the annotations do not convey.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. The verb comes first and the offline constraint is packed into the same clause, so every word earns its place.

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

Completeness4/5

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

With an output schema present, the description need not document return values, and it still summarizes them ('valid preset names and material sources'). For a zero-parameter read tool this is essentially complete; only an explicit alternative-tool pointer is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly does not invent or omit any parameter detail.

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

Purpose4/5

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

States a specific verb ('Read') and resource ('configured local material preset JSON') with the output scope ('valid preset names and material sources'). This clearly separates it from the mutation-oriented siblings like keyshot_apply_material_preset, though it never names that sibling explicitly.

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

Usage Guidelines3/5

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

'...without opening KeyShot' implies the usage context (offline, no live app needed), which is a real hint. However, it gives no explicit when-to-use vs the apply_material_preset or other list_* siblings, so the agent must infer the routing.

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

keyshot_preview_renderRender an Agent-visible previewA
Read-onlyIdempotent

Render a bounded PNG preview from an existing scene and return it directly as MCP image content. Temporary previews are deleted after embedding; an optional safe output path preserves a copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoPreview width in pixels. Defaults to 960; allowed range is 64 to 1920.
cameraNoOptional saved camera name to activate for the preview. Omit to use the scene's active camera.
heightNoPreview height in pixels. Defaults to 540; allowed range is 64 to 1080.
samplesNoPreview render samples. Defaults to 16 unless maxTimeSeconds is provided; maximum is 64.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
outputPathNoOptional .png destination inside KEYSHOT_OUTPUT_DIR. Existing files are never overwritten. When omitted, a temporary preview is embedded and deleted.
maxTimeSecondsNoTime-based preview limit in seconds. Replaces the default sample mode and cannot be combined with an explicit samples value; maximum is 60.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real lifecycle context beyond them — temporary previews are deleted after embedding, and an optional safe output path preserves a copy. It stops short of naming the 'never overwrites existing files' rule that lives in the schema.

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

Conciseness5/5

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

Two dense sentences with no filler, front-loading what the tool produces before the lifecycle caveat. Every clause earns its place.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and annotations plus schema cover safety and parameters. The only gap is prerequisites (e.g. scene must exist, KeyShot running), which an agent must infer from the required scenePath.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented with defaults, ranges and constraints; the description only echoes outputPath preservation at a high level. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb+resource ('Render a bounded PNG preview from an existing scene') and the delivery mechanism ('return it directly as MCP image content'). The word 'preview' plus 'bounded' separates it from full renders like keyshot_render, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied through 'preview' and the temporary-vs-persisted output choice, but the description never states when to prefer this over keyshot_render, keyshot_product_render, or keyshot_render_queue. No explicit when/when-not guidance is given.

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

keyshot_product_renderPrepare and render a productC
Destructive

Run a complete product workflow in one headless process: open or import, assign materials, configure camera and environment, save a scene copy, and render one or all cameras.

ParametersJSON Schema
NameRequiredDescriptionDefault
upNoOptional camera up direction [x, y, z]. Requires position and lookAt.
widthNoRender width in pixels. Overrides the selected quality preset when provided.
formatNoOutput image format. Defaults to PNG when omitted.
heightNoRender height in pixels. Overrides the selected quality preset when provided.
lookAtNoCamera target [x, y, z]. Must be provided together with position.
samplesNoMaximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided.
distanceNoPositive KeyShot camera distance applied after the transform or preset.
positionNoCamera position [x, y, z]. Must be provided together with lookAt.
rotationNoEnvironment rotation in degrees, from 0 inclusive to 360 exclusive.
modelPathNoAbsolute path to a model to import. Provide exactly one modelPath or scenePath.
outputDirNoAll-cameras output directory. Invalid with single mode; a safe directory is generated when omitted.
overwriteNoAllow replacement of explicitly selected output files. Defaults to false.
scenePathNoAbsolute path to an existing KeyShot scene. Provide exactly one scenePath or modelPath.
brightnessNoPositive brightness multiplier for the active environment.
cameraNameNoCamera to create, update, or activate. New model workflows default to Product Hero.
outputPathNoSingle-mode image destination. Invalid with allCameras mode; a safe name is generated when omitted.
renderModeNoRender one active or named camera, or discover and render every saved camera. Defaults to single.single
fieldOfViewNoCamera field of view in degrees, greater than 0 and less than 180. Cannot be combined with focalLength.
focalLengthNoCamera focal length from 5 to 200 mm. Cannot be combined with fieldOfView.
snapToGroundNoPlace imported geometry on the ground. Applies only to modelPath sources and defaults to true for new models.
baseScenePathNoOptional KeyShot base scene used only when modelPath is provided.
qualityPresetNoRender quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).
centerGeometryNoCenter imported geometry. Applies only to modelPath sources and defaults to true for new models.
maxTimeSecondsNoMaximum render time in seconds. Selects time-based rendering and cannot be combined with samples.
continueOnErrorNoIn allCameras mode, continue after one camera fails. Defaults to true.
environmentNameNoEnvironment name from the KeyShot library. Cannot be combined with environmentPath.
environmentPathNoAbsolute path to a local KeyShot environment file. Cannot be combined with environmentName.
outputScenePathNoDestination for the prepared scene. A safe numbered name is generated when omitted.
cameraPresetNameNoConfigured camera preset to apply. Cannot be combined with a custom position/lookAt pair.
adjustEnvironmentNoAdjust the environment after model import. Applies only to modelPath sources and defaults to true for new models.
adjustCameraLookAtNoRetarget the camera after model import. Applies only to modelPath sources and defaults to true for new models.
materialAssignmentsNoObject-specific material changes applied before camera and environment setup.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and idempotentHint=false, but the description never discloses the destructive side effects (overwriting output/scene files), the overwrite=false default behavior, or that this is a long-running headless render process. With zero annotation-adjacent context, the burden falls fully on the description, which omits the risk profile and runtime expectations.

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

Conciseness4/5

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

A single front-loaded sentence listing the workflow stages in order. It is efficient and does not pad, though the keyword-less phrasing gives the agent little to filter on when scanning tools.

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

Completeness3/5

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

For a 32-parameter destructive orchestration tool, the description is minimal. An output schema exists, so return values need not be explained, but the description omits the destructive behavior, the relationship to granular siblings, and the practical implication of overwrite/output path generation.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 32 parameters is already documented in the schema, including mutually exclusive constraints (scenePath/modelPath, samples/maxTimeSeconds, environmentName/environmentPath). The description adds only the high-level stage ordering, not per-parameter semantics, so it sits at the baseline.

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

Purpose4/5

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

States a specific verb+resource ('Run a complete product workflow... render one or all cameras') and enumerates the pipeline stages. However, it does not differentiate from siblings like keyshot_render, keyshot_import_model, or keyshot_apply_material, which it subsumes, leaving the agent unsure why to pick this orchestration tool over the granular ones.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is given. The description does not mention that this bundles the workflow of the sibling tools, nor when a caller should prefer the single-purpose tools (import, material, camera, render) instead. The agent must infer selection purely from the name.

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

keyshot_renderRender one KeyShot viewC
Destructive

Render the active or a named camera from an existing scene to an image file.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoRender width in pixels. Overrides the selected quality preset when provided.
cameraNoOptional saved camera name to activate before rendering. Omit to use the scene's active camera.
formatNoOutput image format. Defaults to PNG when omitted.
heightNoRender height in pixels. Overrides the selected quality preset when provided.
samplesNoMaximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
outputPathNoDestination image path. When omitted, a PNG name is generated inside KEYSHOT_OUTPUT_DIR.
qualityPresetNoRender quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).
maxTimeSecondsNoMaximum render time in seconds. Selects time-based rendering and cannot be combined with samples.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, but the description says nothing about overwriting an existing outputPath, permission requirements, or what a render run actually modifies. With annotations carrying the safety profile, the description should at least flag the overwrite/queue behavior, and it does not.

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

Conciseness4/5

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

A single front-loaded sentence with no waste, though it is arguably thin for a nine-parameter rendering tool rather than optimally sized.

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

Completeness2/5

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

For a nine-parameter, non-idempotent render tool with several near-identical siblings, an output schema and rich annotations, the description leaves the agent without routing guidance or output/overwrite semantics. The schema and output schema cover the mechanical details, but the definition does not fill the remaining gaps.

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

Parameters3/5

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

Schema coverage is 100% and every parameter, including enums for format and qualityPreset and mutual exclusions for samples/maxTimeSeconds, is documented in the schema. The description adds no parameter meaning beyond it, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (render) and resource (active or named camera from an existing scene) with the output being an image file. It does not, however, distinguish itself from the many sibling render tools (preview_render, product_render, batch_render, render_all_cameras), so the agent must infer the boundary.

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

Usage Guidelines2/5

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

No when-to-use guidance and no mention of alternatives, despite five sibling tools that also render. An agent cannot tell from this sentence why it would pick keyshot_render over keyshot_preview_render or keyshot_render_all_cameras.

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

keyshot_render_all_camerasRender all scene camerasA
Destructive

Discover every saved camera and render each view in one headless process with collision-safe file names and per-camera results.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoRender width in pixels. Overrides the selected quality preset when provided.
formatNoOutput image format. Defaults to PNG when omitted.
heightNoRender height in pixels. Overrides the selected quality preset when provided.
samplesNoMaximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided.
outputDirYesDirectory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default.
overwriteNoWhether existing image files may be replaced. Defaults to false.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
qualityPresetNoRender quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).
maxTimeSecondsNoMaximum render time in seconds. Selects time-based rendering and cannot be combined with samples.
continueOnErrorNoContinue rendering remaining cameras after one camera fails. Defaults to true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the mutation/safety profile is covered. The description still adds non-obvious behavior beyond that: collision-safe file naming, a single headless process, and per-camera results. It does not explain the overwrite semantics tied to the destructive hint, which is the one notable gap.

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

Conciseness5/5

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

A single dense sentence, front-loaded with the verb and resource, that carries the batch scope, execution model, and output behavior without filler. Nothing is redundant with the title or schema.

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

Completeness3/5

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

An output schema exists, so return values (per-camera results) need not be re-explained, and annotations cover the safety profile. What remains thin is routing guidance among the many sibling render tools and the destructive-overwrite relationship, so the definition is adequate but not complete for a 10-parameter tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents width, height, samples, maxTimeSeconds, overwrite, continueOnError, and the rest. The description adds no parameter-level semantics (no default format, no preset/sample interaction), so it sits at the baseline for fully documented schemas.

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

Purpose5/5

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

States a specific verb (render) and resource (every saved camera in the scene), scoping it as a whole-scene operation. This distinguishes it from keyshot_render (single render), keyshot_list_cameras (discovery only), and keyshot_batch_render without needing to open any schema.

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

Usage Guidelines3/5

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

The phrase 'render each view in one headless process' implies the batch/campaign use case, but there is no explicit when-to-use vs. keyshot_render, keyshot_preview_render, or keyshot_batch_render, and no stated prerequisites or exclusions. Usage is left to inference from the name.

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

keyshot_render_queueRun a sequential render queueA
Destructive

Render independent scene and camera jobs sequentially so KeyShot processes do not compete for a license or output files.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobsYesRender jobs executed sequentially to avoid KeyShot license and output conflicts.
continueOnErrorNoContinue with later jobs after a failure. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, non-idempotent, non-read-only, so the safety profile is carried by structured data. The description adds genuinely useful context (serial execution to avoid license/output contention) but says nothing about what destruction actually means here — e.g. whether existing files at outputPath are overwritten, or that failure stops the queue by default.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the operative behavior (sequential execution) and its reason are both delivered immediately.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, for a destructive, non-idempotent queue tool whose key semantics (overwriting outputs, default stop-on-error, ordering guarantees) live only in schema defaults, the description is thinner than the complexity warrants.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents scenePath, outputPath, camera, qualityPreset, samples/maxTimeSeconds exclusivity, etc. The description adds no parameter-level detail, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Render ... jobs'), and the adverb 'sequentially' plus 'independent scene and camera jobs' distinguishes it from a single-render tool. It does not name the close siblings (keyshot_batch_render, keyshot_render_all_cameras) it most resembles, so the distinction is implicit rather than explicit.

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

Usage Guidelines3/5

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

The rationale 'so KeyShot processes do not compete for a license or output files' implies when to choose this over firing off parallel renders, but no explicit when-to-use or when-not-to-use guidance against the sibling render tools is given.

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

keyshot_save_sceneSave a KeyShot scene copyB
Destructive

Open an existing scene and save a copy to a requested path inside the configured safe output directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds useful scoping context (the safe output directory, input files allowed outside it) but never explains what is destructive — e.g. whether an existing file at outputScenePath is overwritten — which is the key behavior the destructive hint flags.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. The operation and its destination constraint come first, and nothing is wasted.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and both required parameters are covered. The only real gap is the unaddressed destructive behavior (overwrite semantics), which matters given destructiveHint=true.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already fully documented in the schema, including the output-directory restriction. The description's mention of the safe output directory restates that constraint rather than adding new meaning; baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb pair (open + save a copy) and the resource (KeyShot scene), plus the destination constraint. It is clear what the tool does, though it does not explicitly distinguish itself from the similar-sounding sibling keyshot_sync_saved_scene.

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

Usage Guidelines2/5

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

No when-to-use guidance is given, and no alternatives are named. The presence of a sibling named keyshot_sync_saved_scene makes the omission notable, since an agent must guess which one applies to its situation.

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

keyshot_set_cameraSet a KeyShot cameraB
Destructive

Create or update a named camera using position, target, distance, field of view, or focal length, then save the edited scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
upNoOptional camera up direction [x, y, z]. Requires position and lookAt.
lookAtNoCamera target [x, y, z]. Must be provided together with position.
distanceNoPositive KeyShot camera distance.
positionNoCamera position [x, y, z]. Must be provided together with lookAt.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
cameraNameNoSaved camera to update, or the name to use when creating a camera.
fieldOfViewNoField of view in degrees, greater than 0 and less than 180. Cannot be combined with focalLength.
focalLengthNoFocal length from 5 to 200 mm. Cannot be combined with fieldOfView.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare the write/destructive/idempotent profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the bar is lower. The description adds the useful side-effect that the scene is saved, but does not disclose what destructiveHint means here (e.g., an existing camera of the same cameraName being overwritten, or outputScenePath being clobbered).

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

Conciseness4/5

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

A single tight sentence with the action front-loaded and no filler. It could arguably be split to front-load the required scenePath/outputScenePath behavior, but nothing is wasted.

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

Completeness3/5

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

With 9 parameters, full schema coverage, an output schema, and rich annotations, the definition is adequate but thin: it omits the required input/output scene paths, the cameraName update-vs-create semantics, and the optional 'up' vector, so an agent still needs the schema to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including mutual exclusions (fieldOfView vs focalLength, position+lookAt coupling). The description only restates a subset of these fields in prose and adds no format or constraint detail beyond the schema.

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

Purpose4/5

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

The description states a specific verb+resource pair ('Create or update a named camera') and enumerates the geometry inputs (position, target, distance, FOV, focal length), plus the save step. It is clearly distinguishable from list/inspect/preset siblings, though it never names an alternative directly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no routing against the obvious alternatives (keyshot_apply_camera_preset, keyshot_list_cameras, keyshot_apply_camera_preset). The agent is left to infer when creating a custom camera beats applying a preset.

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

keyshot_set_environmentSet the KeyShot environmentB
Destructive

Select an environment by library name or local file, optionally change brightness and rotation, and save the edited scene.

ParametersJSON Schema
NameRequiredDescriptionDefault
rotationNoEnvironment rotation in degrees, from 0 inclusive to 360 exclusive.
scenePathYesAbsolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory.
brightnessNoPositive brightness multiplier for the active environment.
environmentNameNoEnvironment name from the KeyShot library. Cannot be combined with environmentPath.
environmentPathNoAbsolute path to a local KeyShot environment file. Cannot be combined with environmentName.
outputScenePathYesDestination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=true and non-idempotent, so the safety profile is partly covered. The description adds the open-edit-save flow ('save the edited scene'), but with destructiveHint=true it should disclose what the save overwrites or clobbers; that risk is never mentioned.

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

Conciseness5/5

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

A single front-loaded sentence that packs the selection modes, the optional edits, and the save step with zero filler. Nothing here is redundant or buried.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the 100%-covered schema carries the parameter detail. The remaining gap is that the required scenePath/outputScenePath workflow and destructive overwrite behavior are not surfaced in the description.

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

Parameters3/5

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

Schema coverage is 100%, so brightness, rotation, environmentName/environmentPath and the scene paths are fully documented in the schema. The description only restates the same concepts at a higher level and adds no syntax, defaults, or interaction rules beyond the schema.

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

Purpose4/5

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

The description names a specific verb+resource ('Select an environment') and enumerates the two selection modes plus the optionals it also mutates (brightness, rotation) and the save step. It is clearly distinct from render/material/camera siblings, though it never names a sibling to differentiate itself.

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

Usage Guidelines2/5

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

It describes what the tool does but gives no when-to-use guidance, no prerequisites (scene must exist, output dir constraints), and no exclusions. The mutual exclusivity of environmentName/environmentPath is left entirely to the schema.

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

keyshot_statusCheck KeyShot MCP statusA
Read-onlyIdempotent

Diagnose the local installation, output access, presets, bridge files, and a minimal KeyShot headless startup without modifying a user scene.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious context beyond those: it performs a 'minimal KeyShot headless startup' yet does so 'without modifying a user scene', which tells the agent a process launch occurs as part of a supposedly read-only check.

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

Conciseness5/5

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

A single front-loaded sentence with the verb first and the checked areas enumerated compactly. No filler, no restatement of the title.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description fully covers what is probed and confirms the non-destructive guarantee. The only gap is the absence of guidance on when this check should be triggered relative to the render siblings.

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

Parameters4/5

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

The tool takes zero parameters, so the schema imposes no semantic burden and the baseline of 4 applies. Nothing in the description conflicts with the empty parameter object.

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

Purpose5/5

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

States a specific verb (diagnose) and enumerates the exact resources checked: installation, output access, presets, bridge files, and headless startup. This clearly separates it from every sibling, which are render/scene/material/camera operations.

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

Usage Guidelines3/5

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

The diagnostic framing implies this is a pre-flight/health-check tool, but the description never states when to run it (before renders? on failure?) or names any alternative. Usage must be inferred from the name and scope.

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

keyshot_sync_saved_sceneSync the latest saved KeyShot sceneA
Destructive

Find a saved .bip file (or the newest .bip in one folder), detect whether it changed, copy it to a collision-safe output path, and optionally return an Agent-visible preview. This is the stable alternative to unsupported persistent GUI control.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoPreview width in pixels. Defaults to 960; allowed range is 64 to 1920.
cameraNoOptional saved camera name for the embedded preview. Omit to use the scene's active camera.
heightNoPreview height in pixels. Defaults to 540; allowed range is 64 to 1080.
samplesNoPreview render samples. Defaults to 16 unless maxTimeSeconds is provided; maximum is 64.
sourcePathYesAbsolute path to a saved .bip scene or a directory whose newest .bip scene should be synchronized. Directories are searched only at their top level.
includePreviewNoWhether to render and embed a temporary PNG from the synchronized copy. Defaults to true.
maxTimeSecondsNoTime-based preview limit in seconds. Replaces the default sample mode and cannot be combined with an explicit samples value; maximum is 60.
outputScenePathNoOptional destination for the synchronized .bip copy inside KEYSHOT_OUTPUT_DIR. Existing explicit paths are never overwritten; when omitted, a collision-safe name is generated.
previousFingerprintNoOptional fingerprint returned by an earlier sync. When it still matches, no copy or preview is created.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the requested operation completed successfully.
dataYesOperation-specific structured result data, or null when unavailable.
errorYesHuman-readable failure reason, or null after success.
warningsYesNon-fatal conditions the user or agent should review.
errorCodeNoStable error category for common failures.
outputFilesYesAbsolute paths of images or scene files created by the operation.
suggestionsNoActionable recovery steps for the user or agent.
keyshotStdoutTailYesTruncated tail of KeyShot headless output for diagnostics.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is partly covered. The description adds useful behavioral context (change detection, collision-safe naming, Agent-visible preview), but it never explains what is actually written or mutated on disk or where KEYSHOT_OUTPUT_DIR fits, which is exactly the gap the destructive hint raises.

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

Conciseness4/5

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

Two sentences, both front-loaded and free of filler: the first gives the operation pipeline, the second gives the positioning rationale. It is well sized for a 9-parameter tool, though the first sentence is a fairly dense compound clause.

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

Completeness4/5

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

With a full output schema and 100% parameter coverage, the description need not explain return values, and it correctly covers the core flow plus fingerprint-based skipping. It is nearly complete, missing only explicit guidance on the destructive/write side effects the annotations imply.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already fully documented; baseline is 3. The description only restates the sourcePath dual behavior (file vs. newest .bip in a folder), adding no syntax or format detail beyond the schema.

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

Purpose4/5

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

The description names a specific verb (sync) and resource (saved .bip scene) and enumerates the operation's concrete steps: locate the file, detect change, copy to a collision-safe path, optionally preview. It is clear what the tool does, though it does not name any sibling tool (e.g. keyshot_save_scene or keyshot_inspect_scene) to sharpen differentiation.

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

Usage Guidelines3/5

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

"This is the stable alternative to unsupported persistent GUI control" implies when to reach for it, but there is no explicit when-not guidance and no sibling is named as the alternative. The agent must infer selection from the phrasing alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv0.13.0
    • Changedkeyshot_apply_camera_preset4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_apply_material4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_apply_material_preset4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_batch_render7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / samples / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / width / maximum
        Added value: +9007199254740991
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_import_model4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_inspect_scene4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_list_camera_presets4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_list_cameras4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_list_material_presets4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_preview_render4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_product_render14 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / lookAt / items
        Previous value: -[
        -  {
        -    "$ref": "#/properties/position/items/0"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/1"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/2"
        -  }
        -]New value: +false
      • addedInput schema / properties / lookAt / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / materialAssignments / items / additionalProperties
        Removed value: -false
      • changedInput schema / properties / position / items
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]New value: +false
      • addedInput schema / properties / position / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • addedInput schema / properties / samples / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / up / items
        Previous value: -[
        -  {
        -    "$ref": "#/properties/position/items/0"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/1"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/2"
        -  }
        -]New value: +false
      • addedInput schema / properties / up / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • addedInput schema / properties / width / maximum
        Added value: +9007199254740991
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_render7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / samples / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / width / maximum
        Added value: +9007199254740991
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_render_all_cameras7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / height / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / samples / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / width / maximum
        Added value: +9007199254740991
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_render_queue8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / jobs / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / jobs / items / properties / height / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / jobs / items / properties / samples / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / jobs / items / properties / width / maximum
        Added value: +9007199254740991
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_save_scene4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_set_camera10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / lookAt / items
        Previous value: -[
        -  {
        -    "$ref": "#/properties/position/items/0"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/1"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/2"
        -  }
        -]New value: +false
      • addedInput schema / properties / lookAt / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedInput schema / properties / position / items
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]New value: +false
      • addedInput schema / properties / position / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedInput schema / properties / up / items
        Previous value: -[
        -  {
        -    "$ref": "#/properties/position/items/0"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/1"
        -  },
        -  {
        -    "$ref": "#/properties/position/items/2"
        -  }
        -]New value: +false
      • addedInput schema / properties / up / prefixItems
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_set_environment4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_status4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
    • Changedkeyshot_sync_saved_scene4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / required
        Previous value: -[
        -  "ok",
        -  "outputFiles",
        -  "warnings",
        -  "keyshotStdoutTail",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "data",
        +  "outputFiles",
        +  "warnings",
        +  "keyshotStdoutTail",
        +  "error"
        +]
  2. 1 tool updatev0.11.0
    • Addedkeyshot_sync_saved_scene
  3. 18 tool updatesv0.10.0
    • Changedkeyshot_apply_camera_preset5 fields changed
      • addedInput schema / properties / cameraName / description
        Added value: +"Optional saved camera name. Defaults to the preset name."
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / presetName / description
        Added value: +"Case-insensitive camera preset name returned by keyshot_list_camera_presets."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_apply_material7 fields changed
      • addedInput schema / properties / materialName / description
        Added value: +"Material name from the local KeyShot library. Provide either materialName or materialPath."
      • addedInput schema / properties / materialPath / description
        Added value: +"Absolute path to a local KeyShot material file. Provide either materialPath or materialName."
      • addedInput schema / properties / objectName / description
        Added value: +"Scene object name to modify. Provide either objectName or the more specific objectPath."
      • addedInput schema / properties / objectPath / description
        Added value: +"Full scene-tree path of the object to modify. Use this instead of objectName when names are duplicated."
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_apply_material_preset6 fields changed
      • addedInput schema / properties / objectName / description
        Added value: +"Scene object name to modify. Provide either objectName or objectPath."
      • addedInput schema / properties / objectPath / description
        Added value: +"Full scene-tree path to modify. Prefer this when object names are duplicated."
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / presetName / description
        Added value: +"Case-insensitive material preset name returned by keyshot_list_material_presets."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_batch_render11 fields changed
      • addedInput schema / properties / cameras / description
        Added value: +"Saved camera names to render in order. Use keyshot_list_cameras first when names are unknown."
      • addedInput schema / properties / format / description
        Added value: +"Output image format. Defaults to PNG when omitted."
      • addedInput schema / properties / height / description
        Added value: +"Render height in pixels. Overrides the selected quality preset when provided."
      • addedInput schema / properties / maxTimeSeconds / description
        Added value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples."
      • addedInput schema / properties / outputDir / description
        Added value: +"Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default."
      • addedInput schema / properties / overwrite / description
        Added value: +"Whether existing image files may be replaced. Defaults to false."
      • addedInput schema / properties / qualityPreset
        Added value: +{
        +  "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).",
        +  "enum": [
        +    "preview",
        +    "standard",
        +    "final"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / samples / description
        Added value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • addedInput schema / properties / width / description
        Added value: +"Render width in pixels. Overrides the selected quality preset when provided."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_import_model8 fields changed
      • addedInput schema / properties / adjustCameraLookAt
        Added value: +{
        +  "description": "Ask KeyShot to retarget the active camera to the imported geometry when supported.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / adjustEnvironment
        Added value: +{
        +  "description": "Ask KeyShot to adjust the environment to the imported geometry when supported.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / baseScenePath / description
        Added value: +"Optional existing KeyShot scene to use as the import base. Omit to start from an empty scene."
      • addedInput schema / properties / centerGeometry
        Added value: +{
        +  "description": "Ask KeyShot to center imported geometry during import when supported.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / modelPath / description
        Added value: +"Absolute path to a model file supported by KeyShot, such as OBJ, FBX, STL, or glTF."
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / snapToGround
        Added value: +{
        +  "description": "Ask KeyShot to place imported geometry on the ground plane when supported.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_inspect_scene2 fields changed
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_list_camera_presets2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_list_cameras2 fields changed
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_list_material_presets2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Addedkeyshot_preview_render
    • Addedkeyshot_product_render
    • Changedkeyshot_render10 fields changed
      • addedInput schema / properties / camera / description
        Added value: +"Optional saved camera name to activate before rendering. Omit to use the scene's active camera."
      • addedInput schema / properties / format / description
        Added value: +"Output image format. Defaults to PNG when omitted."
      • addedInput schema / properties / height / description
        Added value: +"Render height in pixels. Overrides the selected quality preset when provided."
      • addedInput schema / properties / maxTimeSeconds / description
        Added value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples."
      • addedInput schema / properties / outputPath / description
        Added value: +"Destination image path. When omitted, a PNG name is generated inside KEYSHOT_OUTPUT_DIR."
      • addedInput schema / properties / qualityPreset
        Added value: +{
        +  "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).",
        +  "enum": [
        +    "preview",
        +    "standard",
        +    "final"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / samples / description
        Added value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • addedInput schema / properties / width / description
        Added value: +"Render width in pixels. Overrides the selected quality preset when provided."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_render_all_cameras11 fields changed
      • addedInput schema / properties / continueOnError / description
        Added value: +"Continue rendering remaining cameras after one camera fails. Defaults to true."
      • addedInput schema / properties / format / description
        Added value: +"Output image format. Defaults to PNG when omitted."
      • addedInput schema / properties / height / description
        Added value: +"Render height in pixels. Overrides the selected quality preset when provided."
      • addedInput schema / properties / maxTimeSeconds / description
        Added value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples."
      • addedInput schema / properties / outputDir / description
        Added value: +"Directory for generated render files. Relative paths resolve inside KEYSHOT_OUTPUT_DIR; external paths are rejected by default."
      • addedInput schema / properties / overwrite / description
        Added value: +"Whether existing image files may be replaced. Defaults to false."
      • addedInput schema / properties / qualityPreset
        Added value: +{
        +  "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).",
        +  "enum": [
        +    "preview",
        +    "standard",
        +    "final"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / samples / description
        Added value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • addedInput schema / properties / width / description
        Added value: +"Render width in pixels. Overrides the selected quality preset when provided."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_render_queue12 fields changed
      • addedInput schema / properties / continueOnError / description
        Added value: +"Continue with later jobs after a failure. Defaults to false."
      • addedInput schema / properties / jobs / description
        Added value: +"Render jobs executed sequentially to avoid KeyShot license and output conflicts."
      • addedInput schema / properties / jobs / items / properties / camera / description
        Added value: +"Optional saved camera name for this job. Omit to use the active camera."
      • addedInput schema / properties / jobs / items / properties / format / description
        Added value: +"Output image format. Defaults to PNG when omitted."
      • addedInput schema / properties / jobs / items / properties / height / description
        Added value: +"Render height in pixels. Overrides the selected quality preset when provided."
      • addedInput schema / properties / jobs / items / properties / maxTimeSeconds / description
        Added value: +"Maximum render time in seconds. Selects time-based rendering and cannot be combined with samples."
      • addedInput schema / properties / jobs / items / properties / outputPath / description
        Added value: +"Destination image path for this queue job. A safe output name is generated when omitted."
      • addedInput schema / properties / jobs / items / properties / qualityPreset
        Added value: +{
        +  "description": "Render quality preset: preview (960x540, 16 samples), standard (1920x1080, 64 samples), or final (3840x2160, 256 samples).",
        +  "enum": [
        +    "preview",
        +    "standard",
        +    "final"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / jobs / items / properties / samples / description
        Added value: +"Maximum render samples. Cannot be combined with maxTimeSeconds and overrides preset sampling when provided."
      • addedInput schema / properties / jobs / items / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • addedInput schema / properties / jobs / items / properties / width / description
        Added value: +"Render width in pixels. Overrides the selected quality preset when provided."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_save_scene3 fields changed
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_set_camera21 fields changed
      • addedInput schema / properties / cameraName / description
        Added value: +"Saved camera to update, or the name to use when creating a camera."
      • addedInput schema / properties / distance / description
        Added value: +"Positive KeyShot camera distance."
      • addedInput schema / properties / fieldOfView
        Added value: +{
        +  "description": "Field of view in degrees, greater than 0 and less than 180. Cannot be combined with focalLength.",
        +  "exclusiveMaximum": 180,
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / focalLength
        Added value: +{
        +  "description": "Focal length from 5 to 200 mm. Cannot be combined with fieldOfView.",
        +  "maximum": 200,
        +  "minimum": 5,
        +  "type": "number"
        +}
      • removedInput schema / properties / lookAt / $ref
        Removed value: -"#/properties/position"
      • addedInput schema / properties / lookAt / description
        Added value: +"Camera target [x, y, z]. Must be provided together with position."
      • addedInput schema / properties / lookAt / items
        Added value: +[
        +  {
        +    "$ref": "#/properties/position/items/0"
        +  },
        +  {
        +    "$ref": "#/properties/position/items/1"
        +  },
        +  {
        +    "$ref": "#/properties/position/items/2"
        +  }
        +]
      • addedInput schema / properties / lookAt / maxItems
        Added value: +3
      • addedInput schema / properties / lookAt / minItems
        Added value: +3
      • addedInput schema / properties / lookAt / type
        Added value: +"array"
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / position / description
        Added value: +"Camera position [x, y, z]. Must be provided together with lookAt."
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • removedInput schema / properties / up / $ref
        Removed value: -"#/properties/position"
      • addedInput schema / properties / up / description
        Added value: +"Optional camera up direction [x, y, z]. Requires position and lookAt."
      • addedInput schema / properties / up / items
        Added value: +[
        +  {
        +    "$ref": "#/properties/position/items/0"
        +  },
        +  {
        +    "$ref": "#/properties/position/items/1"
        +  },
        +  {
        +    "$ref": "#/properties/position/items/2"
        +  }
        +]
      • addedInput schema / properties / up / maxItems
        Added value: +3
      • addedInput schema / properties / up / minItems
        Added value: +3
      • addedInput schema / properties / up / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "scenePath",
        -  "position",
        -  "lookAt",
        -  "outputScenePath"
        -]New value: +[
        +  "scenePath",
        +  "outputScenePath"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_set_environment7 fields changed
      • addedInput schema / properties / brightness / description
        Added value: +"Positive brightness multiplier for the active environment."
      • addedInput schema / properties / environmentName / description
        Added value: +"Environment name from the KeyShot library. Cannot be combined with environmentPath."
      • addedInput schema / properties / environmentPath / description
        Added value: +"Absolute path to a local KeyShot environment file. Cannot be combined with environmentName."
      • addedInput schema / properties / outputScenePath / description
        Added value: +"Destination path for the saved KeyShot scene. The path must stay inside KEYSHOT_OUTPUT_DIR unless external outputs are explicitly enabled."
      • addedInput schema / properties / rotation
        Added value: +{
        +  "description": "Environment rotation in degrees, from 0 inclusive to 360 exclusive.",
        +  "exclusiveMaximum": 360,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / scenePath / description
        Added value: +"Absolute path to an existing KeyShot scene file to open. Input files may be outside the configured output directory."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
    • Changedkeyshot_status2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {},
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Operation-specific structured result data, or null when unavailable."
        +    },
        +    "error": {
        +      "description": "Human-readable failure reason, or null after success.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "errorCode": {
        +      "description": "Stable error category for common failures.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "keyshotStdoutTail": {
        +      "description": "Truncated tail of KeyShot headless output for diagnostics.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the requested operation completed successfully.",
        +      "type": "boolean"
        +    },
        +    "outputFiles": {
        +      "description": "Absolute paths of images or scene files created by the operation.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "suggestions": {
        +      "description": "Actionable recovery steps for the user or agent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "warnings": {
        +      "description": "Non-fatal conditions the user or agent should review.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "outputFiles",
        +    "warnings",
        +    "keyshotStdoutTail",
        +    "error"
        +  ],
        +  "type": "object"
        +}
  4. 2 tool updatesv0.6.0
    • Addedkeyshot_apply_camera_preset
    • Addedkeyshot_list_camera_presets
  5. 1 tool updatev0.5.0
    • Addedkeyshot_render_all_cameras
  6. 4 tool updatesv0.4.0
    • Addedkeyshot_apply_material_preset
    • Addedkeyshot_list_cameras
    • Addedkeyshot_list_material_presets
    • Addedkeyshot_render_queue
  7. 9 tool updatesv0.2.1
    • First observedkeyshot_apply_material
    • First observedkeyshot_batch_render
    • First observedkeyshot_import_model
    • First observedkeyshot_inspect_scene
    • First observedkeyshot_render
    • First observedkeyshot_save_scene
    • First observedkeyshot_set_camera
    • First observedkeyshot_set_environment
    • First observedkeyshot_status

TDQS

B3.4/5.0

Scored across 19 tools

Disambiguation3/5

Several tools target rendering (keyshot_render, keyshot_preview_render, keyshot_render_queue, keyshot_batch_render, keyshot_render_all_cameras, keyshot_product_render), so an agent must choose carefully; descriptions differentiate output format, scope, or sequencing but boundaries remain soft. Material/camera preset versus direct apply/create tools are clearer.

Naming Consistency5/5

All tools use the keyshot_ prefix with snake_case verb/noun structure, such as keyshot_apply_material, keyshot_list_cameras, and keyshot_set_camera. The pattern is predictable throughout.

Tool Count3/5

19 tools is heavier than ideal for this surface, with multiple rendering variants that could likely be consolidated. The domain is complex enough that not all are redundant, but it sits in the heavy range.

Completeness4/5

Core lifecycle is covered: status/inspect, import, camera/material/environment setup, presets, saving, and multiple render paths. Minor gaps exist around explicit render-quality/output settings, camera/material deletion, and animation, which agents may not be able to configure directly.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for AI-driven DAZ Studio scene editing. Runs as a native DAZ Studio plugin (DLL) and exposes all scene control, rendering, dForce, asset, and animation commands through the Model Context Protocol.
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A local, offline MCP server that enables AI agents to collaborate with SketchUp for controlled modeling, editing, and review tasks via 41 MCP tools.
    6
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local MCP server that enables MCP-compatible AI clients to inspect and control the currently open scene in a running Autodesk VRED Professional 2027 instance via a secure bridge, supporting read-only inspection and gated mutations like selection, visibility, transforms, and screenshots.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server for SideFX Houdini that enables AI assistants to interactively control, construct, inspect, and visually verify 3D procedural scenes through tools like node creation, parameter editing, viewport capture, and rendering.
    MIT